ZooKeeper原理剖析

news2024/10/7 0:49:27

1.ZooKeeper简介

ZooKeeper是一个分布式、高可用性的协调服务。在大数据产品中主要提供两个功能:

  • 帮助系统避免单点故障,建立可靠的应用程序。
  • 提供分布式协作服务和维护配置信息。

2.ZooKeeper结构

ZooKeeper集群中的节点分为三种角色:Leader、Follower和Observer,其结构和相互关系如下图所示。通常来说,需要在集群中配置奇数个(2N+1)ZooKeeper服务,至少(N+1)个投票才能成功的执行写操作。

ZooKeeper结构
在这里插入图片描述
上图中各部分的功能说明如下表所示。

名称描述
Leader在ZooKeeper集群中只有一个节点作为集群的领导者,由各Follower通过ZooKeeper Atomic Broadcast(ZAB)协议选举产生,主要负责接收和协调所有写请求,并把写入的信息同步到Follower和Observer。
FollowerFollower的功能有两个:1.每个Follower都作为Leader的储备,当Leader故障时重新选举Leader,避免单点故障。2.处理读请求,并配合Leader一起进行写请求处理。
ObserverObserver不参与选举和写请求的投票,只负责处理读请求、并向Leader转发写请求,避免系统处理能力浪费。
ClientZooKeeper集群的客户端,对ZooKeeper集群进行读写操作。例如HBase可以作为ZooKeeper集群的客户端,利用ZooKeeper集群的仲裁功能,控制其HMaster的“Active”和“Standby”状态。

如果集群启用了安全服务,在连接ZooKeeper时需要进行身份认证,认证方式有以下两种:

  • keytab方式:需要从MRS集群管理员处获取一个“人机”用户,用于登录MRS平台并通过认证,并且获取到该用户的keytab文件。
  • 票据方式:从MRS集群管理员处获取一个“人机”用户,用于后续的安全登录,开启Kerberos服务的renewable和forwardable开关并且设置票据刷新周期,开启成功后重启kerberos及相关组件。

注意:

  • 默认情况下,用户的密码有效期是90天,所以获取的keytab文件的有效期是90天。
  • Kerberos服务的renewable、forwardable开关和票据刷新周期的设置在Kerberos服务的配置页面的“系统”标签下,票据刷新周期的修改可以根据实际情况修改“kdc_renew_lifetime”和“kdc_max_renewable_life”的值。

3. ZooKeeper原理

写请求

  1. Follower或Observer接收到写请求后,转发给Leader。
  2. Leader协调各Follower,通过投票机制决定是否接受该写请求。
  3. 如果超过半数以上的Leader、Follower节点返回写入成功,那么Leader提交该请求并返回成功,否则返回失败。
  4. Follower或Observer返回写请求处理结果。

只读请求

客户端直接向Leader、Follower或Observer读取数据。

4. ZooKeeper和HDFS的关系

ZooKeeper与HDFS的关系如下图所示。

在这里插入图片描述
ZKFC(ZKFailoverController)作为一个ZooKeeper集群的客户端,用来监控NameNode的状态信息。ZKFC进程仅在部署了NameNode的节点中存在。HDFS NameNode的Active和Standby节点均部署有zkfc进程。

  1. HDFS NameNode的ZKFC连接到ZooKeeper,把主机名等信息保存到ZooKeeper中,即“/hadoop-ha”下的znode目录里。先创建znode目录的NameNode节点为主节点,另一个为备节点。HDFS NameNode Standby通过ZooKeeper定时读取NameNode信息。
  2. 当主节点进程异常结束时,HDFS NameNode Standby通过ZooKeeper感知“/hadoop-ha”目录下发生了变化,NameNode会进行主备切换。

5. ZooKeeper和YARN的关系

ZooKeeper与YARN的关系如下图所示。
在这里插入图片描述

  1. 在系统启动时,ResourceManager会尝试把选举信息写入ZooKeeper,第一个成功写入ZooKeeper的ResourceManager被选举为Active ResourceManager,另一个为Standby ResourceManager。Standby ResourceManager定时去ZooKeeper监控Active ResourceManager选举信息。
  2. Active ResourceManager还会在ZooKeeper中创建Statestore目录,存储Application相关信息。当Active ResourceManager产生故障时,Standby ResourceManager会从Statestore目录获取Application相关信息,恢复数据。

6. ZooKeeper和HBase的关系

ZooKeeper与HBase的关系如下图所示。
在这里插入图片描述

  1. HRegionServer以Ephemeral node的方式注册到ZooKeeper中。其中ZooKeeper存储HBase的如下信息:HBase元数据、HMaster地址。
  2. HMaster通过ZooKeeper随时感知各个HRegionServer的健康状况,以便进行控制管理。
  3. .HBase也可以部署多个HMaster,类似HDFS NameNode,当HMaster主节点出现故障时,HMaster备用节点会通过ZooKeeper获取主HMaster存储的整个HBase集群状态信息。即通过ZooKeeper实现避免HBase单点故障问题的问题。

7. Zookeeper和SmallFS的配合关系

FGCService的部署模式为HA模式。HA(High Availability)模式目的是防止单节点故障导致服务不可用。为了支持HA模式,FGCService依赖于ZooKeeper。
在这里插入图片描述

8. ZooKeeper和Kafka的配合关系

ZooKeeper与Kafka的关系如下图 ZooKeeper和Kafka的关系所示。
在这里插入图片描述

  1. Broker端使用ZooKeeper用来注册broker信息,并进行partition leader选举
  2. Consumer端使用ZooKeeper用来注册consumer信息,其中包括consumer·消费的partition列表等,同时也用来发现broker列表,并和partition leader建立socket连接,并获取消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

curl: (56) Recv failure : Connection reset by peer

文章目录 背景原因可能如下1. 服务器端关闭了连接2. 网络问题3. 防火墙或代理问题4. 服务器负载过高 解决办法 背景 docker容器里有http服务,今天在docker容器重启时,去调用http接口,出现了以下错误: curl: (56) Recv failure :…

Explain执行计划中各个字段的含义

Explain执行计划中各个字段的含义 1、Explain有什么用2、Explain有哪些信息3、Explain执行计划详解 1、Explain有什么用 当Explain 与 SQL语句一起使用时,MySQL 会显示来自优化器关于SQL执行的信息。也就是说,MySQL解释了它将如何处理该语句&#xff0c…

Docker 架构解析:多角度解析 Docker 引擎与容器运行时

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

matlab重名函数调用踩坑记录

我新安装了matlab的robotics toolbox,然而调用的rotx不是我想要的函数。 我上网查了一下资料,知乎和csdn有相关的回答,但是我试了一下还是不行。它们的方法是移除路径再添加路径避免函数的冲突。相关方法放在文末的相关参考1 2。这里建议先用…

疯踏java知识点-进阶精讲篇

该资源是关于Java的师生管理系统,可以学习借鉴一下。 继续进行讲解,如果前面有不懂的,可以翻阅一下同专栏的其他文章,该专栏是针对Java的知识从0开始。 JavaBean 一个Java中的类,其对象可用于程序中封装数据举例&…

【C++】STL——vector的使用、 vector增删查改函数的介绍和使用、push_back和pop_back、operator[]

文章目录 1.vector的使用2.vector的增删查改(1)push_back 尾插(2)pop_back 尾删(3)find 查找(4)insert 在position之前插入val (5)erase 删除指定位置的数据&…

EXCEl——单元格移除换行

方法一:使用清除格式功能 步骤如下: 1.选中需要取消换行的单元格 2.在“开始"选项卡中找到"清除”功能,点击下拉菜单中的“清除格式" 3.这时单元格的换行就被取消了。 清除前效果图 清除后效果图 方法一:使用函数功能 步骤…

Camtasia Studio 2023保存为mp4格式的视频的详细教程,Camtasia的视频导出功能

很多用户刚接触Camtasia Studio,不熟悉如何保存mp4格式的视频。在今天的文章中小编为大家带来了Camtasia Studio 2023保存为mp4格式的视频的详细教程介绍。 1、 打开Camtasia Studio。 Camtasia Studio- 2023 win: https://souurl.cn/1JFEsn Camtasia …

HACKATHONCTF_1靶场详解

HACKATHONCTF_1靶场复盘 这个靶场有点CTF感觉,一步一步的没有什么难度。 下载地址:https://download.vulnhub.com/hackathonctf/ctf.zip 扫到ip后对ip进行一个单独扫描,发现开了四个端口,ssh设置到7223上了,这个很重…

SPP、SPPF 、 SimSPPF 、 ASPP、 SPPCSPC详解

分享自:https://blog.csdn.net/weixin_43694096/article/details/126354660 1. 原理 1.1 SPP(Spatial Pyramid Pooling) SPP 模块是何凯大神在2015年的论文《Spatial Pyramid Pooling in Deep Convolution Networks for Visual Recognitio…

前端工程化第一章:webpack基础(上)

文章目录 1. 什么是webpack?2. webpack使用2.2. 前置知识2.1. 创建一个项目 3. webpack打包3.1. 创建一个webpack.config.js文件3.2. 入口(entry)3.2.1. webpack.config.js3.2.2. src/index.js3.2.3. package.json 3.3. 输出(outp…

C++第三讲

思维导图 手动封装一个顺序栈类(数据元素为整形),要求私有成员属性:堆区空间的指针,用于存放数据,和一个指向栈顶元素的变量 /* ---------------------------------author:YoungZorncreated on…

nacos集群地址配置问题

#it is ip #example 127.0.0.1:8848 127.0.0.1:8849 127.0.0.1:8850 上面的配置可能存在配置失败的情况,可以采用下面的配置 127.0.0.1:8845 127.0.0.1.8846 127.0.0.1.8847 该配置在cluster.conf文件里面

还在使用冒泡排序遍历数组?No No No 库函数qsort帮你搞定所有排序还不快学起来!

🎬 鸽芷咕:个人主页 🔥 个人专栏:《快速入门C语言》《C语言初阶篇》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言💬 库函数qsort的介绍💬 库函数qsort的参数介绍💭 参数一 (void* base)…

Acwing.908 最大不相交区间数量(贪心)

题目 给定N个闭区间[ai,bi],请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。输出可选取区间的最大数量。 输入格式 第一行包含整数N,表示区间数。 接下来N行,每行包含两个整数ai , bi&#xff0c…

【基于 GitLab 的 CI/CD 实践】03、GitLab Pipeline 实践(上)

目录 一、GitLab Pipeline 流水线语法有哪些?流水线参数列表 如何检查语法错误?流水线语法检测 二、Pipeline 基础语法 job script before_script after_script stages 未定义 stages ​定义 stages 控制 stage 运行顺序 .pre & .post …

2010年中国生态系统服务空间数据集

摘要 生态系统服务是生态系统形成并维持的人类赖以生存和发展的环境条件与效用,是测度自然生态系统保护价值的重要指标。采用科学方法模拟生态系统服务的空间分布对掌握当前我国生态本底状况,识别生态保护重要区,从而有效支持生态管理决策具…

关于金融英语的翻译技巧,你了解多少呢

据了解,金融英语除了具备通用英语特点之外 ,还具备自己独特的特征,如专有名词多、专业术语量大、专业缩略词等。为了确保译文的准确性,翻译金融英语时要注意以下几点技巧。 一、专业术语坚持直译。金融翻译中涉及大量金融英语特有…

day10_practice

用面向对象思想实现数据分析 1、设计类,完成数据封装 2、设计抽象类,定义文件读取相关功能,使用子类实现具体功能(由于两份文件格式不同) 3、读取文件,产生数据对象 4、计算每天销售额 5、绘图 一、数据封装类设计 ""…

Python读取骑行fit文件

目录 故事背景安装输出有心率和无心率的数据为NO.fit文件增加心率数据并保存参考文献 故事背景 有一天,我使用wahoo码表骑行记录了一段没有心率带的数据,导出fit文件至电脑。上传至捷安特APP,结果说数据不完整,此时想用代码把心率…