Debian上Zookeeper备份与恢复实操指南
一 准备与原则
- 确认服务名与配置路径:常见服务名为zookeeper,配置文件为**/etc/zookeeper/conf/zoo.cfg**,数据目录由dataDir指定,常见为**/var/lib/zookeeper**(请以实际配置为准)。
- 选择备份方式:
- 文件系统快照(停机/维护窗口):一致性最好,适合单节点或维护期操作。
- 逻辑导出/导入(运行时):对业务影响小,适合日常小范围迁移或点状恢复。
- 备份范围建议:同时备份数据目录与配置文件,必要时连同事务日志目录(如配置项dataLogDir)一并纳入备份策略。
- 恢复目标:同版本恢复优先;跨版本恢复需谨慎,建议先在测试环境验证。
二 方法一 文件系统快照备份与恢复(停机/维护窗口)
- 备份步骤
- 停止服务
sudo systemctl stop zookeeper
- 确认数据目录
grep “^dataDir” /etc/zookeeper/conf/zoo.cfg
- 备份数据目录(示例)
sudo tar -czvf /backup/zookeeper-data-$(date +%F-%H%M%S).tar.gz -C /var/lib/zookeeper .
- 备份配置与日志(可选)
sudo tar -czvf /backup/zookeeper-conf-$(date +%F-%H%M%S).tar.gz -C /etc/zookeeper/conf .
sudo tar -czvf /backup/zookeeper-log-$(date +%F-%H%M%S).tar.gz -C /var/log/zookeeper .
- 启动服务
sudo systemctl start zookeeper
- 校验
ls -lh /backup/ && sudo systemctl status zookeeper
- 恢复步骤
- 停止服务
sudo systemctl stop zookeeper
- 清空或重命名现有数据目录(请先确认备份有效)
sudo rm -rf /var/lib/zookeeper/*
- 解压备份到数据目录
sudo tar -xzvf /backup/zookeeper-data-*.tar.gz -C /
- 修正权限(Debian常见运行用户/组为zookeeper:zookeeper)
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
- 启动服务并校验
sudo systemctl start zookeeper && echo stat | nc 127.0.0.1 2181
- 适用场景与要点
- 一致性高、操作简单;需在停机窗口执行。
- 恢复时确保myid与集群配置匹配(如为集群部署)。
三 方法二 逻辑导出导入备份与恢复(运行时)
- 备份步骤(zkCli)
- 连接Zookeeper
/usr/share/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
- 在zkCli中导出指定节点(示例导出根“/”)
[zk: 127.0.0.1:2181(CONNECTED)] ls /
[zk: 127.0.0.1:2181(CONNECTED)] dump / > /backup/zk-dump-$(date +%F-%H%M%S).txt
- 校验导出文件非空
head -n 20 /backup/zk-dump-*.txt
- 恢复步骤(zkCli)
- 目标环境准备:安装同版本Zookeeper,配置好dataDir/myid与集群信息。
- 连接Zookeeper
/usr/share/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
- 在zkCli中导入(逐条创建或使用脚本批量导入)
[zk: 127.0.0.1:2181(CONNECTED)] create /app “”
[zk: 127.0.0.1:2181(CONNECTED)] create /app/config “value”
提示:zkCli不提供“一键批量load文件”的内置命令,常见做法是将导出文本解析为create/set命令脚本后执行。
- 适用场景与要点
- 基本不影响在线业务,适合小数据量或特定子树迁移/恢复。
- 复杂ACL、Ephemeral节点、版本与顺序节点等元数据需额外处理;大规模数据导出/导入效率较低。
四 自动化与校验建议
-
自动化备份脚本示例(文件系统快照,含配置与日志)
#!/usr/bin/env bash
set -e
BACKUP_BASE=“/backup/zookeeper”
DATE=$(date +%F-%H%M%S)
mkdir -p “$BACKUP_BASE”
数据目录
DATA_DIR=$(grep “^dataDir” /etc/zookeeper/conf/zoo.cfg | awk -F= ‘{print $2}’)
tar -czvf “$BACKUP_BASE/zk-data-$DATE.tar.gz” -C “$DATA_DIR” .
配置与日志
tar -czvf “$BACKUP_BASE/zk-conf-$DATE.tar.gz” -C /etc/zookeeper/conf .
[ -d /var/log/zookeeper ] && tar -czvf “$BACKUP_BASE/zk-log-$DATE.tar.gz” -C /var/log/zookeeper .
记录与保留(示例保留7天)
echo “Backup finished at $(date) - $BACKUP_BASE/zk-data-$DATE.tar.gz” >> “$BACKUP_BASE/backup.log”
find “$BACKUP_BASE” -name “zk-*.tar.gz” -mtime +7 -delete
权限建议:备份文件属主可设为root,仅限受限访问
chmod 600 “$BACKUP_BASE”/*.tar.gz
-
定时任务(每天02:00)
0 2 * * * /usr/local/bin/zk-backup.sh
-
校验清单
- 定期在测试环境执行恢复演练,验证可用性与完整性。
- 校验备份文件大小、权限与myid一致性(集群)。
- 记录备份时间、文件名、位置与校验结果,便于追溯。