ZooKeeper详解


文章目录

ZooKeeper

作用

  • ZooKeeper在大数据组件中起着重要的协调作用,帮助实现高可用性和一致性。
  • 通常用于监控主备节点,实现高可用;也用于同步数据。
举例

1.在Hadoop YARN中,实现了ResourceManager的HA。当主ResourceManager节点故障时,ZooKeeper会帮助切换到备用的ResourceManager节点。

2.在HBase中,实现了RegionServer的HA。当一个HBase RegionServer节点失效时,ZooKeeper帮助重新分配这个节点的负载给其他可用的节点。

3.在Spark中,实现了Master的HA。如果当前的Master节点失效,ZooKeeper会通知备用Master节点接管。

设计原理

  • 文件系统(存储和管理数据)+通知机制(当观察者观察的Znode[Zookeeper DataNode]的数据状态发生变化之后,ZooKeeper通知在Zookeeper上注册的观察者(客户端)做出相应的反应)
  • 观察者模式
    • 当被观察者状态发生改变时,它会通知所有的观察者对象,使他们能够及时做出响应。

Znodes的状态变化

  1. 创建Znode:服务器启动时去ZooKeeper注册信息
  2. 删除Znode:服务器下线时去ZooKeeper注销信息
  3. 更新Znode数据:服务的配置信息发生变化,去更新ZooKeeper中相关的Znode的数据。
  4. 子节点变化:如果一个Znode有子节点,这些子节点的添加或删除也会被视为父ZNode的状态变化。

具体步骤ZooKeeper原理

  1. 注册观察
    • 服务器启动时在ZooKeeper集群中通过创建或更新Znodes来完成注册信息
    • 客户端获取当前服务器列表,并注册监听。
  2. 事件触发
    • 如果服务器发生事件,在集群中的Znodes发生相应的状态变化(如数据更新、节点删除、子节点变化)。ZooKeeper集群将检测到这些变化。
  3. 通知观察者
    • ZooKeeper会向所有对该znode注册了观察的客户端发送通知。这些通知是一次性的,也就是说,一旦发送了通知,相应的观察就被移除了。
    • 如果客户端需要继续监视该znode的后续变化,它必须再次注册观察。
  4. 客户端响应
    • 收到通知后,客户端进行操作(如读取更新后的数据,调整其内部状态)。

ZooKeeper数据结构(了解)

  • 树结构
    • ZooKeeper
      • config 存储集群的动态配置
      • quota 实现节点的配额管理

ZooKeeper CLI

  • zkCli.sh:进入ZooKeeper
  • ls path:查看路径对应znode下的所有子节点
  • get path:获取节点的值

ZooKeeper 端口号

  1. 客户端连接端口(Client Port):默认为2181,用于客户端与zookeeper服务器进行通信。
  2. 服务器之间通信端口(Peer Port)):默认为2888,用于zookeeper服务器之间进行数据同步和选举。
  3. 选举通信端口(Leader Election Port)):默认为3888,用于zookeeper服务器之间进行选举。

Zookeeper角色

ZooKeeper选举机制

半数机制
  • 集群中半数以上机器存活,集群可用
  • ZooKeeper工作时,有一个节点为Leader,其他为Follower,Leader是通过内部选举机制临时产生的
  • Leader选举是保证分布式数据一致性的关键所在
    1. 单一写入点。
    2. 更新状态,确保数据全局一致性。
    3. Leader失联时进行新的Leader选举。
leader选举触发时机
  • 服务器初始化启动(没有Leader)
  • 服务器运行期间无法和Leader保持连接(Leader故障)
补充
  • 通常ZooKeeper的机器数是奇数。
  • 后加的机器一定不会是Leader。
  • 每一次进行状态更新,zxid递增,对于具有相同zxid的机器,myid越大的机器会成为Leader。
相关推荐
电子手信几秒前
知识中台在多语言客户中的应用
大数据·人工智能·自然语言处理·数据挖掘·知识图谱
天冬忘忧20 分钟前
Kafka 数据倾斜:原因、影响与解决方案
分布式·kafka
隔着天花板看星星24 分钟前
Kafka-Consumer理论知识
大数据·分布式·中间件·kafka
holywangle25 分钟前
解决Flink读取kafka主题数据无报错无数据打印的重大发现(问题已解决)
大数据·flink·kafka
隔着天花板看星星26 分钟前
Kafka-副本分配策略
大数据·分布式·中间件·kafka
Lorin 洛林1 小时前
Hadoop 系列 MapReduce:Map、Shuffle、Reduce
大数据·hadoop·mapreduce
金刚猿1 小时前
简单理解下基于 Redisson 库的分布式锁机制
分布式·分布式锁·redisson
DolphinScheduler社区1 小时前
大数据调度组件之Apache DolphinScheduler
大数据
SelectDB技术团队1 小时前
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
大数据·数据库·数据仓库·数据分析·doris
我一直在流浪1 小时前
Kafka - 消费者程序仅消费一半分区消息的问题
分布式·kafka