Zookeeper (更新中)

news2024/10/2 10:31:19

目录

    • Zookeeper 概述
    • Zookeeper 的特点
    • Zookeeper 的应用场景
    • Zookeeper的数据结构
      • ZNode数据类型
      • ZNode里面存储的信息
    • Zookeeper的选举机制(重要)
      • Zookeeper第一次启动选举机制
      • Zookeeper非第一次启动选举机制
    • Zookeeper 底层如何按照请求的先后顺序来处理的

Zookeeper 概述

什么是Zookeeper?
  Zookeeper是一个开源的分布式的,为其他分布式监控提供协调服务的Apache项目。
 
 

Zookeeper 的特点

Zookeeper 有哪些特点?

  • Zookeeper是由一个Leader,和多个Follower组成的集群。

  • Zookeeper集群中只有半数以上的节点存活,Zookeeper集群才能正常提供服务。

  • Zookeeper集群全局数据统一,每个Zookeeper Server保存一份相同的数据副本,Client无论连接哪一台Server,数据都是一致的。

  • 由于有事务的存在,每次写操作都有事务id(zxid),所以数据更新具有原子性,要么成功,要么失败。
     
     

Zookeeper 的应用场景

1、提供记录IP地址的域名服务。
  如我们可以将www.baidu.com作为父节点,下面的子节点为真实的IP地址,便于标识。
请添加图片描述

2、统一配置管理。
  可将配置信息写入Zookeeper的一个ZNode中,然后各个客户端服务器监听这个ZNode,一旦这个ZNode中的数据发生变化,Zookeeper将通知各个客户端服务器。
3、统一集群管理。Zookeeper可以实现监控集群中各节点的状态变化。
  可将集群节点的信息写入Zookeeper的一个ZNode中,然后监听这个ZNode可获得它的实时状态变化。
请添加图片描述

4、服务器动态上下线。客户端能实时洞察服务器上下线的变化。

请添加图片描述
5、软负载均衡。
  让Zookeeper记录每台服务器的访问数,让访问最好的服务器去处理最小的客户端请求。

请添加图片描述

 
 

Zookeeper的数据结构

  Zookeeper的数据结构与文件系统很类似,属于树形结构
整体可以看做是一颗树,每个节点称为一个ZNode,每个ZNode都可以通过其路径唯一标识,如/znode1/leaf1,就可以找到根目录/下的/znode1下的leaf1。每个ZNode能存储的数据量非常小,大约能够存储1MB的数据,只能用来存储一些简单的配置信息,不能存储海量数据。

ZNode数据类型

  ZNode包括四种不同的类型,分别是 持久的、持久有序的、短暂的、短暂有序的。其中持久和短暂是指
1)持久:客户端与服务器断开连接之后,创建的节点不删除。
2)短暂:客户端与服务器断开连接之后,创建的节点被删除。
3)有序:创建有序的ZNode时,ZNode的名称后会附加一个顺序号,顺序号是一个单调递增的计数器,由父节点维护。

ZNode里面存储的信息

  ZNode里面包含了存储的数据(data)、访问权限(acl)、子节点引用(child)和节点状态信息(stat)。
其中
访问权限acl是指记录客户端对ZNode节点的访问权限。
子节点引用child是指当前节点的子节点引用。
节点状态信息stat包含Znode节点的状态信息,比如事务id,版本号,时间戳等。

 
 

Zookeeper的选举机制(重要)

关于Zookeeper的选举机制,我们先要记住它的半数以上选举机制,而且我们还需要看看是第一次启动还是非第一次启动。

Zookeeper第一次启动选举机制

假设我们的Zookeeper集群有4个节点。而刚开始我们的Zookeeper服务都是关闭的。
(1)节点1启动,会发起一次选举。节点1会投自己一票,不够半数以上(3票),选举无法完成,节点1状态保持为LOOKING状态;
(2)节点2启动,再次发起一次选举。节点1和节点2分别投自己一票然后交换选品信息,此时节点1发现节点2的myid比自己大,所以更改选票为节点2,不够半数以上(3票),选举无法完成,节点1和节点2状态保持为LOOKING状态;
(3)节点3启动,发起一次选举。过程和节点2发起选票一样,最后更改选票为节点3.此次投票结果:节点1和节点2为0票,节点3为3票,由于半数以上选举机制,节点3当选Leader,并更改状态为LEADING,节点1和节点2Follower,并且更改状态为FOLLOWING。
(4)节点4启动,发起一次选票。此时此时节点1/2/3已经半数LOOKING状态,不会更改选票信息。交换选票信息结果:节点3为3票,节点4为1票,此时节点4更改选票为节点3,并更改状态为FOLLOWING。
 

Zookeeper非第一次启动选举机制

当其中一台机器由于网络分区故障无法与集群和Leader保持连接时,该节点进入选举状态,但是由于半数以上选举机制,该节点无法成为Leader,只能不断与其他节点进行连接,在连接成功之后,集群可能会出现两种情况:
1、集群中本来就存在Leader。对于这种情况,该节点会被当中当前集群的Leader信息,对于该节点来说,只要与Leader重新进行连接并更新状态即可。
2、集群中确实不存在Leader。
这个情况下,我们需要了解几个核心参数:
(1)SID:服务器ID,服务器ID和配置中的myid一致。
(2)ZXID:事务ID,该ID和服务器对于客户端更新请求有关。
(3)Epoch:每个Leader任期的代号,没有Leader时这个在各节点中是相同的,每次投完一次票这个数据就会增加。
假设Zookeeper集群由4个节点组成,SID为1/2/3/4,ZXID为8887,此时节点3为Leader。某时刻,节点4和Leader都挂掉了。

那么只剩下节点1和节点2,他们的(Epoch,ZXID,SID)分别为(1,8,1)和(1,7,2)
非第一次启动并Leader不存在的Leader选举机制为:
(1)Epoch大的胜出
(2)Epoch相同,ZXID大的胜出
(3)ZXID相同,SID大的胜出
综上,节点1当选Leader。

 
 

Zookeeper 底层如何按照请求的先后顺序来处理的

Leader收到请求之后,会给每个请求分配一个全局唯一的递增的ZXID,如何把请求放入一个FIFO队列里面,之后就按照FIFO的策略发送给所有的Follower。

 
 

  
  
  

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

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

相关文章

计算机SCI期刊审稿人,一般关注论文的那些问题? - 易智编译EaseEditing

编辑主要关心: (1)文章内容是否具有足够的创新性? (2)文章主题是否符合期刊的受众读者? (3)文章方法学是否合理,数据处理是否充分? (…

3|射频识别技术|第五讲:数据通信和编码技术|第九章:编码与调制|重点理解掌握传输介质中的有线传输介质

计算机网络部分:https://blog.csdn.net/m0_57656758/article/details/128943949传输介质分为有线传输介质和无线传输介质两大类;有线传输介质通常包含双绞线、同轴电缆和光导纤维;无线传输介质包含微波、红外线等。传输介质的选择和连接是网络…

02Hadoop环境搭建

版本 hadoop-3.1.3.tar.gz解压安装文件到/opt/module下面 [sarahhadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/将Hadoop添加到环境变量 (1)获取Hadoop安装路径 [sarahhadoop102 hadoop-3.1.3]$ pwd /opt/module/hadoop-3.1.3&…

Toolformer: Language Models Can Teach Themselves to Use Tools

展示了LM可以通过简单的API教自己使用外部工具,并实现两个世界的最佳效果。我们介绍了Toolformer,这是一个经过训练的模型,可以决定调用哪些API,何时调用,传递哪些参数,以及如何将结果最好地纳入未来的标记…

Spring Cloud Alibaba环境搭建

环境依赖 SpringCloud Alibaba 依赖 Java环境来运行。还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用: 1. 64 bit JDK 1.8;下载& 配置。 1.8.0_131 2. Maven 3.2.x;下载& 配置搭建微服务 1.建立微服务项目 1.idea通过…

yolov5编译安卓APP:解决图像上全是检测框

yolov5编译安卓APP:解决图像上全是检测框前言一、第一个YOLOv5 APP1.参考链接2.详细说明3.APP检测时图像上全是框的解决方法二、第二个YOLOv5 APP1.参考链接2.详细说明3.APP检测时图像上全是框的解决方法三、其他1.APK打包2.修改APP图标与名字前言 YOLOv5编译安卓A…

【精选论文 | Capon算法与MUSIC算法性能的比较与分析】

本文编辑:调皮哥的小助理 【正文】 首先说结论: 当信噪比(SNR)足够大时,Capon算法和MUSIC算法的空间谱非常相似,因此在SNR比较大时它们的性能几乎一样,当不同信号源的入射角度比较接近时&…

蓝桥杯刷题024——天干地支

2020国赛 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊(w&#xff09…

IO知识整理

IO 面向系统IO page cache 程序虚拟内存到物理内存的转换依靠cpu中的mmu映射 物理内存以page(4k)为单位做分配 多个程序访问磁盘上同一个文件,步骤 kernel将文件内容加载到pagecache多个程序读取同一份文件指向的同一个pagecache多个程…

MySQL(五)

通过索引进行优化 索引基本知识 索引的优点 1、大大减少了服务器需要扫描的数据量2、帮助服务器避免排序和临时表3、将随机io变成顺序io 索引的用处 1、快速查找匹配WHERE子句的行2、从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到…

【Python爬虫案例教学】采集某网站壁纸,实现壁纸自由

前言 (。・∀・)ノ゙嗨 大家好,这里是小圆 现在开始每天都给大家 分享些关于python爬虫的案例教学 从最简单的开始 — 采集图片壁纸 今天就来扒拉这个优质的壁纸网站~ 网址 👇 顺便瞧一眼 这里的…

30 - 面向对象的其他语法

目录 一、本章重点 二、对象的分类 1、类对象 (1)理解 (2)作用 2、实例对象 (1)理解 三、属性的划分 1、实例属性 (1)概念 (2)定义 (3&#xff09…

操作系统的概念,功能和目标

一、概念: 操作系统是指①控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以②提供给用户和其他软件方便的接口和环境,它③是计算机系统中最基本的系统软件。 二、功能和目标:…

零入门kubernetes网络实战-14->基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信测试案例

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章继续提供测试案例: 基于veth pair、namespace以及路由技术,实现跨主机命名空间之间的通信 1、网络拓扑如下 2、网络拓扑构建…

【第二章】(1)了解系统内核和 Shell 终端的关系与作用

🐧2.1强大好用的Shell🧊1.什么是Shell?🧊2.Bash解释器的优势🐧2.2 执行命令的必备知识🧊1.Linux命令的格式🧊2.四个快捷键/组合键小技巧🧊1.什么是Shell? ​ 一台…

shell脚本的编写以及shell中语句(嵌入式学习)

shell学习shell脚本编写步骤shell变量功能性语句1.read2.expr3.let4.test逻辑运算符的书写格式结构性语句1.if…then…fi2、case...esac3、for..do..done4、while..do..doneshell脚本 将shell命令按照一定的逻辑顺序实现指定功能,放到一个文件中。文件叫脚本文件&a…

几个Base64编码工具,也有蹊跷

起因 需求:对一段内容进行base64加密,然后通过url的get请求进行发送到后台,由于加密的内容比较少,base64串也不是很长,我认为此方案可行。 于是找了三个base64编码的在线工具,分别是: 平台1&…

设计模式第六讲:责任链模式和迭代器模式详解

一. 责任链模式 1. 背景 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导…

【Java基础】020 -- 常见API

目录 一、游戏打包exe 二、Math 1、Math类的常用方法 ①、代码实现 2、小结 3、练习 ①、练习一:改进判断一个数是否为一个质数 ②、练习二:自幂数 三、System 1、时间原点 2、常用方法 3、课堂练习 4、注意事项 5、小结 四、Runtime 1、常用方法 2、练习…

微服务项目【商品秒杀接口压测及优化】

生成测试用户 将UserUtils工具类导入到zmall-user模块中,运行生成测试用户信息,可根据自身电脑情况来生成用户数量。 UserUtils: package com.xujie.zmall.utils;import com.alibaba.nacos.common.utils.MD5Utils; import com.fasterxml.j…