Ceph安装,集群搭建,使用块存储共享文件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ck784101777/article/details/102744203

一、概述

1.什么是分布式文件系统

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户机/服务器模式

2.常见分布式文件系统

- Lustre

- Hadoop

- FastDFS

- Ceph

- ClusterFS

3.什么是Ceph

- Ceph是一个分布式文件系统

- 具有高扩展,高可用,高性能的特点

- Ceph可以提供对象存储,块存储,文件系统存储

- Ceph可以提供PB级别的存储空间(PB>TB>GB) 1PB=1024*1TB=1024*1024*GB

4.Ceph组件

- OSDs:存储设备

- Monitors:集群监控组件

- RadosGateway(RGW):对象存储网关

- MDSs:存放文件系统的元数据(对象存储和块存储不需要该组件)

- Client:客户端,需要安装ceph支持组件

如图,从右边向左边看,osd是ceph最基础的存储设备.osd直接使用存储磁盘,在osd的基础上.我们可以将数个osd合并成一个存储池pool,有了存储池之后.我们将提供一个对外的接口,以便客户端写入数据,那这个接口可以是块存储rbd,于是我们将块存储格式化,将其挂载到目录下.这样我们就可以写入数据了

5.细谈对象存储,块存储,文件系统存储

- 对象存储 : 也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;
 - 块存储 这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;
 - 文件存储 : 通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;

二、安装Ceph,搭建Ceph集群

1.拓扑图

准备四台主机,在node1上安装Monitors监控服务.

2.yum仓库支持

需要准备一张ceph镜像

[下载地址ceph.ios] 链接: https://pan.baidu.com/s/1LYzXXUaDTq7lNP5rWqHj4Q 提取码: 5vac 

需要配置yum源

  1. [root@node1 ~]# mkdir /mnt/ceph
  2. [root@node1 ~]# mount ceph10.ios /mnt/ceph                                    #将镜像挂载到目录下
  3. [root@node1 ~]# cat /etc/yum.repos.d/ceph.repo
  4. [mon]
  5. name=mon
  6. baseurl=ftp://192.168.4.254/ceph/MON
  7. gpgcheck=0
  8. [osd]
  9. name=osd
  10. baseurl=ftp://192.168.4.254/ceph/OSD
  11. gpgcheck=0
  12. [tools]
  13. name=tools
  14. baseurl=ftp://192.168.4.254/ceph/Tools
  15. gpgcheck=0
  16. [root@node1 ~]# yum repolist                #验证YUM源软件数量
  17. 源标识            源名称                    状态
  18. Dvd                redhat                    9,911
  19. Mon                mon                        41
  20. Osd                osd                        28
  21. Tools            tools                    33
  22. repolist: 10,013
  23. [root@node1 ~]# for i in client node1 node2 node3
  24. do
  25. scp /etc/yum.repos.d/ceph.repo $i:/etc/yum.repos.d/
  26. done

3.建立免密登录

自己也需要发送

  1. [root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''  
  2. [root@node1 ~]# for i in 10 11 12 13
  3. do
  4. ssh-copy-id 192.168.4.$i
  5. done

4.配置域名解析

/etc/hosts解析的域名必须与本机主机名一致

  1. [root@node1 ~]# cat /etc/hosts
  2. ... ...
  3. 192.168.4.10 client
  4. 192.168.4.11     node1
  5. 192.168.4.12     node2
  6. 192.168.4.13     node3
  7. [root@node1 ~]# for i in 10 11 12 13                  #发送给其他主机
  8.  do
  9. scp [email protected].$i:/etc/yum.repos.d/
  10. done

5.配置时间同步

每台主机都必须要配置

  1. [root@node1 ~]# vim /etc/chrony.conf      #添加一个共同时间节点
  2. … …
  3. server  s1a.time.edu.cn iburst         #iburst参数设置重启服务后尽快同步时间
  4.  
  5.  
  6. [root@node1 ~]# for i in client node1 node2 node3
  7. do
  8. scp /etc/chrony.conf $i:/etc/
  9. ssh $i "systemctl restart chronyd"
  10. done

6.准备存储磁盘

准备2张20G的磁盘

我使用的是Linux的KVM虚拟平台,添加磁盘非常简单(添加硬件,添加磁盘即可) 

使用VMware也非常简单

 

三、部署ceph集群

1.node1配置

在node1安装部署Ceph服务的软件

  1. [root@node1 ~]# yum -y install ceph-deploy        
  2. [root@node1 ~]# ceph-deploy --help                     #可以查看Ceph使用命令
  3. [root@node1 ~]# ceph-deploy mon --help
  4. [root@node1 ~]# mkdir ceph-cluster                #创建目录用于保存ceph生成的配置文件
  5. [root@node1 ~]# cd ceph-cluster/

2.node2,node3配置

给所有节点安装ceph相关软件包。必须在node1的ceph-cluster下执行命令

  1. [root@node1 ceph-cluster]# for i in node1 node2 node3     #安装相关服务
  2. do
  3. ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"
  4. done
  5. #创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件。
  6. [root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3 
  7. #初始化所有节点的mon服务,也就是启动mon服务(主机名解析必须对)。
  8. [root@node1 ceph-cluster]# ceph-deploy mon create-initial

3.创建OSD存储空间

初始化清空磁盘数据和创建OSD存储空间(仅node1操作即可)。

  1. [root@node1 ceph-cluster]#lsblk
  2. [root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdb  #初始化清空磁盘数据
  3. [root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdb
  4. [root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdb
  5. [root@node1 ceph-cluster]# ceph-deploy osd create node1:vdb  #创建OSD存储空间
  6. [root@node1 ceph-cluster]# ceph-deploy osd create node2:vdb
  7. [root@node1 ceph-cluster]# ceph-deploy osd create node3:vdb

4.查看ceph集群信息

  1. [root@node1 ~]# ceph -s
  2.     cluster 9074897d-8da1-4a29-bb64-c039cbdefe0f
         health HEALTH_OK
         monmap e1: 3 mons at {ceph1=192.168.1.11:6789/0,ceph2=192.168.1.12:6789/0,ceph3=192.168.1.13:6789/0}
                election epoch 4, quorum 0,1,2 ceph1,ceph2,ceph3
         osdmap e18: 3 osds: 3 up, 3 in
                flags sortbitwise
          pgmap v1481: 64 pgs, 1 pools, 14756 kB data, 23 objects
                134 MB used, 45912 MB / 46046 MB avail
                      64 active+clean
     

5.创建镜像

我们使用ceph的块存储

ceph镜像支持很多功能,但很多是操作系统不支持的,我们只开启layering。

  1. [root@node1 ~]# ceph osd lspools     #查看存储池
  2. 0 rbd,
  3. #jacob为创建的镜像名称,可以为任意字符。
  4. #--image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW功能。
  5. [root@node1 ~]# rbd create image1 --image-feature layering --size 10G
  6. [root@node1 ~]# rbd list
  7. image1
  8. [root@node1 ~]# rbd info image1            #查看image1详细
  9. rbd image 'image1':
  10.     size 10240 MB in 2560 objects
  11.     order 22 (4096 kB objects)
  12.     block_name_prefix: rbd_data.d3aa2ae8944a
  13.     format: 2
  14.     features: layering

6.客户端使用存储块

客户端通过KRBD访问

  1. #客户端需要安装ceph-common软件包
  2. #拷贝配置文件(否则不知道集群在哪)
  3. #拷贝连接密钥(否则无连接权限)
  4. [root@client ~]# yum -y install ceph-common
  5. [root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/
  6. [root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring  /etc/ceph/
  7. [root@client ~]#rbd list                   #查看镜像池
  8. demo-image
  9. [root@client ~]# rbd map imges              #生成磁盘块     
  10. [root@client ~]# lsblk
  11. rbd0   252:0    0  10G  0 disk
  12. [root@client ~]# rbd showmapped
  13. id pool image snap device
  14. 0 rbd image1 - /dev/rbd0
  15. [root@client ~]# mkfs.xfs /dev/rbd0           #格式化分区,只有第一次使用需要格式化
  16. [root@client ~]# mount /dev/rbd0 /mnt/  #挂载使用
  17. [root@client ~]# echo "test" > /mnt/test.txt

7.客户端撤销磁盘映射

  1. [root@client ~]# umount /mnt
  2. [root@client ~]# rbd showmapped
  3. id pool image snap device
  4. 0 rbd jacob - /dev/rbd0
  5. //语法格式:
  6. [root@client ~]# rbd unmap /dev/rbd0

四、镜像扩容

1.扩容容量

  1. [root@node1 ~]# rbd info jacob
  2. rbd image 'demo-image':
        size 10240 MB in 3840 objects
        order 22 (4096 kB objects)
        block_name_prefix: rbd_data.102e2ae8944a
        format: 2
        features: layering
        flags: 
  3. [root@node1 ~]# rbd resize --size 15G jacob
  4. [root@node1 ~]# rbd info jacob
  5. rbd image 'demo-image':
        size 15360 MB in 3840 objects
        order 22 (4096 kB objects)
        block_name_prefix: rbd_data.102e2ae8944a
        format: 2
        features: layering
        flags: 
  6. [root@client mnt]# lsblk                 #看到客户端的磁盘块也扩大了
  7. rbd0   252:0    0  15G  0 disk /mnt
     

2.缩小容量

  1. [root@node1 ~]# rbd resize --size 7G jacob --allow-shrink #--allow-shrink允许缩小
  2. [root@node1 ~]# rbd info image

 

五、创建镜像快照

1.查看镜像快照(默认所有镜像都没有快照)

  1. [root@node1 ~]# rbd snap ls jacob

2.给镜像创建快照

  1. [root@node1 ~]# rbd snap create image1 --snap image1-snap1    #--snap后接快照名
  2. #为image1镜像创建快照,快照名称为jacob-snap1
  3. [root@node1 ~]# rbd snap ls jacob
  4. SNAPID NAME SIZE
  5. 4 jacob-snap1 15360 MB

3.删除客户端写入的测试文件

  1. [root@client ~]# rm -rf /mnt/test.txt
  2. [root@client ~]# umount /mnt

4. 还原快照

  1. [root@node1 ~]# rbd snap rollback image1 --snap image1-snap1
  2. #客户端重新挂载分区
  3. [root@client ~]# mount /dev/rbd0 /mnt/
  4. [root@client ~]# ls /mnt

 

六、快照克隆

1.克隆快照

  1. [root@node1 ~]# rbd snap protect image1 --snap image1-snap1       #生成快照,并且保护镜像
  2. [root@node1 ~]# rbd snap rm image1 --snap image1-snap1       #会失败,提示被保护
  3. 2019-10-25 19:38:04.570601 7f5e7d9c1d80 -1 librbd::Operations: snapshot is protected
  4. #使用image1镜像的快照image1-snap1克隆一个新的名称为image1-clone的镜像
  5. [root@node1 ~]# rbd clone image1 --snap image1-snap1 image1-clone --image-feature layering

2.查看克隆镜像与父镜像快照的关系

  1. [root@node1 ~]# rbd info image1-clone
  2. rbd image 'image1-clone':
  3.     size 15360 MB in 3840 objects
  4.     order 22 (4096 kB objects)
  5.     block_name_prefix: rbd_data.d3f53d1b58ba
  6.     format: 2
  7.     features: layering
  8.     flags:
  9.     parent: rbd/image1@image1-snap1
  10. #克隆镜像很多数据都来自于快照链
  11. #如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!
  12. [root@node1 ~]# rbd flatten jacob-clone
  13. [root@node1 ~]# rbd info jacob-clone
  14. rbd image 'jadob-clone':
  15.     size 15360 MB in 3840 objects
  16.     order 22 (4096 kB objects)
  17.     block_name_prefix: rbd_data.d3f53d1b58ba
  18.     format: 2
  19.     features: layering
  20.     flags:
  21. #注意,父快照信息没了!
  22. [root@node1 ~]# rbd snap unprotect jacob --snap jacob-snap1 #取消快照保护
  23. [root@node1 ~]# rbd snap rm jacob --snap jacob-snap1         #可以删除快照

猜你喜欢

转载自blog.csdn.net/ck784101777/article/details/102744203