温馨提示×

linux zookeeper怎样备份数据

小樊
33
2026-10-04 12:01:47
栏目: 智能运维

在 Linux 上备份 ZooKeeper 的数据,通常有两种常见方式:冷备份(停止服务) 和 热备份(不停服务,快照+事务日志)。下面按实际运维场景说明。


一、ZooKeeper 数据存放位置

先确认数据目录(默认或你配置的):

# 查看 zoo.cfg
cat /etc/zookeeper/conf/zoo.cfg | grep dataDir

常见位置:

  • dataDir=/var/lib/zookeeper/data
  • dataLogDir=/var/lib/zookeeper/log(如果有单独配置)

需要备份的内容:

  • dataDir(快照 snapshot.*)
  • dataLogDir(事务日志 log.*)

二、方式一:冷备份(最安全,推荐定期用)

1. 停止 ZooKeeper

systemctl stop zookeeper
# 或
zkServer.sh stop

2. 备份数据目录

tar czf zk_backup_$(date +%F).tar.gz \
  /var/lib/zookeeper/data \
  /var/lib/zookeeper/log

3. 启动 ZooKeeper

systemctl start zookeeper

✅ 优点:数据一致性最好
❌ 缺点:需要停服


三、方式二:热备份(不停服,常用)

ZooKeeper 支持在线备份,直接拷贝文件即可。

1. 打包数据目录(不停服)

tar czf zk_hot_backup_$(date +%F_%H%M).tar.gz \
  /var/lib/zookeeper/data \
  /var/lib/zookeeper/log

说明:

  • snapshot 是某一时刻的快照
  • log 是增量事务日志
  • ZooKeeper 恢复时会自动重放日志

2. 恢复方式

停止 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

四、方式三:使用 ZooKeeper 自带工具(不常用)

1. 查看快照

java -cp zookeeper.jar:lib/* org.apache.zookeeper.server.SnapshotFormatter snapshot.xxx

2. 只备份最新快照

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

六、注意事项(很重要)

  1. dataDir 和 dataLogDir 都要备份
  2. 集群环境:每个节点都要备份(或只备一个,恢复后同步)
  3. 不要只备份 snapshot,不备份 log
  4. 恢复时版本尽量一致(ZooKeeper 小版本差异可接受)

如果你愿意,可以告诉我:

  • 单机还是集群?
  • ZooKeeper 版本?
  • 是否 Kubernetes / Docker?

我可以给你更精确的备份方案。

0 踩