Consul 备份恢复与高可用
Consul 的数据(服务目录、KV、ACL 等)都存在 server 的 data_dir,误删、误改、机房故障都需要备份兜底。快照(snapshot)是官方推荐的标准备份方式。
保存快照
consul snapshot save 在任一 server 上执行,生成含 KV、ACL、服务目录的完整快照:
consul snapshot save backup.snap
# 输出:Saved and verified snapshot to index 123
consul snapshot inspect backup.snap
# 输出:显示快照 ID、时间、节点数、索引等元数据,可校验文件
save 完成即自动校验过快照完整性,输出里带 Saved and verified 字样即可放心归档。
恢复快照
恢复是整体覆盖当前数据,须在集群稳定、存在单一 leader 时执行;目标集群节点数不必与备份时一致:
consul snapshot restore backup.snap
# 输出:Snapshot restored (spokes: N)
恢复不合并、只全量替换,执行前务必确认要覆盖旧数据;集群正在选主、无稳定 leader 时不要做恢复。
异地备份建议
快照默认存在本机,机房被毁就一起没了。建议每天定时 save 并同步到异地对象存储或另一机房:
0 2 * * * consul snapshot save /backup/consul-$(date +\%F).snap
0 3 * * * rsync -a /backup/ consul@异地主机:/backup/ # 同步到异地
灾备方案对比
快照与多数据中心解决不同问题,生产可组合使用:
| 方案 | 恢复粒度 | 特点 |
|---|---|---|
| snapshot 备份 | 恢复到备份时刻 | 简单可靠,数据保护首选 |
| 多 DC 联邦 | 请求级故障转移 | KV 不跨 DC 复制,非备份手段 |
| 多 DC + 定期快照 | 两者兼备 | 最稳的生产组合 |
升级与故障演练
升级遵循"先备后升":先 snapshot save,再逐台滚动升级 server(先非 leader 后 leader),每台升级后用 consul version 与 members 确认正常再动下一台。演练从杀 leader 开始:kill 当前 leader,观察集群在几十秒内重新选主、期间服务注册与查询不中断;熟练后再演练断网、单机重启、快照恢复等场景。
小结
高可用三板斧:奇数台 server 扛单点故障、定期快照保数据可回退、多 DC 提供故障转移。恢复前务必确认集群健康且有稳定 leader,演练从"杀 leader 观察自动选主"起步,把恢复流程练成肌肉记忆。