CentOS 上 Zookeeper 数据恢复实操指南
一 恢复前准备
- 确认数据目录与配置:先定位你的数据目录(dataDir)和配置位置。常见路径为数据目录 /var/lib/zookeeper,配置文件 /etc/zookeeper/conf/zoo.cfg。使用命令确认:grep “dataDir” /etc/zookeeper/conf/zoo.cfg。
- 选择恢复方式:优先使用包含最新状态的快照(snapshot)恢复;若只有事务日志(transaction log),可在停止服务后按最大事务 ID 重放日志进行恢复。
- 全量备份当前环境:在动手前先备份现有数据与配置,便于回滚。示例:
sudo systemctl stop zookeeper
sudo tar -czvf zookeeper_backup_$(date +%Y%m%d%H%M%S).tar.gz /var/lib/zookeeper /etc/zookeeper/conf
- 权限与一致性:恢复后确保数据目录属主为 zookeeper:zookeeper,避免启动失败。
二 标准恢复步骤 快照恢复
- 停止服务:sudo systemctl stop zookeeper。
- 备份当前数据目录:sudo cp -r /var/lib/zookeeper /var/lib/zookeeper-backup-$(date +%Y%m%d%H%M%S)。
- 清空并恢复:
sudo rm -rf /var/lib/zookeeper/*
sudo cp -r /path/to/backup/zookeeper_backup_YYYYMMDDHHMMSS/* /var/lib/zookeeper/
- 修复权限:sudo chown -R zookeeper:zookeeper /var/lib/zookeeper。
- 启动并验证:
sudo systemctl start zookeeper
sudo systemctl status zookeeper
echo ruok | nc localhost 2181(返回 imok 表示服务正常)
./zkCli.sh -server localhost:2181 连接后执行 ls / 等检查关键节点。
三 只有事务日志时的恢复
- 停止服务:sudo systemctl stop zookeeper。
- 定位数据目录下的版本子目录(常见为 /var/lib/zookeeper/version-2),将可用的 log.* 与 snapshot.* 文件复制到目标机器的同一目录。
- 清空现有数据目录并放置备份的日志与快照文件:
sudo rm -rf /var/lib/zookeeper/*
sudo cp log.* snapshot.* /var/lib/zookeeper/
- 启动服务并校验:sudo systemctl start zookeeper;使用 zkCli.sh 检查数据是否恢复。
四 使用 AdminServer 备份与恢复(若已启用)
- 启用 AdminServer(zoo.cfg):
admin.enableServer=true
admin.serverPort=8080
- 备份与恢复(HTTP API):
备份:curl -X POST http://localhost:8080/commands/backup
恢复:curl -X POST http://localhost:8080/commands/restore --data “file:///path/to/backup/zookeeper_backup_YYYYMMDDHHMMSS”
五 验证与常见问题处理
- 服务健康检查:
- 四字命令:echo ruok | nc localhost 2181(应返回 imok)。
- 进程与端口:systemctl status zookeeper;ss -lntp | grep 2181。
- 客户端校验:./zkCli.sh -server host:2181 后执行 ls / 及关键 znode 的 get 操作。
- 日志排查:查看 /var/log/zookeeper 下的日志定位启动或数据问题。
- 常见故障与修复:
- 权限错误:恢复后执行 chown -R zookeeper:zookeeper /var/lib/zookeeper。
- 数据目录残留:恢复前务必清空,避免新旧文件混用导致不一致。
- 配置不一致:确认 zoo.cfg 中的 dataDir、clientPort、server.x 等与备份环境一致。
- 风险提示:恢复通常只能回到快照时间点,快照之后的数据可能丢失;重要变更前建议先做一次可回滚的备份。