在 Linux 上备份 ZooKeeper 的数据,通常有两种常见方式:冷备份(停止服务) 和 热备份(不停服务,快照+事务日志)。下面按实际运维场景说明。
先确认数据目录(默认或你配置的):
# 查看 zoo.cfg
cat /etc/zookeeper/conf/zoo.cfg | grep dataDir
常见位置:
dataDir=/var/lib/zookeeper/datadataLogDir=/var/lib/zookeeper/log(如果有单独配置)需要备份的内容:
dataDir(快照 snapshot.*)dataLogDir(事务日志 log.*)systemctl stop zookeeper
# 或
zkServer.sh stop
tar czf zk_backup_$(date +%F).tar.gz \
/var/lib/zookeeper/data \
/var/lib/zookeeper/log
systemctl start zookeeper
✅ 优点:数据一致性最好
❌ 缺点:需要停服
ZooKeeper 支持在线备份,直接拷贝文件即可。
tar czf zk_hot_backup_$(date +%F_%H%M).tar.gz \
/var/lib/zookeeper/data \
/var/lib/zookeeper/log
说明:
- snapshot 是某一时刻的快照
- log 是增量事务日志
- ZooKeeper 恢复时会自动重放日志
停止 ZooKeeper → 清空原目录 → 解压备份 → 启动
systemctl stop zookeeper
rm -rf /var/lib/zookeeper/data/*
rm -rf /var/lib/zookeeper/log/*
tar xzf zk_hot_backup_xxx.tar.gz -C /
systemctl start zookeeper
java -cp zookeeper.jar:lib/* org.apache.zookeeper.server.SnapshotFormatter snapshot.xxx
ls -t /var/lib/zookeeper/data/snapshot.* | head -1
#!/bin/bash
BACKUP_DIR=/backup/zk
DATE=$(date +%F_%H%M)
mkdir -p $BACKUP_DIR
tar czf $BACKUP_DIR/zk_$DATE.tar.gz \
/var/lib/zookeeper/data \
/var/lib/zookeeper/log
# 保留 7 天
find $BACKUP_DIR -mtime +7 -delete
加入 crontab:
0 2 * * * /opt/scripts/zk_backup.sh
如果你愿意,可以告诉我:
我可以给你更精确的备份方案。