Zookeeper备份与恢复实操指南
一 核心要点
- 备份对象以两类为主:一是磁盘上的快照 Snapshot与事务日志 Transaction Log(分别由配置项dataDir、dataLogDir指定),二是配置文件(如 zoo.cfg)。快照用于记录某一时刻全量状态,事务日志用于重放以恢复到最新一致状态,二者配合才能实现可靠恢复。生产上建议将快照与事务日志分盘存放,降低IO争用并提升恢复速度与可靠性。
二 方式一 文件系统拷贝备份(停机快照,最稳妥)
- 适用场景:允许短暂停机、追求一致性最稳妥;适合中小规模或维护窗口明确的集群。
- 操作步骤
- 确认目录:grep 出配置中的dataDir与dataLogDir,并确认服务已停止写入(建议停机)。
grep -E “^(dataDir|dataLogDir)” /etc/zookeeper/conf/zoo.cfg
- 执行备份(示例):
数据目录
sudo tar -czvf /backup/zk_data_$(date +%F-%H%M%S).tar.gz -C /var/lib/zookeeper/data .
事务日志目录(若配置了 dataLogDir)
sudo tar -czvf /backup/zk_txn_$(date +%F-%H%M%S).tar.gz -C /var/lib/zookeeper/log .
配置文件
sudo tar -czvf /backup/zk_conf_$(date +%F-%H%M%S).tar.gz -C /etc/zookeeper/conf .
- 校验与留存:检查包大小、条目数,并定期做恢复演练验证可用性。
- 远程备份示例(通过 SSH):
sudo tar -czvf - /var/lib/zookeeper | ssh user@remote_host “sudo tar -xzvf - -C /backup”
- 恢复要点:停机→清空目标目录→按备份包解压到对应目录→启动服务。
- 说明:该方法直接拷贝底层文件,恢复简单、一致性高;但需停机窗口。
三 方式二 在线导出备份(不停机,适合热备份与迁移)
- 适用场景:要求业务不中断;用于全量导出/迁移或点检数据。
- 操作步骤
- 使用 zkCli 导出全量或子树:
zkCli.sh -server zk1:2181
[zk: zk1:2181(CONNECTED)] ls /
[zk: zk1:2181(CONNECTED)] create /backup-marker “”
导出全量(递归)到本地 JSON 文件(需按实际工具支持情况选择)
常见做法:使用四字命令或第三方工具(如 zkdump)导出为 JSON/文本,再入库或版本化管理。
- 恢复思路:在目标集群用 zkCli 读取备份文件并逐节点重建(create/set),保持 ACL、版本与目录结构一致。
- 说明:在线导出对线上影响小,但恢复为重建过程,需处理ACL、版本号、TTL/多版本、Ephemeral 节点不可恢复等差异;适合迁移与审计,不建议作为唯一灾备手段。
四 自动化与异地容灾
- 定时任务与脚本化:将“停-备-启-清理”流程脚本化,并用 cron 定时执行(如每日02:00)。示例:
0 2 * * * /opt/backup/zk_backup.sh
脚本内需包含:停止服务、备份 dataDir/dataLogDir/conf、启动服务、清理7天前备份等步骤。
- 远程与增量传输:
- 远程:使用 tar+SSH 或 rsync 将备份实时传到异地存储/对象存储。
- 增量:在文件系统层面用 rsync 的**–link-dest做快照式增量,或在备份系统侧做全量+增量**合成策略。
- 保留与校验:建议至少保留7–30天历史备份,定期做恢复演练与校验和检查,确保可用性。
五 恢复流程与注意事项
- 恢复流程(文件系统拷贝法):
- 停机:sudo systemctl stop zookeeper
- 备份当前目录(可选):mv /var/lib/zookeeper/data /var/lib/zookeeper/data.bak_$(date +%F)
- 解压:tar -xzvf /backup/zk_data_.tar.gz -C /var/lib/zookeeper/data
(如有 dataLogDir:tar -xzvf /backup/zk_txn_.tar.gz -C /var/lib/zookeeper/log)
- 启动:sudo systemctl start zookeeper
- 校验:四字命令 stat/ruok、业务侧自检、日志无异常。
- 注意事项
- 尽量保证快照与事务日志成对备份与恢复,避免仅恢复快照导致最近事务丢失。
- 恢复后首次启动若数据目录被替换,ZooKeeper 会进行回放日志至一致性点,首次启动时间可能变长。
- 若启用了**安全(SASL/Digest)**或复杂 ACL,在线导出/恢复需额外处理凭证与权限。
- 不建议跨大版本直接恢复数据目录,需评估兼容性;变更前务必在测试环境演练。