Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。
机器规划
节点名称 |
外网IP |
内网IP |
磁盘容量 |
ceph-node-1-171 |
192.168.10.171 |
172.16.1.171 |
10G 挂载到opt下 |
ceph-node-2-172 |
192.168.10.172 |
172.16.1.172 |
10G |
ceph-node-3-173 |
192.168.10.173 |
172.16.1.173 |
10G |
系统环境
[root@ceph-node-1-170 ~]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) [root@ceph-node-1-170 ~]# uname -a Linux ceph-node-1-170 3.10.0-1127.18.2.el7.x86_64 #1 SMP Sun Jul 26 15:27:06 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@ceph-node-1-170 ~]#
基础优化
1、时间同步,生产环境建议搭建时间服务器 echo "#time sync by fage at 2019-09-09" >>/var/spool/cron/root
echo "*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >>/var/spool/cron/root
systemctl restart crond.service 2、关闭防火墙和selinux systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s#SELINUX=enforcing#SELINUX=disable#g /etc/selinux/config 3、更改主机名 hostname node-1 echo "node-1" >/etc/hostname hostname node-2 echo "node-2" >/etc/hostname hostname node-3 echo "node-3" >/etc/hostname 4、更改hosts文件 cat >/etc/hosts <
安装ceph
1、配置Ceph源
cat << EOF > /etc/yum.repos.d/ceph.repo [ceph] name=Ceph packages for baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl= https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc priority=1 [x86_64] name=x86_64 baseurl= https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/ enabled=1 gpgcheck=0 EOF #复制到其他机器上 scp -r /etc/yum.repos.d/* [email protected]:/etc/yum.repos.d/ scp -r /etc/yum.repos.d/* [email protected]:/etc/yum.repos.d/
刷新缓存
yum makecache
2、在管理节点上安装ceph-deploy控制器
yum install -y python-setuptools ceph-deploy
3、初始化集群
创建工作目录
mkdir /opt/ceph-deploy && cd /opt/ceph-deploy
创建新的集群 集群外部网络地址 集群内部网络地址 将node-1部署为moniter
ceph-deploy new --public-network 192.168.10.0/24 --cluster-network 172.16.1.0/24 node-1
4、安装依赖包 (所有节点都需要安装)
yum install -y ceph ceph-mon ceph-mgr ceph-radogw ceph-mds
初始化mon
ceph-deploy mon create-initial
[root@node-1 ceph-deploy]# ll 总用量 44 -rw------- 1 root root 113 9月 10 00:15 ceph.bootstrap-mds.keyring 秘钥文件 -rw------- 1 root root 113 9月 10 00:15 ceph.bootstrap-mgr.keyring -rw------- 1 root root 113 9月 10 00:15 ceph.bootstrap-osd.keyring -rw------- 1 root root 113 9月 10 00:15 ceph.bootstrap-rgw.keyring -rw------- 1 root root 151 9月 10 00:15 ceph.client.admin.keyring -rw-r--r-- 1 root root 263 9月 9 23:27 ceph.conf -rw-r--r-- 1 root root 15543 9月 10 00:15 ceph-deploy-ceph.log -rw------- 1 root root 73 9月 9 23:27 ceph.mon.keyring [root@node-1 ceph-deploy]#
5、下发认证文件
cd /opt/ceph-deploy && ceph-deploy admin node-1 node-2 node-3 && ceph -s
6、部署监控manager daemon
将node-1节点作为管理节点
ceph-deploy mgr create node-1 && ceph -s
7、添加磁盘到集群
lsblk 查看磁盘
ceph-deploy osd create node-1 --data /dev/sdb1 && ceph -s
7.1、将其他节点的磁盘也加入到集群
需要在加入到节点查看磁盘名称
ceph-deploy osd create node-2 --data /dev/sdb1 ceph-deploy osd create node-3 --data /dev/sdb1 ceph -s #查看集群所有的空间 ceph osd tree # 查看osd当前状态
部署moniter 高可用集群
部署moniter集群基本是奇数数量3、5、7个的数量,会自动仲裁选举管理节点
1、将其他节点加入到moniter集群
ceph-deploy mon add node-2 --address 192.168.10.172 ceph-deploy mon add node-3 --address 192.168.10.173
2、加入到节点后可以查看到节点在仲裁的数量
ceph quorum_status --format json-pretty
查看monter状态
ceph -s #查看节点数量 ceph mon stat #查看状态 ceph mon dump # 更详细的状态
3、部署高可用监控集群
直接将节点加入到集群
ceph-deploy mgr create node-2 node-3
RBD块设备
公有云上可称为裸设备,可以进行格式化、分区等操作,但是不建议分区
可进行扩容和进行快照
可以随着使用的空间进行慢慢扩容,最大一个块设备可以支持到16EB,支持切片,可快照,可快速克隆,支持云解决方案,支持灾难恢复
ceph快存储的使用
pools资源池
创建资源池,包含有64个pgp
ceph osd pool create ceph-demo 64 64 #创建资源池 ceph osd lspools #查看资源池 ceph osd pool get ceph-demo pg_num #查看资源池中的pgp数量 ceph osd pool get ceph-demo size #查看副本数,分片存放的集群数量
查看更多类型字段可以使用帮助进行查看
ceph osd pool get -h|grep size
调度算法
ceph osd pool get ceph-demo crush_rule
可以根据自己的需求进行调整副本数量
ceph osd pool get ceph-demo size 2 ceph osd pool get ceph-demo size
可以根据自己的需求进行调整pg数量,注意也需要调整pgp
ceph osd pool set ceph-demo pg_num 128 ceph osd pool set ceph-demo pgp_num 128 ceph osd pool get ceph-demo pg_num ceph osd pool get ceph-demo pgp_num ceph -s
RBD块存储创建
创建设备
rbd create -p ceph-demo --image rbd-demo.img --size 10G #方法一 rbd create ceph-demo/rbd-demo-1.img --size 10G #方法二 rbd -p ceph-demo ls
查看创建的块的详细信息
rbd info ceph-demo/rbd-demo.img
删除已经创建的块设备
rbd rm -p ceph-demo --image rbd-demo-1.img rbd -p ceph-demo ls
RBD块设备的使用挂载
挂载前需要将创建时候的默认特性去除掉,不然会报错
查看特性
rbd -p ceph-demo info rbd-demo.img
去除特性
rbd feature disable ceph-demo/rbd-demo.img deep-flatten rbd feature disable ceph-demo/rbd-demo.img fast-diff rbd feature disable ceph-demo/rbd-demo.img object-map rbd feature disable ceph-demo/rbd-demo.img exclusive-lock
查看去除特性的结果
rbd -p ceph-demo info rbd-demo.img
挂载设备并查看设备挂载的名称
rbd map ceph-demo/rbd-demo.img
rbd device list
挂载完成后就可以进行分区格式化这些操作
fdisk -l|grep /dev/rbd0 mkfs.ext4 /dev/rbd0 mkdir /mnt/rbd-demo mount /dev/rbd0 /mnt/rbd-demo
挂载完成后就可以正常的读写操作了
RBD设备扩容
查看设备名称及容量大小后进行扩容
rbd -p ceph-demo ls #查看资源池中设备名称 rbd -p ceph-demo info --image rbd-demo-1.img #资源池的块设备查看容量大小 rbd resize ceph-demo/rbd-demo-1.img --size 20G #扩容为20G
设备扩容后需要在磁盘分区中也进行扩容才会在系统显示扩容后的容量
需要注意,resize2fs 只对ext2/3/4文件系统有效,对xfs文件系统无效
rbd resize ceph-demo/rbd-demo-1.img --size 20G
RBD数据写入流程
每个数据写入都会被切割成集群数量的分数进行存储,保证数据的高可用性
一个对象会切割成多个objects,每个都是4M大小
rados -p ceph-demo ls rados -p ceph-demo ls|grep rbd_data.125 rados -p ceph-demo stat rbd_data.125ae45119d8.0000000000000500
objects会落在不同的pg上
验证objects落在不同的pg上
for i in `ceph osd map ceph-demo rbd_data.125ae45119d8`;do ceph osd map ceph-demo ${i};done
测试写入数据,实时监控写入增长情况
rados -p ceph-demo ls |grep rbd_data.134a3db15f91 | wc -l cd /data/ && dd if=/dev/zero of=test.img bs=1M count=1024
由97增长到354个
watch -n 1 'rados -p ceph-demo ls | grep rbd_data.134a3db15f91 | wc -l'
代表会自动去生成容量文件,但是不能超出限定的块设备容量大小
ceph警告排查
ceph -s # 列出告警
ceph health detail # 查看告警信息详细内容
ceph osd pool application enable ceph-demo rbd ceph osd pool application get ceph-demo
如果出现其他的告警
ceph crash ls ID ENTITY NEW 2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27 mgr.node-1 * 2020-09-10-17:05:17.880659Z_7c57908d-192-8864-8e75-ef95f5gdbbvd mgr.node-1 *
查看某个时间的详情
ceph crash info 2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27
systemctl status ceph-mgr@node-1
删除误报的告警进行打包
ceph crash archive 2020-09-10-17:00:17.247005Z_cbe7d9c6-6e8-4d43-8e75-3c55aebfbe27 ceph crash archive 2020-09-10-17:05:17.880659Z_7c57908d-192-8864-8e75-ef95f5gdbbvd
ceph -s && ceph health detail #就看到会正常了