用途
支持 CephFS 中的 snapshot
用于协助 CephFS snapshot mirror 共同使用
实现本地 CephFS 集群自动创建 snapshot
配合 snapshot mirror 用于同步两个 CephFS 集群数据
由于 snapshot mirro r只会在创建 snapshot 后才执行同步所以属于异步同步
参考
启用 snapshot schedule 功能
建议使用 ceph-17 版本
默认 snapshot schedule 默认不启用
# ceph mgr module ls | grep snap_schedule
snap_schedule - <- 默认不开启
启用 snapshot_schedule 功能
# ceph mgr module enable snap_schedule
# ceph mgr module ls | grep snap_schedule
snap_schedule on
周期说明
设定 snapshot schedule 需要定义目录,时间周期,启动时间
重复的时间周期可以通过下面方法定义
参考下面时间定义方法, 最小时间周期为小时
h(our)
d(ay)
w(eek)
M(onth)
Y(ear)
可以对同一个目录重复设定多个时间周期
7d 意味着可以保留 7 个快照,每次快照像相隔 1 天
10h 代表可以保留 10 个快照,每个快照相隔一个小时
。。。 以此类推
添加, 删除 snap-schedule 方法
example 1
ceph fs snap-schedule add / 1h # 每小时一次, 现在开始
ceph fs snap-schedule add / 1h 11:55 # 每小时一次从 11:56 开始
ceph fs snap-schedule add / 2h 11:55 # 两小时一次,从 11:56 开始
ceph fs snap-schedule remove / 1h 11:55 # 只删除从 11:55 开始的 schedule
ceph fs snap-schedule remove / 1h # 删除所有 1 小时周期的 schedule
ceph fs snap-schedule remove / # 删除所有跟 / 相关的 schedule
example 2 保留策略
ceph fs snap-schedule retention add / h 24 # 每小时一次 snapshot,保留 24 个副本
ceph fs snap-schedule retention add / d 7 # 每天一个 snapshot, 保留 7 副本
ceph fs snap-schedule retention remove / h 24 # 移除每小时一次 24 副本策略
ceph fs snap-schedule retention add / 24h4w # 24 小时一次副本, 保留 4 周
ceph fs snap-schedule retention remove / 7d4w # 移除上面的策略
example 3
ceph fs snap-schedule activate / # 激活 / 相关所有策略
ceph fs snap-schedule deactivate / # 屏蔽所有 / 相关策略
限制
根据官方文档提示有下面几种限制
ceph snapshot schedule 通过 python 实现,可能由于某些原因,时钟漂移,系统繁忙等, schedule 时间可能会延时,但不会影响整体 snapshot 计划
每个 snapshot 目录最大只能够保留 50 个副本
In order to somewhat limit the overall number of snapshots in a file system,
the module will only keep a maximum of 50 snapshots per directory.
If the retention policy results in more then 50 retained snapshots,
the retention list will be shortened to the newest 50 snapshots.
测试
利用下面脚本实现每分钟创建 200 个文件
文件目录都只写入 /mnt/test_fs/store/ai/train 下
对 /mnt/test_fs/store/ai/train 目录创建 snapshot 计划 (一小时一个副本保留 1 天)
测试脚本
#!/bin/bash
#
# directory example
#
#
# /mnt/test_fs/store/ai/train <- snapshot 当前目录
#
# 下面是 branch 目录结构
# 每分钟生成一个目录 ( yyyymmdd/hh/mm/ ) 然后创建 branchdir 目录,文件写入该目录
#
# 20240220/09/10/branchdir/files
# 20240220/09/11/branchdir/files
# 20240220/09/12/branchdir/files
# 为避免打爆 cephfs 空间,branch file 数据至保留 10 天足够
dest_dir="/mnt/test_fs/store/ai/train"
source_file=/tmp/1m.txt
function create_file_200 {
dst=$1
if [ ! -d "$dst/branch" ]
then
mkdir -p $dst/branch
for num in `seq 1 200`
do
cp $source_file $dst/branch/$num.txt
done
fi
}
while [ 1 ]
do
date_dir=`date +%Y%m%d`
hour_dir=`date +%H`
min_dir=`date +%M`
remove_date=`date +%Y%m%d --date='10 days ago'`
remove_dir=$dest_dir/$remove_date
detail_dir=$dest_dir/$date_dir/$hour_dir/$min_dir
if [ ! -d $detail_dir ]
then