ZooKeeper详解

简介: ZooKeeper是大数据组件中的协调器,确保高可用性和一致性。它用于监控主备节点切换(如Hadoop YARN的ResourceManager,HBase的RegionServer,Spark的Master)并实现数据同步。设计基于文件系统和通知机制,通过Znodes的状态变化(创建、删除、更新、子节点变化)进行协调。ZooKeeper使用观察者模式,当Znode变化时,通知客户端。其数据结构为树形,提供CLI工具如`zkCli.sh`进行交互。ZooKeeper有三个默认端口:2181(客户端连接),2888(服务器间同步),3888(选举)。选举采用半数机制,确保集群稳定性。

welcome_to_reading.gif
introduction.png

@[TOC]

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. 客户端响应
    • 收到通知后,客户端进行操作(如读取更新后的数据,调整其内部状态)。
      image.png

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角色

    image.png

image.png

ZooKeeper选举机制

半数机制
  • 集群中半数以上机器存活,集群可用
  • ZooKeeper工作时,有一个节点为Leader,其他为Follower,Leader是通过内部选举机制临时产生的
  • Leader选举是保证分布式数据一致性的关键所在
    1. 单一写入点。
    2. 更新状态,确保数据全局一致性。
    3. Leader失联时进行新的Leader选举。
leader选举触发时机
  • 服务器初始化启动(没有Leader)
  • 服务器运行期间无法和Leader保持连接(Leader故障)
补充
  • 通常ZooKeeper的机器数是奇数。
  • 后加的机器一定不会是Leader。
  • 每一次进行状态更新,zxid递增,对于具有相同zxid的机器,myid越大的机器会成为Leader。

结尾图片.png

目录
相关文章
|
SQL 消息中间件 分布式计算
Hadoop常见端口总结
大数据常见端口汇总:
2695 0
Hadoop常见端口总结
|
缓存 Ubuntu 前端开发
Linux配置yum源以及基本yum指令
Linux配置yum源以及基本yum指令
|
Linux Perl
Linux命令教程:使用cat命令查看和处理文件
Linux命令教程:使用cat命令查看和处理文件
1691 0
|
Java Spring 开发者
Spring Boot 常用注解详解:让你的开发更高效
本文详细解析Spring Boot常用注解,涵盖配置、组件、依赖注入、Web请求、数据验证、事务管理等核心场景,结合实例帮助开发者高效掌握注解使用技巧,提升开发效率与代码质量。
1795 2
|
SQL 关系型数据库 MySQL
Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持
Apache Flink CDC 3.4.0 版本正式发布!经过4个月的开发,此版本强化了对高频表结构变更的支持,新增 batch 执行模式和 Apache Iceberg Sink 连接器,可将数据库数据全增量实时写入 Iceberg 数据湖。51位贡献者完成了259次代码提交,优化了 MySQL、MongoDB 等连接器,并修复多个缺陷。未来 3.5 版本将聚焦脏数据处理、数据限流等能力及 AI 生态对接。欢迎下载体验并提出反馈!
2028 1
Flink CDC 3.4 发布, 优化高频 DDL 处理,支持 Batch 模式,新增 Iceberg 支持
|
10月前
|
安全 数据可视化 Java
AiPy开发的 Spring 漏洞检测神器,未授权访问无所遁形
针对Spring站点未授权访问问题,现有工具难以检测如Swagger、Actuator等组件漏洞,且缺乏修复建议。全新AI工具基于Aipy开发,具备图形界面,支持一键扫描常见Spring组件,自动识别未授权访问风险,按漏洞类型标注并提供修复方案,扫描结果可视化展示,支持导出报告,大幅提升渗透测试与漏洞定位效率。
|
存储 运维 监控
zk基础—3.集群与核心参数
本文详细介绍了ZooKeeper(zk)的单机与集群部署方式、机器配置要求、JVM参数设置、核心配置参数、数据快照与事务日志机制、Leader选举相关参数、客户端连接限制、节点存储限制、端口通信、数据文件清理策略、事务日志风险控制、运维命令等内容,帮助读者全面掌握ZooKeeper的部署、调优和日常运维操作。
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
Java Linux iOS开发
如何配置 Java 环境变量:设置 JAVA_HOME 和 PATH
本文详细介绍如何在Windows和Linux/macOS系统上配置Java环境变量。
21171 12
|
存储 Prometheus 监控
prometheus实战篇:prometheus相关概念
在安装好Prometheus后,会暴露一个/metrics的http服务(相当于安装了prometheus_exporter),通过配置,Prometheus就可以采集到这个/metrics下的所有监控样本数据.