跳到正文

ZooKeeper 学习路线 ​

本页只是索引。ZooKeeper 的主线是 ZAB、Session、Watch 三个机制;分布式锁、选主、注册发现都是它们的组合应用。

适用版本:ZooKeeper 3.8 / 3.9(3.5.3+ 的 4lw 行为与旧版不同)。前置环境:JDK 8+、Docker、zkCli.sh、nc;练习集群至少 3 个节点。

阅读顺序 ​

顺序文章一句话前置
101-ZK架构与ZAB协议写请求如何经 Leader 广播、过半落盘后提交,Session 和 Watch 如何支撑临时节点与变更通知无
203-分布式锁与Curator用临时顺序节点排队、Watch 前驱唤醒,以及 Curator 的封装和会话失效处理01
302-ZK与etcd与Consul对比按语言生态、Watch 语义和运维成本选协调服务,不做性能排名01
404-生产踩坑与运维磁盘、会话、连接三类事故的定位与单机/过半/全挂/损坏四种 Runbook01、03
505-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-生产检查清单。

把一门技术讲透到既懂也会用