注意

本文档适用于 Ceph 的开发版本。

快照调度模块

此模块为 CephFS 实现了计划快照功能。它提供了一个用户界面来添加、查询和删除快照计划和保留策略,以及一个根据计划拍摄快照和修剪现有快照的调度程序。

如何启用

使用以下命令启用 snap_schedule 模块

ceph mgr module enable snap_schedule

用法

此模块使用 CephFS 快照,请同时参考此文档。

此模块的子命令位于 ceph fs snap-schedule 命名空间下。参数可以作为位置参数或关键字参数提供。一旦遇到关键字参数,所有后续参数也将被视为关键字参数。

快照计划通过路径、重复间隔和开始时间来标识。重复间隔定义了两个连续快照之间的时间。它由一个数字和一个周期乘数指定,乘数可以是 h(our)(小时)、d(ay)(天)、w(eek)(周)、M(onth)(月)和 y(ear)(年)之一。例如,重复间隔 12h 指定每 12 小时拍摄一次快照。开始时间指定为时间字符串(有关传递时间的更多详细信息如下)。默认情况下,开始时间是前一天的午夜。因此,如果在 13:50 添加一个重复间隔为 1h 且使用默认开始时间的快照计划,则第一个快照将在 14:00 拍摄。如果字符串中未明确包含时区,则假定为 UTC。明确的时区将在执行时映射到 UTC。开始时间必须采用 ISO8601 格式。示例如下

UTC:2022-08-08T05:30:00,即 UTC 时间 5:30 AM,不带明确时区偏移 IDT:2022-08-08T09:00:00+03:00,即 UTC 时间 6:00 AM EDT:2022-08-08T05:30:00-04:00,即 UTC 时间 9:30 AM

保留规范通过路径和保留规范本身来标识。保留规范由数字和时间周期(以空格分隔)或连接的 <number><time period> 对组成。语义是,规范将确保保留 <number> 个快照,这些快照之间至少相隔 <time period>。例如,7d 意味着用户希望保留 7 个快照,它们之间至少相隔一天(但可能更长)。识别以下时间周期:h(our)(小时)、d(ay)(天)、w(eek)(周)、M(onth)(月)、y(ear)(年)和 n。后者是一个特殊的修饰符,例如 10n 意味着无论时间如何,都保留最新的 10 个快照,

所有子命令都接受可选的 fs 参数,用于在多文件系统设置中指定路径以及 FS 卷和子卷 管理的设置。如果未传递 fs,则默认使用 fs_map 中列出的第一个文件系统。当使用 FS 卷和子卷 时,参数 fs 等同于 volume

当传递时间戳时(addremoveactivatedeactivate 子命令中的 start 参数),ISO 格式 %Y-%m-%dT%H:%M:%S 将始终被接受。当使用 python3.7 或更高版本或安装了 https://github.com/movermeyer/backports.datetime_fromisoformat 时,任何有效的 ISO 时间戳(由 python 的 datetime.fromisoformat 解析)都是有效的。

如果未提供子命令,则会打印概要。

#> 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

注意:

命令不再接受 subvolume 参数。

检查快照计划

该模块提供两个子命令来检查现有计划:liststatus。两者都通过可选的 format 参数提供纯文本和 json 输出。默认是纯文本。list 子命令将以简短的单行格式列出路径上的所有计划。它提供了一个 recursive 参数来列出指定目录及其包含的所有目录中的所有计划。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

添加和删除计划

addremove 子命令分别添加和删除快照计划。两者都至少需要一个 path 参数,add 还需要一个 schedule 参数,如 USAGE 部分所述。

可以将多个不同的计划添加到路径中。如果两个计划的重复间隔和开始时间不同,则它们被认为是不同的。

如果路径上设置了多个计划,remove 可以通过指定精确的重复间隔和开始时间来删除路径上的单个计划,或者当只指定 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 /

添加和删除保留策略

retention addretention remove 子命令允许管理保留策略。一个路径只有一个保留策略。但是,一个策略可以包含多个计数-时间周期对,以指定复杂的保留策略。保留策略可以通过 ceph fs snap-schedule retention add <path> <time period> <count>ceph fs snap-schedule retention add <path> <countTime period>[countTime period] 形式单独或批量添加和删除。

示例

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

活动和非活动计划

可以为目录树中尚不存在的路径添加快照计划。同样,可以删除路径而不影响该路径上的任何快照计划。如果安排拍摄快照时目录不存在,则计划将被设置为非活动状态,并从调度中排除,直到再次激活为止。可以手动将计划设置为非活动状态,以暂停创建计划快照。该模块为此目的提供了 activatedeactivate 子命令。

示例

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 Timers 调度的。在正常情况下,将计划指定为 1 小时将导致快照之间相隔 1 小时,相当精确。但是,如果 mgr 守护程序负载过重,Timer 线程可能无法立即安排,导致快照稍微延迟。如果发生这种情况,下一个快照将按前一个快照未延迟的方式安排,即一个或多个延迟的快照不会导致整个计划漂移。

如果在卷上激活快照计划时删除卷,则在对此类卷执行命令时,日志文件或命令行上可能会出现 Python 回溯。尽管已采取措施注意 fs_map 更改并删除活动计时器和关闭数据库连接以避免 Python 回溯,但由于问题的固有性质,不可能完全消除回溯。如果出现此类回溯,使系统恢复到稳定状态的唯一解决方案是禁用并重新启用 snap_schedule 管理器模块。

为了在一定程度上限制文件系统中的快照总数,该模块将只为每个目录保留最多 50 个快照。如果保留策略导致保留的快照超过 50 个,则保留列表将缩短为最新的 50 个快照。

数据存储

快照计划数据存储在 cephfs 元数据池中的 rados 对象中。在运行时,所有数据都存在于 sqlite 数据库中,该数据库被序列化并存储为 rados 对象。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入