Zookeeper 在 Debian 的备份与恢复
一 备份方案总览
- 文件系统快照法:直接打包 Zookeeper 的数据目录与配置目录,操作简单、一致性好(建议短暂停写)。适用于单机与集群的节点级备份与迁移。
- 客户端导出导入法:使用 zkCli 的 dump/load 对指定 Znode 子树做逻辑备份与恢复,适合跨版本迁移、选择性恢复与审计。
- 快照与日志法:在客户端执行 snapshot 获取快照,结合事务日志用于更细粒度的恢复或离线分析(需按版本与发行包支持情况使用)。
二 文件系统快照法 推荐
- 步骤
- 确认数据目录
grep dataDir /etc/zookeeper/conf/zoo.cfg(常见路径:/var/lib/zookeeper)
- 停止服务(为保一致性)
sudo systemctl stop zookeeper
- 备份数据与配置
sudo tar -czvf /backup/zookeeper_data_$(date +%Y%m%d%H%M%S).tar.gz /var/lib/zookeeper
sudo tar -czvf /backup/zookeeper_config_$(date +%Y%m%d%H%M%S).tar.gz /etc/zookeeper/conf
- 可选:备份日志
sudo tar -czvf /backup/zookeeper_log_$(date +%Y%m%d%H%M%S).tar.gz /var/log/zookeeper
- 启动服务
sudo systemctl start zookeeper
- 校验
ls -lh /backup/zookeeper_*.tar.gz && sudo systemctl status zookeeper
- 恢复
- 停止服务
sudo systemctl stop zookeeper
- 恢复数据(示例)
sudo tar -xzvf /backup/zookeeper_data_YYYYMMDDHHMMSS.tar.gz -C /
- 恢复配置(如有备份)
sudo tar -xzvf /backup/zookeeper_config_YYYYMMDDHHMMSS.tar.gz -C /
- 权限与启动
sudo chown -R zookeeper:zookeeper /var/lib/zookeeper
sudo systemctl start zookeeper
- 自动化(cron 每日 2 点)
0 2 * * * /usr/local/bin/zk_fs_backup.sh
示例脚本(/usr/local/bin/zk_fs_backup.sh):
#!/bin/bash
set -e
DATA_DIR=$(grep ‘^dataDir=’ /etc/zookeeper/conf/zoo.cfg | cut -d= -f2)
BACKUP_DIR=/backup
ts=$(date +%Y%m%d%H%M%S)
systemctl stop zookeeper || true
tar -czvf $BACKUP_DIR/zookeeper_data_${ts}.tar.gz $DATA_DIR
tar -czvf $BACKUP_DIR/zookeeper_config_${ts}.tar.gz /etc/zookeeper/conf
systemctl start zookeeper
echo “Backup $ts completed.” >> $BACKUP_DIR/backup.log
chmod +x /usr/local/bin/zk_fs_backup.sh
三 客户端导出导入法 zkCli
- 前提:安装并可用 zkCli(Debian 上通常随 Zookeeper 包提供),Zookeeper 服务运行。
- 备份指定子树
zkCli.sh -server 127.0.0.1:2181 dump /your/znode/path > backup_$(date +%Y%m%d%H%M%S).txt
- 恢复指定子树
zkCli.sh -server 127.0.0.1:2181 load /your/znode/path < backup_YYYYMMDDHHMMSS.txt
- 说明
- 适合只迁移/恢复部分 Znode 或跨环境迁移。
- 若需全量迁移,可将根路径 / 作为备份对象(注意权限与 ACL)。
- 某些版本/发行包中命令名或参数可能略有差异,请以本机 zkCli 帮助为准。
四 快照与日志法 可选
- 快照(部分版本/安装方式支持)
- 连接客户端
zkCli.sh -server :2181
- 创建快照
snapshot
- 将生成的快照文件拷贝到备份存储(可用 scp 等)
- 恢复
- 停止服务
sudo systemctl stop zookeeper
- 恢复配置文件(如有备份)
sudo cp /path/to/backup/zoo.cfg /etc/zookeeper/conf/zoo.cfg
- 启动服务
sudo systemctl start zookeeper
- 验证
zkCli.sh -server :2181 ls /
- 提示:快照/日志相关能力依赖 Zookeeper 版本与安装包,若本机 zkCli 不支持相关命令,请改用“文件系统快照法”或“zkCli dump/load”。
五 实践建议
- 一致性优先:文件系统法建议在低峰期短暂停写;若无法停写,优先使用 zkCli dump/load 做逻辑备份,或采用集群维护窗口统一操作。
- 保留策略与异地:为备份文件设置保留周期(如保留7–30天),并定期拷贝到异地/对象存储。
- 校验与演练:定期做恢复演练与校验(如校验文件大小、条目数、关键 Znode 是否存在),确保可用。
- 配置与版本:迁移/恢复时一并备份 zoo.cfg 等配置,并注意新旧版本的兼容性与 ACL/认证差异。