用 ZooKeeper 可以做的 7 件“分布式脏活累活”
ZK 本质是一个 带监听功能的小文件系统 + 强一致广播机。凡是“多个进程抢同一把锁、同一条配置、同一条元数据”的场景都能用。
| 场景 | ZooKeeper 技术点 | 一句话解释 |
|---|---|---|
| 1 服务注册发现 | 临时顺序节点 + Watcher | 节点挂掉自动删,客户端实时收到通知 |
| 2 分布式锁 | 临时顺序节点 + 监听前一个节点 | 谁序号最小谁拿到锁 |
| 3 Master 选主 | 创建 /master 临时节点,成功即当选,失败则监听删除事件 | 主节点挂掉秒级重新选举 |
| 4 配置中心 | 把配置写到 ZNode,监听数据变化 | 配置一改,所有节点热刷新 |
| 5 分布式队列 | 顺序节点做 FIFO / 优先级队列 | 生产者写节点,消费者监听子节点列表 |
| 6 Barrier 栅栏 | 所有客户端在某个父节点下建子节点,计数到达阈值后一起放行 | 分布式任务同步起跑 |
| 7 元数据/命名服务 | 统一命名空间,路径即名字 | 比如 Kafka 把 Broker 列表、Topic 分区信息都放 ZK |
代码片段:分布式锁(Curator 版)
java
InterProcessMutex lock = new InterProcessMutex(client, "/locks/pay");
if (lock.acquire(10, TimeUnit.SECONDS)) {
try {
// 执行业务
} finally {
lock.release();
}
}总结一句话
• ZooKeeper 像“分布式班长”,凡是抢锁、选主、发通知、存配置的活都能干。
4️⃣ 基于 ZooKeeper 的 HDFS HA 方案
组件:NameNode Active/Standby + ZKFC + ZK
• 启动时两个 NN 在 ZK /hadoop-ha/mycluster 注册 临时顺序节点
• ZKFC 进程监控本地 NN 健康:
- 心跳丢失 → 删除临时节点 → Standby NN 收到 节点删除事件 → 抢注新节点 → 触发 failover → 切主
• 客户端通过 ZK 读取 ActiveNameNode 地址,实现秒级故障切换
效果:NameNode 宕机 5 秒完成主备切换,HDFS 可用性 99.99%。