CephFS 快照调度模块(pacific版本)
该模块实现了 CephFS 的计划快照。它提供了一个用户界面来添加、查询和删除快照计划和保留策略,以及一个获取快照并相应地修剪现有快照的计划程序。
1. 如何启用
snap_schedule模块通过以下方式启用:
ceph mgr module enable snap_schedule
2. 用法
此模块使用CephFS 快照,请同时考虑此文档。
该模块的子命令位于ceph fs snap-schedule命名空间下。参数可以作为位置参数或关键字参数提供。一旦遇到关键字参数,所有后续参数也被假定为关键字参数。
快照计划由路径、它们的重复间隔和它们的开始时间标识。重复间隔定义了两个后续快照之间的时间。它由一个数字和一个周期乘数指定,它是h(our)、d(ay)和 w(eek)之一。例如,12 小时的重复间隔指定每 12 小时一个快照。开始时间被指定为一个时间字符串(关于通过时间的更多细节如下)。默认情况下,开始时间是最后一个午夜。因此,当在默认开始时间的 13:50 添加重复间隔为1h的快照计划时,将在 14:00 拍摄第一个快照。
保留规范由路径和保留规范本身标识。保留规范由一个数字和一个由空格分隔的时间段或串联的<number><time period>对组成。语义是规范将确保<number> 个快照保持至少<time period>分开。对于示例7d,表示用户希望保留 7 个彼此相隔至少一天(但可能更长)的快照。识别以下时间段:h(our)、d(ay)、w(eek)、m(onth)、y(ear)和n。后者是一个特殊的修饰符,例如10n表示保留最后 10 个快照,而不管时间如何,
所有子命令都采用可选的fs和subvol参数来指定多 fs 设置和FS 卷和子卷管理设置中的路径。如果不传递fs默认为fs_map中列出的第一个文件系统,子卷默认为空 。当使用FS 卷和子卷时,参数fs相当于一个 volume。
传递时间戳时(添加、删除、 激活和停用子命令中的开始参数),将始终接受ISO 格式%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>] [<subvol>] [<fs>] [<format>]
fs snap-schedule list <path> [<subvol>] [--recursive] [<fs>] [<format>]
fs snap-schedule add <path> <snap_schedule> [<start>] [<fs>] [<subvol>]
fs snap-schedule remove <path> [<repeat>] [<start>] [<subvol>] [<fs>]
fs snap-schedule retention add <path> <retention_spec_or_period> [<retention_count>] [<fs>] [<subvol>]
fs snap-schedule retention remove <path> <retention_spec_or_period> [<retention_count>] [<fs>] [<subvol>]
fs snap-schedule activate <path> [<repeat>] [<start>] [<subvol>] [<fs>]
fs snap-schedule deactivate <path> [<repeat>] [<start>] [<subvol>] [<fs>]
Error EINVAL: invalid command
2.1 检查快照计划
该模块提供了两个子命令来检查现有计划:list和 status。麻烦通过可选的格式参数提供普通和 json 输出。默认是普通的。list子命令将以短的单行格式列出路径上的所有计划。它提供了一个递归参数来列出指定目录和所有包含的目录中的所有计划。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 列出树中的所有计划
2.2 添加和删除时间表
add和remove子命令分别添加和删除快照计划。两者都至少需要一个路径参数,另外还需要一个时间表参数,如用法部分所述。
可以将多个不同的计划添加到路径中。如果两个时间表的重复间隔和开始时间不同,则认为它们彼此不同。
如果在路径上设置了多个计划,则remove可以通过指定确切的重复间隔和开始时间来删除路径上的单个计划,或者当仅指定路径时,子命令可以删除路径上的所有计划。
例子:
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 删除所有带有 --repeat=1h 的调度
ceph fs snap-schedule remove / # removes all schedules on path / 删除 / 路径上的所有调度
2.3 添加和删除保留策略
保留添加和保留删除子命令允许管理保留策略。一条路径只有一个保留策略。但是,一个策略可以包含多个计数时间段对,以指定复杂的保留策略。可以通过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 保持 24 个快照至少相隔一个小时
ceph fs snap-schedule retention add / d 7 # and 7 snapshots at least a day apart 和7个快照至少相隔一天
ceph fs snap-schedule retention remove / h 24 # remove retention for 24 hourlies 删除保留 24 小时
ceph fs snap-schedule retention add / 24h4w # add 24 hourly and 4 weekly to retention 添加 24 小时和 4 周保留
ceph fs snap-schedule retention remove / 7d4w # remove 7 daily and 4 weekly, leaves 24 hourly 每天删除 7 次,每周删除 4 次,每 24 小时离开一次
2.4 活动和非活动时间表
可以为目录树中尚不存在的路径添加快照计划。类似地,可以删除路径而不影响该路径上的任何快照计划。如果计划拍摄快照时目录不存在,则计划将设置为非活动状态,并且将被排除在计划之外,直到它再次被激活。可以手动将计划设置为非活动以暂停创建计划快照。该模块为此提供了激活和停用子命令。
例子:
ceph fs snap-schedule activate / # activate all schedules on the root directory 激活根目录下的所有schedule
ceph fs snap-schedule deactivate / 1d # deactivates daily snapshots on the root directory 停用根目录的每日快照
2.5 限制
使用 python Timers 安排快照。在正常情况下,将 1 小时指定为计划将导致快照相隔 1 小时相当精确。但是,如果 mgr 守护进程负载过重,则 Timer 线程可能不会立即被调度,从而导致快照稍有延迟。如果发生这种情况,将安排下一个快照,就好像前一个快照没有延迟一样,即一个或多个延迟的快照不会导致整体计划的漂移。
为了在一定程度上限制文件系统中的快照总数,该模块将只保留每个目录最多 50 个快照。如果保留策略导致保留的快照超过 50 个,则保留列表将缩短为最新的 50 个快照。
2.6 数据存储
快照计划数据存储在 cephfs 元数据池中的 rados 对象中。在运行时,所有数据都存在于一个 sqlite 数据库中,该数据库被序列化并存储为 rados 对象。