大数据学习(88)-zookeeper实现的高可用(HA)

🍋🍋大数据学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


ZooKeeper 实现高可用的能力详解

ZooKeeper 不仅是实现分布式系统高可用(HA)的关键工具,其自身也通过特定架构设计实现了高可用特性。

一、ZooKeeper 自身的高可用实现

1. 集群架构设计

典型部署 :由3/5/7个节点组成的 ZooKeeper Ensemble

复制代码
[Client] → [Leader]
            ↑
[Follower] ←→ [Follower]
复制代码

高可用保障

  • 自动Leader选举:基于ZAB协议(ZooKeeper Atomic Broadcast)

  • 数据一致性:所有写操作通过Leader协调,保证顺序一致性

  • 读操作扩展:Follower可直接处理读请求

2. 容错能力

集群规模 可容忍故障节点数 最少存活节点要求
3节点 1 2
5节点 2 3
7节点 3 4

选举过程示例

  1. 节点启动后进入LOOKING状态

  2. 交换投票信息(包含zxid和serverid)

  3. 获得多数派投票的节点成为Leader

  4. 其余节点成为Follower并同步数据

3. 数据持久化

  • 事务日志:所有写操作先写磁盘日志(顺序IO)

  • 内存快照:定期生成snapshot加速恢复

  • WAL机制:Write-Ahead Logging保证数据不丢失

二、ZooKeeper 如何为其他系统提供高可用

1. 核心功能支持

功能 高可用实现案例
分布式锁 防止多节点同时操作关键资源
服务注册与发现 实时感知服务节点存活状态
配置管理 集群所有节点配置即时同步
Leader选举 确定唯一活跃节点(如HDFS NameNode)

2. 典型集成方案

(1) HDFS NameNode HA
复制代码
graph LR
    ActiveNN[Active NameNode] -->|写入| JN[JournalNodes]
    StandbyNN[Standby NameNode] -->|读取| JN
    ZKFC[ZKFC] -->|监控| ZK[ZooKeeper]
    ZKFC --> ActiveNN
    ZKFC --> StandbyNN

故障转移流程

  1. ZKFC检测到Active NN心跳超时

  2. 在ZK创建临时节点尝试接管

  3. 获得锁的Standby NN切换为Active

  4. 通过JournalNodes同步最新状态

(2) Kafka Controller选举
  • 每个Broker在ZK注册临时节点

  • 第一个成功创建/controller节点的Broker成为Controller

  • Controller故障时自动重新选举

三、ZooKeeper高可用配置实践

1. 关键配置参数

zoo.cfg

复制代码
# 集群节点配置
server.1=zk1:2888:3888  # 2888用于Leader通信,3888用于选举
server.2=zk2:2888:3888
server.3=zk3:2888:3888

# 会话超时控制
tickTime=2000  # 基础时间单元(ms)
initLimit=10   # 初始化连接最长等待tick数
syncLimit=5    # 心跳请求最长等待tick数

# 数据目录
dataDir=/var/lib/zookeeper
dataLogDir=/var/log/zookeeper  # 事务日志单独目录

2. 监控指标

关键监控项

  • zk_avg_latency:平均请求处理时间(应<50ms)

  • zk_outstanding_requests:排队请求数(应<10)

  • zk_followers:正常Follower数量

  • zk_znode_count:znode总数监控

四字命令检查

复制代码
echo stat | nc localhost 2181  # 查看状态
echo mntr | nc localhost 2181  # 监控指标

四、ZooKeeper高可用的局限性

  1. 写性能瓶颈

    • 所有写操作必须通过Leader

    • 集群规模扩大时写吞吐量不会增加

  2. 脑裂风险

    • 网络分区可能导致双Leader

    • 需要通过quorum配置预防(N/2+1)

  3. 会话风暴

    • 大量客户端重连可能导致集群过载

    • 解决方案:客户端采用指数退避重试

ZooKeeper通过其分布式共识算法和集群架构,既能保障自身服务的高可用,又能作为基础设施为其他分布式系统提供可靠的协调服务。正确配置和使用时,ZooKeeper集群可以实现99.99%以上的可用性。

这里值得说明的是:初始 LOOKING 状态的定义

在 ZooKeeper 集群中,LOOKING 是服务器节点启动或发现无 Leader 时进入的特殊状态,表示该节点正在主动寻找或参与 Leader 选举。这是 ZooKeeper 实现高可用的核心机制之一。

当当前的Leader崩溃

  1. Follower检测到Leader心跳超时(默认2*tickTime)

  2. 所有Follower转入LOOKING状态

  3. 启动新一轮选举,选择zxid最大的节点

  4. 新Leader产生后同步数据

相关推荐
你觉得2053 分钟前
山东大学:《DeepSeek应用与部署》|附PPT下载方法
大数据·人工智能·python·机器学习·ai·aigc·内容运营
火龙谷23 分钟前
【Zookeeper搭建(跟练版)】Zookeeper分布式集群搭建
分布式·zookeeper
云上艺旅32 分钟前
K8S学习之基础五十八:部署nexus服务
学习·docker·云原生·容器·kubernetes
虾球xz1 小时前
游戏引擎学习第188天
javascript·学习·游戏引擎
hongqi10292 小时前
刘火良FreeRTOS内核实现与应用学习之6——多优先级
stm32·学习·freertos
Haibakeji2 小时前
海拔案例分享-新华书店新零售系统开发解决方案
大数据·运维
honey ball2 小时前
近场探头的选型
运维·单片机·嵌入式硬件·学习
Hug Freedom.2 小时前
RISC-V AIA学习3---APLIC 第一部分
学习·risc-v
Hug Freedom.2 小时前
RISC-V AIA学习3---APLIC 第二部分(APLIC 中断域的内存映射控制区域)
学习·risc-v
zl0_00_03 小时前
sql注入语句学习
数据库·sql·学习