ZooKeeper数据不一致修复
数据不一致和磁盘损坏修复方法。
数据不一致修复
不一致类型:
| 类型 | 原因 | 表现 |
|---|---|---|
| 事务丢失 | 未同步到Follower | ZXID落后 |
| 脏数据 | 旧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同步(推荐)
- 定期备份快照文件到异地存储
📝 发现内容有误?点击此处直接编辑