Ceph installation, building clusters, using the block storage file sharing

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/ck784101777/article/details/102744203

I. Overview

1. What is a distributed file system

Distributed File System (Distributed File System) refers to the physical storage resource file system management is not necessarily directly connected to the local node, but the node is connected to a computer network. Based on the distributed file system client / server model

2. Common Distributed File System

- Lustre

- Hadoop

- FastDFS

- Ceph

- ClusterFS

3. What is the Ceph

- Ceph is a distributed file system

- a highly scalable, high availability, high-performance features

- Ceph object storage may be provided, block storage file system storage

- Ceph can provide storage level PB (PB> TB> GB) 1PB = 1024 * 1TB = 1024 * 1024 * GB

4.Ceph components

- OSDs: a storage device

- Monitors: cluster monitoring components

- RadosGateway (RGW): Object Storage Gateway

- MDSs: store file system metadata (target memory block and the assembly does not require storage)

- Client: Client, you need to install ceph support components

Then, as shown, look to the left from the right, osd is the most ceph-based storage devices .osd storage disks directly, on the basis of osd. We can merge several osd storage pool into a pool, with the storage pool. We will provide an external interface for the client to write data, and that this interface can be a block storage rbd, so we will block storage format, mount it to a directory. this way we can write the

The storage objects go into the details, the block storage file system storage

- 对象存储 : 也就是通常意义的键值存储,其接口就是简单的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         #可以删除快照

 

Guess you like

Origin blog.csdn.net/ck784101777/article/details/102744203