分布式存储系统之Ceph集群MDS扩展

前文我们了解了cephfs使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16758866.html;今天我们来聊一聊MDS组件扩展相关话题;
我们知道MDS是为了实现cephfs而运行的进程,主要负责管理文件系统元数据信息;这意味着客户端使用cephfs存取数据,都会先联系mds找元数据;然后mds再去元数据存储池读取数据,然后返回给客户端;即元素存储池只能由mds操作;换句话说,mds是访问cephfs的唯一入口;那么问题来了,如果ceph集群上只有一个mds进程,很多个客户端来访问cephfs,那么mds肯定会成为瓶颈,所以为了提高cephfs的性能,我们必须提供多个mds供客户端使用;那mds该怎么扩展呢?前边我们说过,mds是管理文件系统元素信息,将元素信息存储池至rados集群的指定存储池中,使得mds从有状态变为无状态;那么对于mds来说,扩展mds就是多运行几个进程而已;但是由于文件系统元数据的工作特性,我们不能像扩展其他无状态应用那样扩展;比如,在ceph集群上有两个mds,他们同时操作一个存储池中的一个文件,那么最后合并时发现,一个删除文件,一个修改了文件,合并文件系统崩溃了;即两个mds同时操作存储池的同一个文件那么对应mds需要同步和数据一致,这和副本有什么区别呢?对于客户端读请求可以由多个mds分散负载,对于客户端的写请求呢,向a写入,b该怎么办呢?b只能从a这边同步,或者a向b写入,这样一来对于客户端的写请求并不能分散负载,即当客户端增多,瓶颈依然存在;
为了解决分散负载文件系统的读写请求,分布式文件系统业界提供了将名称空间分割治理的解决方案,通过将文件系统根树及其热点子树分别部署于不同的元数据服务器进行负载均衡,从而赋予了元数据存储线性扩展的可能;简单讲就是一个mds之复制一个子目录的元数据信息;
元数据分区

分布式存储系统之Ceph集群MDS扩展

文章插图
提示:如上所示,我们将一个文件系统可以分成多颗子树,一个mds只复制其中一颗子树,从而实现元数据信息的读写分散负载;
常用的元数据分区方式
1、静态子树分区:所谓静态子树分区,就是管理员手动指定某颗指数,由某个元数据服务器负责;如,我们将nfs挂载之一个目录下,这种方式就是静态子树分区,通过将一个子目录关联到另外一个分区上去,从而实现减轻当前文件系统的负载;
2、静态hash分区:所谓静态hash分区是指,有多个目录,对应文件存储到那个目录下,不是管理员指定而是通过对文件名做一致性hash或者hash再取模等等,最终落到那个目录就存储到那个目录;从而减轻对应子目录在当前文件系统的负载;
3、惰性混编分区:所谓惰性混编分区是指将静态hash方式和传统文件系统的方式结合使用;
4、动态子树分区:所谓动态子树分区就是根据文件系统的负载能力动态调整对应子树;cephfs就是使用这种方式实现多活mds;在ceph上多主MDS模式是指CephFS将整个文件系统的名称空间切分为多个子树并配置到多个MDS之上,不过,读写操作的负载均衡策略分别是子树切分和目录副本;将写操作负载较重的目录切分成多个子目录以分散负载;为读操作负载较重的目录创建多个副本以均衡负载;子树分区和迁移的决策是一个同步过程,各MDS每10秒钟做一次独立的迁移决策,每个MDS并不存在一个一致的名称空间视图,且MDS集群也不存在一个全局调度器负责统一的调度决策;各MDS彼此间通过交换心跳信息(HeartBeat,简称HB)及负载状态来确定是否要进行迁移、如何分区名称空间,以及是否需要目录切分为子树等;管理员也可以配置CephFS负载的计算方式从而影响MDS的负载决策,目前,CephFS支持基于CPU负载、文件系统负载及混合此两种的决策机制;

经验总结扩展阅读