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.

 

posted @ 2023-01-25 22:00  PunchLinux  阅读(1541)  评论(0编辑  收藏  举报