MDS元数据服务
MDS在CephFS中负责管理元数据,其本质上只是一个守护进程。MDS进程本身并不具备持久化存储的功能,而只能依靠内存临时记录部分元数据。CephFS的元数据持久化保存在OSD上,用所谓的元数据池进行统一管理。同时MDS还使用Journal日志来保证元数据操作的一致性。
为了防止单个MDS故障引起服务不可用,MDS配备了冷备和热备两种备份策略。
- 冷备
备份的mds只起到一个进程备份的作用,并不备份元数据。主备进程保持心跳关系,一旦主的mds挂了,备份mds replay元数据到缓存,需要消耗一点时间。
- 热备
除了进程备份,元数据缓存还时刻与主mds保持同步,当active mds挂掉后,热备的mds直接变成主mds,并且没有replay的操作,元数据缓存大小和主mds保持一致。
另外,当元数据默认的单个活跃 MDS 成为瓶颈时,CephFS还支持配置多个活跃的 MDS 守护进程,提升集群性能。它能够将文件系统树分割成子树。每个子树可以交给特定的 MDS 进行权威管理,从而将元数据压力分摊到多个活跃的MDS上。
MDS元数据处理流程
下图1是MDS整体消息分发处理流程:
图1 MDS 整体消息分发流程
下图2是Server模块负责处理的,来自Client的消息请求流程:
图2 Server模块消息分发处理
其中,Server::handle_client_request主要分发处理Client的元数据相关的请求,如创建文件,创建目录,查询文件属性等,消息分发处理流程如下:
图3 MDS Client元数据请求处理
在Ceph 14.2.16 N版本中一共有28种来自客户端的元数据请求:
CEPH_MDS_OP_LOOKUPHASH:
CEPH_MDS_OP_LOOKUPINO:
CEPH_MDS_OP_LOOKUPPARENT:
CEPH_MDS_OP_LOOKUPNAME:
CEPH_MDS_OP_LOOKUP:
CEPH_MDS_OP_LOOKUPSNAP:
CEPH_MDS_OP_GETATTR:
CEPH_MDS_OP_SETATTR:
CEPH_MDS_OP_SETLAYOUT:
CEPH_MDS_OP_SETDIRLAYOUT:
CEPH_MDS_OP_SETXATTR:
CEPH_MDS_OP_RMXATTR:
CEPH_MDS_OP_READDIR:
CEPH_MDS_OP_SETFILELOCK:
CEPH_MDS_OP_GETFILELOCK:
CEPH_MDS_OP_CREATE:
CEPH_MDS_OP_OPEN:
CEPH_MDS_OP_MKNOD:
CEPH_MDS_OP_LINK:
CEPH_MDS_OP_UNLINK:
CEPH_MDS_OP_RMDIR:
CEPH_MDS_OP_RENAME:
CEPH_MDS_OP_MKDIR:
CEPH_MDS_OP_SYMLINK:
CEPH_MDS_OP_LSSNAP:
CEPH_MDS_OP_MKSNAP:
CEPH_MDS_OP_RMSNAP:
CEPH_MDS_OP_RENAMESNAP:
MDS根据不同元数据请求CEPH_MDS_OP_*作不同处理,需要修改元数据的请求会生成日志,没有修改的元数据请求不需生成日志。