ZooKeeper集群数据同步与检测
理解数据同步流程和状态检测方法。
数据同步机制
同步流程:
properties
1. Leader收到写请求
2. Leader发送提议给所有Follower
3. Follower接收提议并发送ACK
4. Leader收到过半ACK后提交
5. Leader通知Follower提交
6. 所有节点执行提交
角色差异:
| 角色 | 同步行为 |
|---|---|
| Leader | 发起提议、收集ACK、通知提交 |
| Follower | 接收提议、发送ACK、执行提交 |
| Observer | 接收提议、执行提交(不投票) |
Observer特点:
| 特性 | 说明 |
|---|---|
| 不参与投票 | 不发送ACK |
| 只同步数据 | 接收并执行提交 |
| 扩展读能力 | 可部署多个 |
| 跨地域部署 | 不影响投票延迟 |
Observer配置:
Bash
# zoo.cfg
peerType=observer
server.4=host4:2888:3888:observer
同步类型:
| 类型 | 说明 |
|---|---|
| DIFF | 发送差异事务 |
| TRUNC | 截断多余数据 |
| SNAP | 发送完整快照 |
同步时机:
Bash
Follower落后少量 → DIFF发送差异
Follower超前 → TRUNC截断
Follower落后大量 → SNAP发送快照
提示:Observer适合跨地域部署,扩展读能力不影响写性能。
集群状态检测
四字命令:
| 命令 | 作用 |
|---|---|
| stat | 状态、角色、连接数 |
| mntr | 详细监控指标 |
| ruok | 健康检查 |
| srvr | 服务器详情 |
| cons | 连接详情 |
stat命令:
Bash
echo stat | nc localhost 2181
# 输出
Mode: follower <- 角色
Zxid: 0x100000005 <- 事务ID
Connections: 10 <- 连接数
Outstanding: 0 <- 待处理请求
Znode count: 100 <- 节点数
mntr命令:
text
echo mntr | nc localhost 2181
# 输出关键指标
zk_server_state follower
zk_avg_latency 5
zk_max_latency 100
zk_num_alive_connections 10
zk_znode_count 100
ruok健康检查:
text
echo ruok | nc localhost 2181
# 正常返回: imok
# 异常无响应
关键检测项:
| 项目 | 命令 | 关注点 |
|---|---|---|
| Leader状态 | stat | Mode字段 |
| 数据一致性 | srvr | 各节点ZXID |
| 连接数 | mntr | connections |
| 延迟 | mntr | latency |
健康判断标准:
- 有且仅有一个Leader
- 各节点ZXID相近
- 连接数在正常范围
- 延迟在合理范围
注意:生产环境应配置监控告警,持续检测集群状态。
要点总结
- Leader发送提议,过半ACK后提交
- Follower接收提议、投票、提交
- Observer只同步数据,不参与投票
- stat查看角色和状态信息
- mntr获取详细监控指标
- ruok快速健康检查
- 检测关注Leader状态、ZXID、连接数、延迟
📝 发现内容有误?点击此处直接编辑