分布式协调服务:ZooKeeper入门指南

什么是ZooKeeper?

ZooKeeper是一个开源的分布式协调服务,由Apache维护。它主要用于解决分布式系统中的数据一致性问题,提供诸如统一命名服务、状态同步服务、集群管理、分布式应用配置管理等功能

ZooKeeper的核心功能

集群角色

  • Leader:负责处理写请求,确保事务顺序性。
  • Follower:提供读服务,参与Leader选举和写操作的"过半写成功"策略。
  • Observer:提供读服务,不参与Leader选举,提升集群性能

数据模型

ZooKeeper的数据模型是一棵树形结构,每个节点称为ZNode,可以存储少量数据(不超过1MB)。ZNode分为永久节点和临时节点,临时节点与客户端会话相关

Watcher机制

客户端可以在ZNode上注册Watcher,当ZNode发生变化时,ZooKeeper会通知客户端

ZooKeeper的应用场景

集群管理

实时监控集群状态,根据状态变化进行调整

分布式锁

确保不同进程之间争夺资源时的互斥访问

Master选举

在多个节点中选举出一个主节点,避免单点故障。

配置管理

在分布式环境下同步配置文件

案例:HBase中的Master选举

HBase使用ZooKeeper实现Master选举,以避免单点故障。

工作原理

  1. 初始化:HBase集群启动时,多个HMaster节点尝试连接ZooKeeper。
  2. 选举:ZooKeeper通过临时节点机制,确保只有一个HMaster节点成功创建临时节点,从而成为主节点。
  3. 监控:其他HMaster节点监听ZooKeeper上的临时节点,当主节点故障时,临时节点消失,其他节点竞争成为新的主节点。
  4. 切换:当新的主节点选举成功后,ZooKeeper通知所有RegionServer更新主节点信息,确保集群正常运行。

这种机制确保了HBase集群的高可用性,即使主节点故障,也能快速切换到备用节点。

示例代码:创建ZNode

以下是使用Java客户端创建ZNode的示例代码:

java 复制代码
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;

public class CreateZNode {
    public static void main(String[] args) throws Exception {
        // 创建ZooKeeper客户端
        ZooKeeper zk = new ZooKeeper("localhost:2181", 1000, null);
        
        // 创建永久节点
        String path = "/app";
        byte[] data = "Hello, ZooKeeper!".getBytes();
        zk.create(path, data, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        
        // 关闭客户端
        zk.close();
    }
}

这个例子演示了如何使用ZooKeeper的Java客户端创建一个永久节点。

相关推荐
江畔柳前堤11 小时前
GO01-Go 语言与主流编程语言深度对比
开发语言·人工智能·后端·微服务·云原生·golang·go
世界哪有真情11 小时前
拿人类意识卡 AI?等于用 bug 验收正式产品
前端·人工智能·后端
鱼樱前端11 小时前
别再自己拼凑了!这款 Vue 3.5+ 严肃产品级组件库,把 AI 对话、工作流和复杂数据全包了!
javascript·vue.js·github
kyriewen13 小时前
面试官让我优化一个卡死的表格,我打开 Claude 五秒重写,他放下咖啡问我要不要来当组长
前端·javascript·面试
阿里嘎多学长13 小时前
2026-07-14 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Csvn14 小时前
Day 3:LIKE 与模式匹配 — 让查询学会"模糊搜索"
后端·sql
IpdataCloud14 小时前
跨区服玩家延迟高怎么办?用IP离线库自动分配到最近服务器
数据库·tcp/ip·github·php·ip
Hazenix15 小时前
Go 指南:一篇文章速通 Golang
开发语言·后端·golang
灯澜忆梦15 小时前
GO_复合类型---指针
开发语言·后端·golang
IT_陈寒15 小时前
SpringBoot自动装配坑了我一天,原来问题出在这
前端·人工智能·后端