ZooKeeper详解

ops/2024/10/21 1:43:32/

在这里插入图片描述
在这里插入图片描述

文章目录

  • ZooKeeper
      • 作用
          • 举例
      • 设计原理
      • Znodes的状态变化
      • 具体步骤ZooKeeper原理
      • ZooKeeper数据结构(了解)
      • ZooKeeper CLI
      • ZooKeeper 端口号
      • Zookeeper角色
      • ZooKeeper选举机制
          • 半数机制
          • leader选举触发时机
          • 补充

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。
    在这里插入图片描述

http://www.ppmy.cn/ops/32540.html

相关文章

给Ollama套个WebUI,方便使用

Ollama 基本的安装使用参考前文 https://xugaoxiang.com/2024/05/01/ollama-offline-deploy/,前文使用的模型是 llama2,本篇将使用 llama3,因此在启动时,命令是 ollama run llama3。 Ollama Llama3 Llama3 是 Meta 发布的大语言模…

JSON解析

JSON简介 JSON是一种轻量级的数据交换格式,它采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言,易于人的阅读和编写,同时也有利于机器解析和生成,并有效地提升网络传输效率…

快速了解Django:核心概念解析与实践指南

title: 快速了解Django:核心概念解析与实践指南 date: 2024/5/1 20:31:41 updated: 2024/5/1 20:31:41 categories: 后端开发 tags: Django核心路由系统视图系统ORM管理中间件Web框架登录装饰器 第一章:Django简介 背景和发展历程: Djan…

Python | Leetcode Python题解之第65题有效数字

题目: 题解: from enum import Enumclass Solution:def isNumber(self, s: str) -> bool:State Enum("State", ["STATE_INITIAL","STATE_INT_SIGN","STATE_INTEGER","STATE_POINT","STATE_…

Android 安装过程三 MSG_ON_SESSION_SEALED、MSG_STREAM_VALIDATE_AND_COMMIT的处理

Android 安装过程一 界面跳转 知道,在InstallInstalling Activity中,PackageInstallerSession对象创建之后,接着会打开它,然后将安装文件进行拷贝,拷贝完成之后,会对Session对象确认。   从Session对象确…

python基础第29课《阶段检测》

第29课《阶段检测》 1.下面哪个选项的说法是错误的是 A、print()是输出指令 B、print(“”,end “”)中的end ""是不换行操作c、input()是输入指令 D、输出指令和输入指令必须结合使用 选项 D 的说法是错误的。输出指令(如 print()&#xff…

2024五一杯数学建模ABC题(附历年优秀论文+写作模板)参考论文+完整代码数据集

2024年第二十一届五一数学建模竞赛 资料思路分享群:937571119 一、赛题思路 (赛题出来以后第一时间在群内分享) 二、比赛日期和时间 比赛开始时间:2024年5月1日(周三)10;00 比赛结束时间:2024年5月4日(周六)12:00 竞赛信息 数学建模竞赛是一项模拟面对实际问题…

A Bug‘s Life (并查集)

//新生训练 #include <iostream> #include <algorithm> using namespace std; const int N 5000; int p[N], sz[N]; int n, m; int find(int x) {if (p[x] ! x)p[x] find(p[x]);return p[x]; } int main() {int T;scanf("%d", &T);for (int k 1; …