备份拓扑:跨区并联集群如何落地
建议采用主写节点 + 同区热副本 + 跨区冷副本的三层拓扑。每个 Mac Mini M4 节点仅负责本机快照,统一写入同一 restic repository 前缀,命名按 cluster/node/service 组织,避免后期 forget 误删。
对象存储层推荐桶内双前缀:/hot 放 7 天高频恢复点,/cold 放 30-90 天审计恢复点。rclone 负责热冷分层搬运,restic 负责去重、快照索引与校验。
| 维度 | restic+rclone 推荐 | rsnapshot 常见问题 |
|---|---|---|
| 数据组织 | repository + snapshot 索引 | 按目录层层硬链接,跨区难控 |
| 保留策略 | forget + prune 精确到小时/天/周 | 轮转粒度粗,易与业务窗口冲突 |
| 对象存储适配 | 天然支持 S3 兼容后端 | 迁移脚本复杂,恢复链条长 |
限速与并发:夜间带宽不会被一次吃满
跨区链路建议先用 20% 出口带宽做起步阈值,再按一周曲线微调。常见错误是所有节点同一秒起跑,导致对象存储 429 和本地 I/O 抖动叠加。正确做法是分组错峰:A 组 00:10,B 组 00:25,C 组 00:40。
| 工具 | 参数模板(可执行) | 用途 |
|---|---|---|
| restic backup | restic backup /data --host m4-n1 --tag nightly --one-file-system |
生成节点快照 |
| restic forget | restic forget --keep-hourly 24 --keep-daily 14 --keep-weekly 8 --prune |
执行保留与回收 |
| rclone sync | rclone sync s3:repo-hot s3:repo-cold --bwlimit 60M --transfers 8 --checkers 16 |
热冷分层搬运 |
保留策略与 1TB/2TB 磁盘水位验收
把水位验收写进值班手册,而不是口头约定。建议统一阈值:70% 观察、80% 限流、90% 冻结增量并触发扩容。1TB 节点关注 Xcode DerivedData 与缓存峰值,2TB 节点关注多项目并行构建后的历史制品滞留。
- chunk 策略:对象存储大文件建议 16-32MiB chunk,降低跨区重传放大。
- repository 校验:每周固定执行
restic check --read-data-subset=5%,按节点轮换。 - forget 审计:保留策略变更必须走 PR,防止误删审计窗口数据。
与 CI 错峰:构建锁和备份窗口必须分离
建议把构建锁窗口固定在 21:00-23:30,备份窗口固定在 00:10-04:30,至少留 40 分钟冷却区间。若夜间仍有紧急发布,优先降级备份并发,不要抢锁。锁文件建议拆分为 build.lock 与 backup.lock。
建议流程五步:一、CI 完成主干归档;二、写入 build.lock 释放时间;三、备份任务读取锁并延迟;四、备份后执行 forget/prune;五、输出水位与失败摘要到值班群。
FAQ
Q1:restic repository 要按节点拆开吗?
不建议按节点完全拆散,推荐按集群拆库、按 tag 与 host 过滤;这样 forget 统一、恢复也更快。
Q2:rclone 并发开到多大合适?
先以 transfers=4 起步,观察对象存储 429 与链路抖动,再逐步调到 8 或 12,避免一次拉满。