注意
本文档适用于 Ceph 开发版本。
CephFS 动态元数据管理
元数据操作通常占所有文件系统操作的 50% 以上。此外,与存储扩展(进而线性扩展 I/O 吞吐量)相比,元数据扩展方式更为复杂。这是由于文件系统元数据的层次性和相互依赖性所致。因此,在 CephFS 中,元数据工作负载与数据工作负载是解耦的,以避免对 RADOS 集群造成不必要的压力。因此,元数据由一组元数据服务器(MDS)处理。动态子树分区.
动态子树分区
In traditional subtree partitioning, subtrees of the file system hierarchy are assigned to individual MDSs. This metadata distribution strategy provides good hierarchical locality, linear growth of cache and horizontal scaling across MDSs and a fairly good distribution of metadata across MDSs.
传统子树划分的问题是,随着深度(单个 MDS 跨度)的工作负载增长,会导致活动热点。这导致缺乏垂直扩展和闲置资源/MDS 的浪费。
这导致了采用更动态的元数据处理方式:动态子树划分,其中繁忙 MDS 中的目录层次结构负载密集部分迁移到非繁忙 MDS。
这种策略确保了活动热点出现时得到缓解,因此除了水平扩展外,还带来了元数据工作负载的垂直扩展。
子树迁移期间的导出过程
一旦导出器验证子树可以导出(非降级集群,非冻结子树根),子树根目录将临时进行认证固定,子树冻结将被启动,导出器将致力于子树迁移,除非导入器或自身发生中断故障。
交换 MExportDiscover 消息以确保导出的基本目录的 inode 在目标节点上打开。导入器对其进行认证固定以防止其被修剪。这发生在导出器完成子树冻结之前,以确保导入器能够复制必要的元数据。当导出器收到 MDiscoverAck 时,它通过移除其临时认证固定来允许冻结继续进行。
只有当基本子树目录被导入器和导出器以外的节点打开时,才会发生警告阶段。如果不是这样,则这意味着子树内或其嵌套下的任何元数据都没有被导入器和导出器以外的任何节点复制。如果是这样,则 MExportWarning 消息会通知任何旁观者该区域的权限暂时模糊,并列出导出器和导入器作为权威 MDS 节点。特别是,从其缓存中修剪项目的旁观者必须向旧的和新的权限发送 MCacheExpire 消息。这是必要的,以确保幸存的权限可靠地接收所有过期信息,即使导入器或导出器失败。在子树冻结时(导入器和导出器上),过期信息不会立即处理;相反,它们将被排队,直到区域解冻并且可以确定节点是否具有权限。
导出器随后打包一个包含子树所有元数据的 MExport 消息,并将对象标记为非权威。MExport 消息将实际的子树元数据发送给导入器。收到后,导入器将其数据插入其缓存,将所有对象标记为权威,并在 EImportStart 日志消息中记录所有元数据的副本。一旦安全刷新,它将回复 MExportAck。导出器现在可以记录一个 EExport 日志条目,该条目最终指定导出成功。在存在故障的情况下,只有 EExport 条目的存在才能在恢复过程中消除权限的模糊性。
一旦记录,导出器将向任何旁观者发送 MExportNotify,通知他们权限不再模糊,缓存过期信息应仅发送给新权限(导入器)。一旦这些被确认回导出器,隐式刷新旁观者到导出器的消息流中的任何杂乱的过期通知,导出器解冻子树,清理其迁移相关状态,并发送最终的 MExportFinish 给导入器。收到后,导入器记录 EImportFinish(true)(在本地注明导出确实成功),解冻其子树,处理任何排队的缓存过期信息,并清理其状态。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.