Zookeeper 分布式协调服务

一、认识 Zookeeper

1. 简介

  • 定义:开源分布式应用程序协调服务,提供同步、命名、组服务、配置管理等功能。
  • 解决问题:分布式系统中的死锁、竞态条件等问题。
  • 适用场景:与 HA 模式下的 HDFS、Yarn、HBase 等 Hadoop 组件搭配使用。

2. 设计目的

  • 一致性:客户端连接任意 Server,视图一致。
  • 实时性:数据存于内存,高吞吐、低延迟。
  • 可靠性:集群服务器相互感知。
  • 有序性:更新操作赋予唯一有序版本号。
  • 原子性:数据读取只有成功或失败两种状态。

3. 系统模型

  • 组成:服务器(Server)和客户端(Client)。
  • 通信方式:客户端通过 TCP 连接 Server,发送请求和心跳,获取响应和事件通知。
  • 会话机制:客户端首次连接建立会话,断开后自动重连其他 Server 并重建会话。

4. 核心角色

  • Leader:集群唯一领导者,调度事务请求、协调集群服务器。
  • Follower:多个跟随者,处理非事务请求、转发事务请求、参与 Leader 选举投票。
  • Observer:处理非事务请求、转发事务请求,不参与选举投票。

5. 工作原理

  • 核心机制:选举 Leader 提供服务,Leader 故障时快速选举新 Leader。
  • 集群要求:半数以上服务器正常运行即可提供服务,推荐奇数节点部署。
  • ZAB 算法:
    • 领袖选举:从 Follower 中选举 Leader。
    • 原子广播:同步 Leader 与 Follower 数据,保证一致性。

二、Zookeeper 的安装和常用命令

1. 安装模式

(1)单机模式
  • 步骤:解压安装包→重命名目录→配置环境变量→修改配置文件(zoo.cfg)→启动服务器→验证启动(jps 查看 QuorumPeerMain 进程)。
(2)全分布式(集群模式)
  • 步骤:修改 zoo.cfg(指定数据目录、集群节点)→创建 myid 文件(标识节点 ID)→分发安装目录→配置环境变量→启动集群→验证状态(Mode: leader/follower)。
  • 集群脚本:编写 xzk.sh 脚本,批量启动 / 关闭集群节点。

2. 常用脚本(/mysoft/zookeeper/bin/ 目录)

3. 客户端操作

(1)节点类型
  • 永久节点:客户端退出后不删除。
  • 临时节点:客户端退出后自动删除,不可有子节点。
  • 顺序节点:名称末尾附加 10 位序列号。
(2)节点权限(ACL)
  • 五种权限:CREATE(创建子节点)、READ(读取数据)、WRITE(更新数据)、DELETE(删除子节点)、ADMIN(设置 ACL)。
(3)常用命令
  • 启动客户端:zkCli.sh(本地)、zkCli.sh -server 主机地址(远程)。
  • 节点操作:create(创建)、ls(查看子节点)、get(获取数据)、set(更新数据)、delete(删除节点)等。

三、Zookeeper 客户端编程

1. 配置开发环境

  • 新建模块→修改 pom.xml 文件,引入 Zookeeper 依赖。

2. Java 程序操作

  • 核心 API:创建 ZooKeeper 实例→连接服务器→执行节点增删改查操作→关闭连接。
  • 关键注意:处理连接回调、异常捕获、会话超时机制。

四、Zookeeper 典型应用场景

1. 数据发布与订阅(配置中心)

  • 场景:集中管理配置信息、服务地址列表等,支持动态更新。
  • 实现:发布者将数据写入 ZK 节点,订阅者注册 Watcher,接收数据更新通知。

2. 统一命名服务

  • 场景:分布式系统中,通过名称获取服务地址、资源信息。
  • 实现:创建全局唯一 ZK 节点路径作为名称,关联资源信息。

3. 分布式锁

  • 独占锁:多个客户端竞争创建同一节点,成功创建者获得锁。
  • 时序锁:创建临时有序节点,按节点顺序获取锁,保证全局时序。
相关推荐
qq_124987075313 分钟前
基于Hadoop的信贷风险评估的数据可视化分析与预测系统的设计与实现(源码+论文+部署+安装)
大数据·人工智能·hadoop·分布式·信息可视化·毕业设计·计算机毕业设计
Coder_Boy_3 小时前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
袁煦丞 cpolar内网穿透实验室4 小时前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
人间打气筒(Ada)4 小时前
GlusterFS实现KVM高可用及热迁移
分布式·虚拟化·kvm·高可用·glusterfs·热迁移
xu_yule4 小时前
Redis存储(15)Redis的应用_分布式锁_Lua脚本/Redlock算法
数据库·redis·分布式
難釋懷8 小时前
分布式锁的原子性问题
分布式
ai_xiaogui9 小时前
【开源前瞻】从“咸鱼”到“超级个体”:谈谈 Panelai 分布式子服务器管理系统的设计架构与 UI 演进
服务器·分布式·架构·分布式架构·panelai·开源面板·ai工具开发
凯子坚持 c10 小时前
如何基于 CANN 原生能力,构建一个支持 QoS 感知的 LLM 推理调度器
分布式
飞升不如收破烂~10 小时前
Redis 分布式锁+接口幂等性使用+当下流行的限流方案「落地实操」+用户连续点击两下按钮的解决方案自用总结
数据库·redis·分布式