主题
ZooKeeper 学习路线
本页只是索引。ZooKeeper 的主线是 ZAB、Session、Watch 三个机制;分布式锁、选主、注册发现都是它们的组合应用。
适用版本:ZooKeeper 3.8 / 3.9(3.5.3+ 的 4lw 行为与旧版不同)。前置环境:JDK 8+、Docker、zkCli.sh、nc;练习集群至少 3 个节点。
阅读顺序
| 顺序 | 文章 | 一句话 | 前置 |
|---|---|---|---|
| 1 | 01-ZK架构与ZAB协议 | 写请求如何经 Leader 广播、过半落盘后提交,Session 和 Watch 如何支撑临时节点与变更通知 | 无 |
| 2 | 03-分布式锁与Curator | 用临时顺序节点排队、Watch 前驱唤醒,以及 Curator 的封装和会话失效处理 | 01 |
| 3 | 02-ZK与etcd与Consul对比 | 按语言生态、Watch 语义和运维成本选协调服务,不做性能排名 | 01 |
| 4 | 04-生产踩坑与运维 | 磁盘、会话、连接三类事故的定位与单机/过半/全挂/损坏四种 Runbook | 01、03 |
| 5 | 05-ZK监控指标与告警 | 盯 fsync、多数派同步、会话三条链,区分「延迟高但可用」与「过半不可用」 | 01、04 |
版本与环境
- ZooKeeper 3.8/3.9;生产用 3 或 5 节点,奇数个。
tickTime默认 2000ms;initLimit=10、syncLimit=5。- 4lw 在 3.5.3+ 默认只放行
srvr,mntr/stat/cons/wchs要配4lw.commands.whitelist。 - Java 客户端用 Curator 5.9.x;不要手写 Watch 重注册。
- 三节点练习可直接用
zookeeper:3.9镜像,数据目录独立挂载。
读后自检
- 能画出一次写请求:Proposal → Follower fsync → 过半 ACK → Commit → 应用 DataTree。
- 能解释读请求为什么走本地、什么情况下需要
sync()。 - 能解释 Watch 为什么是一次性、通知丢失后如何恢复状态。
- 能算出
sessionTimeout的协商范围:2×tickTime ~ 20×tickTime。 - 能用
zkCli.sh完成create/get/set/stat/get -w,并看懂stat的cversion、ephemeralOwner、zxid。 - 能说清临时顺序节点锁的加锁、释放、会话过期三条路径。
- 能区分
ConnectionLoss(状态不确定)和SessionExpired(锁已丢失)。 - 能按单机挂、过半挂、全挂、数据损坏四种场景给出恢复顺序和判断依据。
生产检查清单
上线前、运行中、故障时逐条核对:99-生产检查清单。