注意
本文档适用于 Ceph 开发版本。
CephFS 分布式元数据缓存
虽然Ceph文件系统中的inode数据存储在RADOS中并由客户端直接访问,但inode元数据和目录信息由Ceph元数据服务器(MDS)管理。MDS充当所有与元数据相关的活动的中介,并将生成的信息存储在文件数据不同的RADOS池中。
CephFS 客户端可以请求MDS代表其获取或更改inode元数据,但MDS也可以授予客户端capabilities(又名权能)给每个inode(参见CephFS中的功能).
权能授予客户端缓存和可能操作与inode相关的一些数据或元数据的能力。当另一个客户端需要访问相同的信息时,MDS将撤销权能,客户端最终会将其返回,以及inode元数据的更新版本(如果它在持有权能期间对其进行了更改)。
客户端可以请求权能,并且通常会获得它们,但在存在竞争访问或MDS内存压力的情况下,它们可能会被撤销。当权能被撤销时,客户端应在能够时尽快将其返回。未能及时处理的客户端可能会最终被列入黑名单并且无法与集群通信。
由于缓存是分布式的,MDS必须非常小心地确保没有客户端持有可能与其他客户端的权能冲突的权能,或它自己执行的操作。这使得cephfs客户端可以依赖比像NFS这样的文件系统更大的缓存一致性,在客户端可能缓存数据元数据超过其在服务器上更改点的位置的情况下。
客户端元数据请求
当客户端需要查询/更改inode元数据或在目录上执行操作时,它有两个选项。它可以直接向MDS发起请求,或从其缓存中提供信息。使用CephFS,后者只有在客户端拥有必要的权能时才可能。
客户端可以向MDS发送简单的请求以查询或请求对某些元数据的更改。对这些请求的回复还可以授予客户端一组针对inode的权能,允许它在不咨询MDS的情况下执行后续请求。
客户端也可以直接从MDS请求权能,这对于读取或写入文件数据是必要的。
MDS 集群中的分布式锁
当MDS想要读取或更改关于inode的信息时,它必须为其获取适当的锁。MDS集群可能对给定的inode有一系列不同类型的锁,并且每个MDS可能有一组不重叠的锁。
如果存在会与这些锁冲突的未解决的权能,那么在获取锁之前必须撤销它们。一旦竞争的权能被返回给MDS,然后它就可以获取锁并执行操作。
在由多个MDS提供服务的文件系统中,元数据缓存也分布在集群中的MDS之间。对于每个inode,在任何给定时间,集群中只有一个MDS被认为是权威的。对那个inode的任何更改请求都必须由权威的MDS执行,尽管非权威的MDS可以将请求转发给权威的MDS。
非权威MDS还可以获取读锁,以阻止权威MDS在释放锁之前更改数据,以便它们可以向客户端提供inode信息。
一个inode的权威MDS也可能随时间变化。MDS将积极地在它们之间平衡inode缓存的职责,但这可以被固定某些子树到单个MDS所覆盖。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.