4.9. Ceph 文件系统快照注意事项
作为存储管理员,您可以了解管理 Ceph 文件系统(CephFS)快照的数据结构、系统组件和注意事项。
快照在创建时会创建文件系统的不可变视图。您可以在任何目录中创建快照,并且覆盖该目录下文件系统中的所有数据。
4.9.1. 为 Ceph 文件系统存储快照元数据
快照目录条目的存储及其内节点位于快照时位于的目录的一部分。所有目录条目都包括其有效的第一个和最后一个 snapid
。
4.9.2. Ceph 文件系统快照写入
Ceph 快照依赖于客户端,以帮助确定哪些操作应用到快照,并将快照数据和元数据返回至 OSD 和 MDS 集群。处理快照回写的过程是涉及的过程,因为快照适用于文件层次结构的子树,并且可以随时创建快照。
属于同一组快照的文件层次结构部分由单个 SnapRealm
指代。每个快照都适用于嵌套在目录下的子目录,并将文件层次结构分成多个"realms",其中 realm 包含的所有文件共享同一组快照。
Ceph 元数据服务器(MDS)通过为每个内节点提供功能(cap)来控制对内节点元数据和文件数据的客户端访问。在快照创建过程中,客户端在内节点上获取脏元数据,它们有能力描述该文件在该时间的状态。当客户端收到 ClientSnap
消息时,它会更新本地 SnapRealm
及其到特定内节点的链接,并为内节点生成 CapSnap
。功能回写出
,如果脏数据存在,则 CapSnap 用于在快照清除 OSD 前阻止新数据写入。
CapSnap
MDS 生成快照存在的目录条目,作为清除它们的日常进程的一部分。MDS 将目录条目保留在内存中固定有未完成的 CapSnap
数据,直到写回进程清除它们。
其它资源
- 如需了解有关设置 Ceph 用户功能的详细信息,请参阅 Red Hat Ceph Storage File System Guide 中的Creating client users for a Ceph File System 部分。
4.9.3. Ceph 文件系统快照和硬链接
Ceph 将具有多个硬链接的内节点移动到 dummy 全局 SnapRealm
。这个 dummy SnapRealm
涵盖了文件系统中的所有快照。任何新快照都会保留内节点的数据。保留的数据涵盖了任何索引节点链接上的快照。
4.9.4. 为 Ceph 文件系统更新快照
更新快照的过程与删除快照的过程类似。
如果您从其父 SnapRealm
中删除内节点,如果 SnapRealm
不存在,Ceph 会为重命名的内节点生成一个新的 SnapRealm
。Ceph 将原始父 SnapRealm
上有效的快照 ID 保存到新 SnapRealm
的 past_parent_snaps
数据结构,然后遵循与创建快照类似的进程。
其它资源
- 有关快照数据结构的详细信息,请参阅 Red Hat Ceph Storage 文件系统指南中的 Ceph 文件系统快照数据结构。
4.9.5. Ceph 文件系统快照和多个文件系统
快照已知无法与多个文件系统正常工作。
如果您有多个文件系统与命名空间共享一个 Ceph 池,则快照将冲突,并删除一个快照会导致共享同一 Ceph 池的其他快照缺少文件数据。
4.9.6. Ceph 文件系统快照数据结构
Ceph 文件系统(CephFS)使用以下快照数据结构来有效地存储数据:
SnapRealm
-
每当您在文件层次结构中的新点创建快照时,都会创建一个
SnapRealm
,或者在将快照的索引节点移出其父快照快照时创建。单个SnapRealm
代表文件层次结构的部分,它们属于同一组快照。SnapRealm
包括了一个作为快照一部分的sr_t_srnode
和inodes_with_caps
。 sr_t
-
sr_t
是磁盘快照元数据。它包含序列计数器、时间戳以及关联的快照 ID 列表和past_parent_snaps
。 SnapServer
-
SnapServer
管理快照 ID 分配、快照删除,以及维护文件系统中累积快照的列表。文件系统只有一个SnapServer
实例。 SnapContext
SnapContext
由快照序列 ID(snapid)和当前为对象定义的所有快照 ID 组成。发生写入操作时,Ceph 客户端会提供SnapContext
,以指定对象存在的快照集合。为生成SnapContext
列表,Ceph 会将与SnapRealm
关联的 snapids 和past_parent_snaps
数据结构中的所有有效的 snapids 合并。文件数据通过 RADOS 自我管理的快照存储。在自我管理的快照中,客户端必须为每个写入提供当前的
SnapContext
。在向 Ceph OSD 写入文件数据时,客户端要小心地使用正确的SnapContext
。SnapClient
缓存有效快照过滤掉过时的 snapids。SnapClient
-
SnapClient
用于与SnapServer
和缓存累积快照在本地通信。每个元数据服务器(MDS)等级都有一个SnapClient
实例。