注意
本文档适用于 Ceph 开发版本。
快照调度模块
该模块为 CephFS 实现了计划快照。它提供了一个用户界面来添加、查询和删除快照计划和保留策略,以及一个调度器来执行快照并相应地修剪现有快照。
如何启用
The snap_schedule模块通过以下方式启用:
ceph mgr module enable snap_schedule
查看当前由 cephadm 使用的文件模板。
该模块使用CephFS 快照,请同时参考此文档。
该模块的子命令位于ceph fs snap-schedule命名空间下。
快照计划通过路径、重复间隔和开始时间来标识。重复间隔定义了两次连续快照之间的时间。它由一个数字和一个周期乘数指定,可以是h(小时), d(天), w(周), M(月)和y(年)。例如,重复间隔为12h表示每 12 小时执行一次快照。1h的快照计划,并且使用默认开始时间时,第一个快照将在 14:00 执行。
UTC: 2022-08-08T05:30:00 即 UTC 上午 5:30,没有明确时区偏移
保留规格通过路径和保留规格本身来标识。保留规格由一个数字和一个时间间隔组成,中间用空格分隔,或者由<数字><时间间隔>对组成的字符串表示。<数字>个快照被保留,这些快照之间的时间间隔至少为<时间间隔>。例如7d表示用户希望保留 7 个快照,这些快照之间的时间间隔至少为一天(但可能更长)。h(小时), d(天), w(周), M(月), y(年)和n。后者是一个特殊修饰符,例如10n表示保留最后 10 个快照,无论时间如何,
所有子命令都接受可选fs参数来指定多文件系统设置和是CephFS的名称,是管理设置中的路径。如果未传递fs默认为 fs_map 中列出的第一个文件系统。是CephFS的名称,是参数时fs等同于volume.
当传递时间戳(即startaddadd, 删除, activate和deactivate子命令中的%Y-%m-%dT%H:%M:%S。当使用 python3.7 或更高版本,或者https://github.com/movermeyer/backports.datetime_fromisoformat已安装时,任何由 python 的datetime.fromisoformat解析的有效 ISO 时间戳都是有效的。
如果未提供子命令,将打印摘要:
#> ceph fs snap-schedule
no valid command found; 8 closest matches:
fs snap-schedule status [<path>] [<fs>] [<format>]
fs snap-schedule list <path> [--recursive] [<fs>] [<format>]
fs snap-schedule add <path> <snap_schedule> [<start>] [<fs>]
fs snap-schedule remove <path> [<repeat>] [<start>] [<fs>]
fs snap-schedule retention add <path> <retention_spec_or_period> [<retention_count>] [<fs>]
fs snap-schedule retention remove <path> <retention_spec_or_period> [<retention_count>] [<fs>]
fs snap-schedule activate <path> [<repeat>] [<start>] [<fs>]
fs snap-schedule deactivate <path> [<repeat>] [<start>] [<fs>]
Error EINVAL: invalid command
注意:
A subvolume参数不再被命令接受。
检查快照计划
该模块提供了两个子命令来检查现有计划:列表和status。两者都通过可选format参数提供纯文本和 JSON 输出。列表子命令将以简短的单行格式列出路径上的所有计划。它提供了一个递归参数来列出指定目录及其所有包含目录中的所有计划。status子命令打印路径上所有可用的计划和保留规格。
示例:
ceph fs snap-schedule status /
ceph fs snap-schedule status /foo/bar --format=json
ceph fs snap-schedule list /
ceph fs snap-schedule list / --recursive=true # list all schedules in the tree
添加和删除计划
The add和删除子命令分别用于添加和删除快照计划。两者都需要至少一个path参数,add此外还需要一个schedule参数,如用法部分所述。
可以向路径添加多个不同的计划。如果两个计划在重复间隔和开始时间上不同,则它们被视为不同的计划。
如果在路径上设置了多个计划,删除可以通过指定确切的重复间隔和开始时间来删除路径上的单个计划,或者当仅指定path时,子命令可以删除路径上的所有计划。
示例:
ceph fs snap-schedule add / 1h
ceph fs snap-schedule add / 1h 11:55
ceph fs snap-schedule add / 2h 11:55
ceph fs snap-schedule remove / 1h 11:55 # removes one single schedule
ceph fs snap-schedule remove / 1h # removes all schedules with --repeat=1h
ceph fs snap-schedule remove / # removes all schedules on path /
添加和删除保留策略
The retention add和retention remove子命令允许管理保留策略。一个路径正好有一个保留策略。然而,策略可以包含多个计数-时间间隔对,以指定复杂的保留策略。ceph fs snap-schedule retention add <路径> <时间间隔> <计数>和ceph fs snap-schedule retention add <路径> <计数时间间隔>[计数时间间隔]
示例:
ceph fs snap-schedule retention add / h 24 # keep 24 snapshots at least an hour apart
ceph fs snap-schedule retention add / d 7 # and 7 snapshots at least a day apart
ceph fs snap-schedule retention remove / h 24 # remove retention for 24 hourlies
ceph fs snap-schedule retention add / 24h4w # add 24 hourly and 4 weekly to retention
ceph fs snap-schedule retention remove / 7d4w # remove 7 daily and 4 weekly, leaves 24 hourly
活跃和非活跃计划
可以在目录树中还不存在的路径上添加快照计划。类似地,可以删除路径而不影响该路径上的任何快照计划。activate和deactivate子命令来执行此操作。
示例:
ceph fs snap-schedule activate / # activate all schedules on the root directory
ceph fs snap-schedule deactivate / 1d # deactivates daily snapshots on the root directory
限制
快照使用 python 定时器进行计划。在正常情况下,指定 1h 作为计划将导致每隔一小时执行一次快照,精度相当高。然而,如果 mgr 守护进程负载过重,定时器线程可能无法立即调度,导致快照延迟。如果发生这种情况,下一个快照将按未延迟的先前快照计划执行,即一个或多个延迟的快照不会导致整体计划漂移。
如果在卷上存在快照计划时删除卷,则可能在执行命令时在日志文件或命令行上看到 Python Tracebacks。尽管已采取措施注意 fs_map 的变化并删除活动定时器并关闭数据库连接以避免 Python Tracebacks,但由于问题的本质,无法完全消除 Tracebacks。如果看到此类 Tracebacks,唯一使系统达到稳定状态的方法是禁用和重新启用 snap_schedule 管理模块。
为了在一定程度上限制文件系统中的快照总数,该模块每个目录最多只保留 50 个快照。如果保留策略导致保留的快照超过 50 个,则保留列表将缩短为最新的 50 个快照。
数据存储
快照计划数据存储在 cephfs 元数据池中的一个 rados 对象中。在运行时,所有数据都存储在一个序列化的 sqlite 数据库中,该数据库作为 rados 对象存储。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.