在 Linux 下备份 ZooKeeper 数据,通常有以下几种常见方式,按推荐程度和使用场景说明:
ZooKeeper 的所有数据都存储在 dataDir 中(在 zoo.cfg 里配置)。
grep dataDir /etc/zookeeper/conf/zoo.cfg
# 或
grep dataDir $ZOOKEEPER_HOME/conf/zoo.cfg
示例:
dataDir=/var/lib/zookeeper/data
systemctl stop zookeeper
# 或
zkServer.sh stop
tar czf zk-data-backup-$(date +%F).tar.gz /var/lib/zookeeper/data
systemctl start zookeeper
✅ 优点:简单、可靠
❌ 缺点:需要短暂停服
ZooKeeper 使用 事务日志 + 快照,可以直接拷贝。
tar czf zk-backup-$(date +%F).tar.gz \
/var/lib/zookeeper/data \
/var/lib/zookeeper/log
⚠️ 拷贝时可能有写操作,但 ZooKeeper 能处理,恢复时以快照+日志重放为准
✅ 优点:无需停服
✅ 适合生产环境
ZooKeeper 会自动生成快照:
ls /var/lib/zookeeper/data
# 类似
snapshot.100000 snapshot.200000
你可以:
rsync -avz /var/lib/zookeeper/data/ backup-server:/zk/backup/
适合只备份部分配置数据。
zkCli.sh -server localhost:2181
导出:
get /my/config > config-backup.txt
或用脚本遍历:
zkCli.sh -server localhost:2181 ls /
✅ 适合配置型数据
❌ 不适合大规模数据
示例 crontab:
0 2 * * * tar czf /backup/zk-$(date +\%F).tgz /var/lib/zookeeper
zkServer.sh stop
rm -rf /var/lib/zookeeper/data/*
tar xzf zk-backup.tar.gz -C /
zkServer.sh start
如果你愿意,可以告诉我:
我可以给你一套可直接用的备份脚本。