title: cephfs如何配置多主(多活)MDS
2019/03/29 ypdai
配置多主MDS
MDS配置模式分为以下三种:
- 冷备模式:同一时间,只有一个mds工作,单纯的进程备份。
- 热备模式:同一时间,只有一个mds工作,但除了进程备份,也实时备份元数据,这样可以加快MDS故障切换时间。
- 多主模式:多个MDS同时工作,各自管理自己负责的元数据。
默认情况下,每个cephfs文件系统的MDS都是以冷备模式配置的。有时候为了获取更高的性能,可以启用多个活动的MDS守护进程,也就是多主模式,它们将彼此分担元数据的工作负载。
下面主要介绍如何配置MDS多主模式。
1、什么时候需要配置多主MDS?
当cephfs的性能出现在MDS上时,就应该配置多个活动的MDS。通常是多个客户机应用程序并行的执行大量元数据操作,并且它们分别有自己单独的工作目录。这种情况下很适合使用多主MDS模式。
2、开始配置MDS多主模式
2.1、增加max_mds
每个cephfs文件系统都有一个max_mds
设置,可以理解为它将控制创建多少个主MDS。注意只有当实际的MDS个数大于或等于max_mds
设置的值时,mdx_mds
设置才会生效。例如,如果只有一个MDS守护进程在运行,并且max_mds
被设置为两个,则不会创建第二个主MDS。
将max_mds设置为所需的个数:
$ ceph fs set max_mds 2
2.2、配置备用MDS
即使有多个活动的MDS,如果其中一个MDS出现故障,仍然需要备用守护进程来接管。因此,对于高可用性系统,实际配置max_mds
时,最好比系统中MDS的总数少一个。
但如果你确信你的MDS不会出现故障,可以通过以下设置来通知ceph不需要备用MDS,否则会出现insufficient standby daemons available
告警信息:
$ ceph fs set <fs> standby_count_wanted 0
2.3、绑定集群目录到指定的MDS上
在多主MDS配置中,这些MDS可以在集群中均匀的动态的分配元数据负载。但还有一种情况就是我们需要把某个集群目录绑定到一个指定MDS上,只让这个MDS来负责这个目录的元数据处理,比如我有两个集群目录dir01、dir02,然后我配置MDS01、MDS02为双主模式同时工作,这样我就可以让MDS01负责dir01的元数据,MDS02负责dir02的元数据。这样配置好处显而易见。
配置方式:
$ setfattr -n ceph.dir.pin -v {mds-rank} {path-to-dir}
{mds-rank}从0开始,ceph -s命令输出里面可以看到:
# node01节点上mds-rank为0,node02节点上的mds-rank为1
mds: ceph-2/2/2 up {0=node01=up:active,1=node02=up:active}
{path-to-dir}表示需要绑定到指定mds-rank
上的集群目录。
这样就配置好了,步骤比较简单。
2.4、还原为单主MDS
恢复也就两步:
# 设置max_mds
$ ceph fs set max_mds 1
# 删除不需要的rank
$ ceph mds deactivate {cephfs-name}:{mds-rank}
注意所有的rank,包括要被移除的rank,必须先激活。这意味着必须至少有max_mds
个MDS守护进程可用。
在一段时间内,停用的rank将首先进入停止状态,同时将其负责的元数据传递给剩余的活动的MDS。这个阶段可能需要几秒钟到几分钟。