全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-24 12 分钟 ✍️ juanwangdev

ZooKeeper数据不一致修复

数据不一致和磁盘损坏修复方法。

数据不一致修复

不一致类型

类型原因表现
事务丢失未同步到FollowerZXID落后
脏数据旧Leader未提交提议ZXID超前
版本冲突并发修改冲突BadVersionException

使用txnlog工具

Bash
# LogFormatter分析事务日志
java -cp zookeeper.jar org.apache.zookeeper.server.LogFormatter log.100000001

# 输出内容
zxid: 0x100000001
type: create
path: /app/config
data: {"key":"value"}
time: 2026-05-24 10:00:00

事务日志分析

Bash
1. 找出Leader的committed ZXID
2. 找出Follower的ZXID
3. 对比差距定位差异事务
4. 分析差异事务内容

修复流程

Bash
1. 分析事务日志定位差异
2. 确认正确数据版本(Leader版本)
3. TRUNC截断错误数据(Follower超前)
4. DIFF同步缺失数据(Follower落后)
5. 或手动删除重建节点

TRUNC修复示例

Bash
# Follower有未提交提议,需截断
# 停止Follower
zkServer.sh stop

# 删除多余事务日志(手动TRUNC)
rm /dataDir/version-2/log.xxx

# 启动Follower,自动同步
zkServer.sh start

数据验证

Bash
# 比较节点数据
echo get /app/config | nc host1 2181
echo get /app/config | nc host2 2181

# 比较ZXID
echo srvr | nc host1 2181 | grep Zxid
echo srvr | nc host2 2181 | grep Zxid

注意:修复前备份快照和日志,避免二次损坏。

磁盘损坏恢复

损坏类型

类型影响恢复方式
快照损坏无法启动从其他节点复制
日志损坏部分事务丢失重新同步
完全损坏数据全部丢失SNAP同步恢复

从健康节点恢复

Bash
# 1. 停止损坏节点
zkServer.sh stop

# 2. 清空损坏数据
rm -rf /dataDir/version-2/*

# 3. 从健康节点复制快照
scp healthy_node:/dataDir/version-2/snapshot.* /dataDir/version-2/

# 4. 启动节点
zkServer.sh start

# 5. 等待同步完成
echo stat | nc localhost 2181

SNAP同步恢复(推荐)

Bash
# 1. 停止节点
zkServer.sh stop

# 2. 清空数据目录
rm -rf /dataDir/version-2/*

# 3. 启动节点(自动SNAP同步)
zkServer.sh start

# 4. 等待同步完成
echo stat | nc localhost 2181 | grep Mode

恢复验证

text
# 检查节点状态
echo stat | nc localhost 2181

# 检查ZXID是否同步
echo srvr | nc localhost 2181 | grep Zxid

# 检查节点数据
ls -R /

备份策略

策略说明
定期快照备份每日备份快照文件
异地存储备份到远程存储
多版本保留保留多个历史版本

备份脚本

text
#!/bin/bash
# 每日备份
DATE=$(date +%Y%m%d)
tar -czf /backup/zk-snapshot-$DATE.tar.gz /dataDir/version-2/snapshot.*
scp /backup/zk-snapshot-$DATE.tar.gz backup_server:/backup/

提示:空目录启动触发SNAP同步,适合磁盘完全损坏。

要点总结

  • 数据不一致:事务丢失(ZXID落后)、脏数据(ZXID超前)
  • LogFormatter分析事务日志定位差异
  • TRUNC截断未提交提议,DIFF同步缺失数据
  • 修复前备份快照和日志
  • 磁盘损坏可从健康节点复制快照恢复
  • 清空目录启动触发SNAP同步(推荐)
  • 定期备份快照文件到异地存储

📝 发现内容有误?点击此处直接编辑

← 上一篇 ZooKeeper性能瓶颈诊断与事故复盘
下一篇 → ZooKeeper IP白名单与ACL最佳实践
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库