Ceph MDS服务的多主一备高可用架构
ceph mds 高可用
Ceph mds(metadata service)作为 ceph 的访问入口,需要实现高性能及数据备份,而 MDS支持多 MDS 结构,甚至还能实现类似于 redis cluster 的多主从结构,以实现 MDS 服务的高性能和高可用,假设启动 4 个 MDS 进程,设置最大 max_mds 为 2,这时候有 2 个MDS 成为主节点,另外的两个 2 个 MDS 作为备份节点。
官网:https://docs.ceph.com/en/latest/cephfs/add-remove-mds/
设置每个主节点专用的备份 MDS,也就是如果此主节点出现问题马上切换到另个 MDS 接管主 MDS 并继续对外提供元数据读写。
设置备份 MDS 的常用选项如下:
mds_standby_replay:值为 true 或 false,true 表示开启 replay 模式,这种模式下主 MDS内的数量将实时与从 MDS 同步,如果主宕机,从可以快速的切换。如果为 false 只有宕机的时候才去同步数据,这样会有一段时间的中断。
mds_standby_for_name:设置当前 MDS 进程只用于备份于指定名称的 MDS。
mds_standby_for_rank:设置当前 MDS 进程只用于备份于哪个 Rank((上级节点),通常为Rank 编号。另外在存在多个 CephFS 文件系统中,还可以使用 mds_standby_for_fscid 参数来为指定不同的文件系统。
mds_standby_for_fscid:指定 CephFS 文件系统 ID,需要联合 mds_standby_for_rank 生效,如果设置 mds_standby_for_rank,那么就是用于指定文件系统的指定 Rank,如果没有设置,就是指定文件系统的所有 Rank。
验证当前 mds 服务器状态
cephadmin@ceph-deploy:~/ceph-cluster$ ceph mds stat
share1:1 {0=ceph-mgr1=up:active}
添加 MDS 服务器
现有ceph-mgr1 为 mds服务器,新增mgr2、mon2、mon3 为 mds服务角色。
将 ceph-mgr2 和 ceph-mon2 和 ceph-mon3 作为 mds 服务角色添加至 ceph 集群,最后实现两主两备的 mds 高可用和高性能结构。
安装 ceph-mds 服务
CentOS
客户端为centos7,客户端添加ceph软件仓库
[root@ansible ~]# yum install epel-release -y
[root@ansible ~]# yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
安装ceph-mds
[root@ansible ~]# yum install ceph-mds
ubuntu
客户端为ubuntu18.04,客户端添加ceph软件仓库
wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
vim /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ bionic main
apt install ceph-mds
mgr和mon2、3节点安装ceph-mds
apt install ceph-mds -y
添加 mds 服务器
将mgr2、mon2、mon3 添加为 mds 角色
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf mds create ceph-mgr2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf mds create ceph-mon2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf mds create ceph-mon3
--overwrite-conf 参数含义:以当前ceph-deploy的ceph.conf配置为准,替换掉mgr1节点上的/etc/ceph.conf
验证ceph集群状态
查看cephfs状态 mds节点分布
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status
验证cephfs文件系统状态
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs get share1
设置处于激活状态 mds 的数量
目前有四个 mds 服务器,但是有一个主三个备,可以优化一下部署架构,设置为为两主两备。
修改 share1 文件系统的最大 mds 主节点数量为2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs set share1 max_mds 2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs get share1
0、1表示rank编号(上级节点)
验证cephfs状态
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status
验证ceph状态
MDS 高可用优化
目前的状态是 ceph-mgr1 和 ceph-mon2 分别是 active 状态,ceph-mon3 和 ceph-mgr2分别处于 standby 状态,现在可以将 ceph-mgr2 和 ceph-mgr1 的 互为主备,将ceph-mon3 和 ceph-mon2 设置互为主备,以实现每个主都有一个固定备份角色的结构。
那么在实际的生产中,极大的可能性就是四个mds都是为主角色,提高文件系统的读写效率,但任一节点的宕机会导致节点mds的变化迁移。
则修改配置文件如下:
ephadmin@ceph-deploy:~/ceph-cluster$ cat ceph.conf
[global]
fsid = 5372c074-edf7-45dd-b635-16422165c17c
public_network = 192.168.100.0/24
cluster_network = 172.16.100.0/24
mon_initial_members = ceph-mon1,ceph-mon2,ceph-mon3
mon_host = 192.168.100.35
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
#增加配置如下
[mds.ceph-mgr2]
mds_standby_for_name = ceph-mgr1
mds_standby_replay = true
[mds.ceph-mgr1]
mds_standby_for_name = ceph-mgr2
mds_standby_replay = true
[mds.ceph-mon3]
mds_standby_for_name = ceph-mon2
mds_standby_replay = true
[mds.ceph-mon2]
mds_standby_for_name = ceph-mon3
mds_standby_replay = true
推送ceph.conf配置到各个mds节点,分发配置文件保证各 mds 服务重启有效
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mgr1
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mgr2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mon2
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf config push ceph-mon3
验证cephfs状态
重启各个mds节点服务
先重启备的mds节点服务,再重启主mds节点服务,会产生主节点角色切换到备节点
root@ceph-mon2:~# systemctl restart ceph-mds@ceph-mon2.service
root@ceph-mgr2:~# systemctl restart ceph-mds@ceph-mgr2.service
root@ceph-mgr1:~# systemctl restart ceph-mds@ceph-mgr1.service
root@ceph-mon3:~# systemctl restart ceph-mds@ceph-mon3.service
ceph 集群 mds 高可用状态
验证cephfs状态
cephadmin@ceph-deploy:~/ceph-cluster$ ceph fs status
验证 cephfs文件系统
mds节点主备切换的流程
宕机 --> replay(重新心跳探测) --> resolve(再次心跳探测) --> reconnect(重连) --> rejoin(备份节点加入) --> active(主备切换完成)
查看主节点mgr1的mds日志
root@ceph-mgr1:~# tail -100 /var/log/ceph/ceph-mds.ceph-mgr1.log
2022-12-08T09:41:32.365+0800 7fd1ad12a700 1 mds.ceph-mgr1 Updating MDS map to version 219 from mon.2
2022-12-08T09:41:33.165+0800 7fd1ad12a700 1 mds.ceph-mgr1 Updating MDS map to version 220 from mon.2
2022-12-08T09:41:33.165+0800 7fd1ad12a700 1 mds.ceph-mgr1 Monitors have assigned me to become a standby.
2022-12-08T09:41:59.137+0800 7fd1ad12a700 1 mds.ceph-mgr1 Updating MDS map to version 222 from mon.2
2022-12-08T09:41:59.137+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map i am now mds.1.222
2022-12-08T09:41:59.137+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map state change up:boot --> up:replay
2022-12-08T09:41:59.137+0800 7fd1ad12a700 1 mds.1.222 replay_start
2022-12-08T09:41:59.137+0800 7fd1ad12a700 1 mds.1.222 waiting for osdmap 2228 (which blocklists prior instance)
2022-12-08T09:41:59.145+0800 7fd1a691d700 0 mds.1.cache creating system inode with ino:0x101
2022-12-08T09:41:59.145+0800 7fd1a691d700 0 mds.1.cache creating system inode with ino:0x1
2022-12-08T09:41:59.149+0800 7fd1a591b700 1 mds.1.222 Finished replaying journal
2022-12-08T09:41:59.149+0800 7fd1a591b700 1 mds.1.222 making mds journal writeable
2022-12-08T09:42:00.141+0800 7fd1ad12a700 1 mds.ceph-mgr1 Updating MDS map to version 223 from mds.0
2022-12-08T09:42:00.141+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map i am now mds.1.222
2022-12-08T09:42:00.141+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map state change up:replay --> up:resolve
2022-12-08T09:42:00.141+0800 7fd1ad12a700 1 mds.1.222 resolve_start
2022-12-08T09:42:00.141+0800 7fd1ad12a700 1 mds.1.222 reopen_log
2022-12-08T09:42:00.141+0800 7fd1ad12a700 1 mds.1.222 recovery set is 0
2022-12-08T09:42:00.141+0800 7fd1ad12a700 1 mds.1.222 recovery set is 0
2022-12-08T09:42:00.141+0800 7fd1ad12a700 1 mds.1.222 resolve_done
2022-12-08T09:42:01.153+0800 7fd1ad12a700 1 mds.ceph-mgr1 Updating MDS map to version 224 from mon.2
2022-12-08T09:42:01.153+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map i am now mds.1.222
2022-12-08T09:42:01.153+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map state change up:resolve --> up:reconnect
2022-12-08T09:42:01.153+0800 7fd1ad12a700 1 mds.1.222 reconnect_start
2022-12-08T09:42:01.153+0800 7fd1ad12a700 1 mds.1.222 reconnect_done
2022-12-08T09:42:02.145+0800 7fd1ad12a700 1 mds.ceph-mgr1 Updating MDS map to version 225 from mon.2
2022-12-08T09:42:02.145+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map i am now mds.1.222
2022-12-08T09:42:02.145+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map state change up:reconnect --> up:rejoin
2022-12-08T09:42:02.145+0800 7fd1ad12a700 1 mds.1.222 rejoin_start
2022-12-08T09:42:02.145+0800 7fd1ad12a700 1 mds.1.222 rejoin_joint_start
2022-12-08T09:42:02.145+0800 7fd1ad12a700 1 mds.1.222 rejoin_done
2022-12-08T09:42:03.157+0800 7fd1ad12a700 1 mds.ceph-mgr1 Updating MDS map to version 226 from mon.2
2022-12-08T09:42:03.157+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map i am now mds.1.222
2022-12-08T09:42:03.157+0800 7fd1ad12a700 1 mds.1.222 handle_mds_map state change up:rejoin --> up:active
2022-12-08T09:42:03.157+0800 7fd1ad12a700 1 mds.1.222 recovery_done -- successful recovery!
2022-12-08T09:42:03.157+0800 7fd1ad12a700 1 mds.1.222 active_start
2022-12-08T09:42:03.157+0800 7fd1ad12a700 1 mds.1.222 cluster recovered.
本文来自博客园,作者:PunchLinux,转载请注明原文链接:https://www.cnblogs.com/punchlinux/p/17067334.html