消息队列之-----------------zookeeper机制

news2025/2/23 4:31:59

目录

一、ZooKeeper是什么

二、ZooKeeper的工作机制

三、ZooKeeper特点

四、ZooKeeper数据结构

五、ZooKeeper应用场景

5.1统一命名服务

5.2统一配置管理

5.3统一集群管理

5.4服务器动态上下线

5.5软负载均衡

六、ZooKeeper的选举机制

6.1第一次启动选举机制

6.2非第一次启动选举机制

七、zookeeper集群部署


一、ZooKeeper是什么

Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目

二、ZooKeeper的工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。也就是说

Zookeeper = 注册中心+文件系统 + 通知机制

工作机制

1、每个服务端上线时需要到zookeeper集群注册信息

2、客户端从zookeeper集群获取在线服务端信息列表并监听

3、服务端上线下线时,zookeeper需要更新列表信息并通知客户端

4、客户端接收到通知重新获取zookeeper在线服务器列表

三、ZooKeeper特点

(1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群
(2)Zookeeper集群中只要有半数以上节点存活,Zookeeper集群就能正常服务,所以Zookeeper适合安装奇数台服务器
(3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
(4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行,即先进先出。
(5)数据更新原子性,一次数据更新要么成功,要么失败。
(6)实时性,在一定时间范围内,Client能读到最新数据。

四、ZooKeeper数据结构

ZooKeeper数据模型的结构与Linux文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode。每一个ZNode默认能够存储1MB的数据,每个ZNode都可以通过其路径唯一标识。

五、ZooKeeper应用场景

提供的服务包括:

统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等

5.1统一命名服务

在分布式环境下,经常需要对应用/服务进行统一命名,便于识别。例如:IP不容易记住,而域名容易记住。

5.2统一配置管理

(1)分布式环境下,配置文件同步非常常见。一般要求一个集群中,所有节点的配置信息是一致的,比如Kafka集群。对配置文件修改后,希望能够快速同步到各个节点上。
(2)配置管理可交由ZooKeeper实现。可将配置信息写入ZooKeeper上的一个Znode。各个客户端服务器监听这个Znode。一旦Znode中的数据被修改,ZooKeeper将通知各个客户端服务器。

5.3统一集群管理

(1)分布式环境中,实时掌握每个节点的状态是必要的。可根据节点实时状态做出一些调整。
(2)ZooKeeper可以实现实时监控节点状态变化。可将节点信息写入ZooKeeper上的一个ZNode。监听这个ZNode可获取它的实时状态变化。

5.4服务器动态上下线

客户端能实时洞察到服务器上下线的变化

5.5软负载均衡

在Zookeeper中记录每台服务器的访问数,让访问数最少的服务器去处理最新的客户端请求(这边最小连接调度算法嘛)

六、ZooKeeper的选举机制

6.1第一次启动选举机制

(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上

(3票),选举无法完成,服务器1状态保持为LOOKING;

(2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1

发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2。此时服务器

1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING

(3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3

此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。

此时服务器3的票数已经超过半数,服务器3当选Leader。

服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;

(4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。

交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;

(5)服务器5启动,同4一样当小弟

比较服务器的myid大小,谁的myid越大则获取其他节点的选票,当选票数量超过服务器节点数量的半数以后,则当选leader,其他节点为follower。即使有新的更大myid节点加入集群,也不变,此时比票数

1.  
    1)服务器1启动后,发起一次选举。   
    2)服务器1投自己一票,此时服务器1只有一票,不够半数以上,选举无法完成    
    3)此时服务器1状态为Looking
------------------------------------------------
2.    
    1)服务器2启动,再发起一次选举。    
    2)服务器1和2分别投服务器2一票(服务器更改刚刚投自己的一票)    
    3)此时服务器1为0票;服务器2为2票,没有半数,选举不成功    
    4)此时,服务器1和2状态为Looking
------------------------------------

(为什么1会投2?:因为服务器2的id比服务器1大,所以服务器1会投服务器2)
------------------------------------------------------
3.     
    1)服务器3启动,发起选举。    
    2)服务器1和2会更改选票,投给服务器3    
    3)此时,服务器3为3票,以超过半数,服务器3当选为领导者    
    4)此时,服务器1和2状态为跟随者,服务器3为领导者
-------------------------------------------------------
4.     
    1)之后服务器启动,会发起选举    
    2)虽然后面的服务器myid都比服务器3大    
    3)但是此时服务器3已经是领导者了,服务器1,2,3不会更改选票信息了    
    4)之后的服务器都将是服务器3的跟随者

6.2非第一次启动选举机制

1.EPOCH大的直接胜出

2.EPOCH相同,事务id大的胜出

3.事务id相同,服务器id大的胜出

SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。(表示服务器的唯一标志id)

ZXID:事务ID。ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和ZooKeeper服务器对于客户端“更新请求”的处理逻辑速度有关。(表示处理任务的数量)

Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加(表示参与选举的次数)

七、zookeeper集群部署

Apache Download Mirrors

下载包

https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4.tar.gz

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

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

相关文章

怎么区分开关电源的PFM与PWM模式?

原文来自微信公众号:工程师看海,与我联系:chunhou0820 看海原创视频教程:《运放秘籍》 大家好,我是工程师看海。 DCDC开关电源有两种常见的工作模式,就是我们常听说的PWM模式和PFM模式,一种是普…

算法训练营第二十三天(二叉树完结)

算法训练营第二十三天(二叉树完结) 669. 修剪二叉搜索树 力扣题目链接(opens new window) 题目 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>L) 。你可能需要改…

2024年第十七届 认证杯 网络挑战赛 (A题)| 保暖纤维的保暖能力 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看认证杯 网络挑战赛 (A题)&#xff01…

两数相加(leetcode)

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …

基于Java的图书借阅网站, java+springboot+vue开发的图书借阅管理系统 - 毕业设计 - 课程设计

基于Java的图书借阅网站, javaspringbootvue开发的图书借阅管理系统 - 毕业设计 - 课程设计 文章目录 基于Java的图书借阅网站, javaspringbootvue开发的图书借阅管理系统 - 毕业设计 - 课程设计一、功能介绍二、代码结构三、部署运行1、后端运行步骤2、…

社会工程学——setoolkit的简单使用(克隆钓鱼网站)

Social Engineer Toolkit(SET)是一个开源的社会工程学攻击工具包,旨在模拟和执行多种社会工程学攻击,例如钓鱼、恶意软件传播和其他形式的社会工程学攻击。SET由David Kennedy(也被称为"ReL1K")开…

ubuntu20.04下搜狗输入法的安装

1、安装 fcitx 输入法的框架 sudo apt install fcitx-bin sudo apt-get install fcitx-table 2、Ubuntu下的默认浏览器火狐搜索 搜狗输入法 搜狗输入法linux-首页 (下载x86_64) 3、安装依赖 sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-modu…

取数游戏(dfs)

前言&#xff1a; 该题取自洛谷P1123&#xff0c;题主用的dfs&#xff08;深度优先搜索&#xff09; 题目描述&#xff1a; 数据范围&#xff1a; 思路&#xff1a; 思路见代码&#xff0c;注释的很清晰嗷 AC代码&#xff1a; #include <iostream> #include <alg…

【学习笔记】R语言入门与数据分析1

数据分析 数据分析的过程&#xff1a; 数据采集 数据存储 数据分析 数据挖掘 数据可视化 进行决策 数据挖掘 数据量大 复杂度高&#xff0c;容忍一定的误差限 追求相关性而非因果性 数据可视化 直观明了 R语言介绍 R是免费的&#xff08;开源软件、扩展性好&#xff09;…

PlanUML和Mermaid哪个好?

引言 在当今信息化快速发展的时代&#xff0c;数据可视化和图表工具不仅对于程序员&#xff0c;也对于非技术背景的人士至关重要。绘图工具可以帮助我们更好地理解和表达复杂的概念或数据流。PlantUML和Mermaid是两款被广泛使用的绘图语言&#xff0c;它们都能够通过简洁的文本…

4.11学习总结

一.IO流 一.java中IO的初步了解 (一).概念: Java中I/O操作主要是指使用Java进行输入&#xff0c;输出操作. Java所有的I/O机制都是基于数据流进行输入输出&#xff0c;这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据…

基于Python豆瓣电影数据可视化分析系统的设计与实现

大数据可视化项目——基于Python豆瓣电影数据可视化分析系统的设计与实现 2024年4月最新编写的新项目 项目介绍 本项目旨在通过对豆瓣电影数据进行综合分析与可视化展示&#xff0c;构建一个基于Python的大数据可视化系统。通过数据爬取收集、清洗、分析豆瓣电影数据&#xff…

【SpringBoot】SpringBoot项目快速搭建

本文将介绍Springboot项目的快速搭建 快速创建SpringBoot项目 打开IDEA在File->New->Project中新建项目 点击左侧的Spring Initializr 输入以下信息&#xff1a; Name 项目名称Group 根据公司域名来&#xff0c;或者默认com.example【倒序域名】Package Name 包名&am…

【java探索之旅】走进循环结构 深入解析while、for和do while的用法

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、循环结构1.1 while循环1.2 while代码示例1.3 break1.4 continue 二、for循环2.1 基…

蓝桥杯第十一届c++大学B组详解

目录 1.字符串排序 2.门牌制作 3.即约分数 4.蛇型填数 5.跑步锻炼 6.七段码 7.成绩统计 8.回文日期 9.字串分值和 10.平面切分 1.字符串排序 题目解析&#xff1a;这个题目真没搞懂。有会的大佬教我一下谢谢。 2.门牌制作 题目解析&#xff1a;出过超级多这类题目&am…

Java springboot+vue宠物爱心组织管理系统附赠万字文档

项目演示视频: &#xff08;有文档&#xff09;Java springboot宠物爱心组织管理系统 项目介绍: &#xff08;有文档&#xff09;Java springboot宠物爱心组织管理系统 技术&#xff1a; 基于springboot Vue 的宠物爱心组织管理系统&#xff08;宠物爱心组织管理系统&#xf…

12-pyspark的RDD算子注意事项总结

目录 相近算子异同总结相近变换算子异同foreach和foreachPartitionfold和reducecoalesce和repatition 相近动作算子异同cache和persist 算子注意事项需要注意的变换算子需要注意的动作算子 PySpark实战笔记系列第三篇 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第…

【记录】Prompt模板|作为甲方怎么清晰专业地描述自己的需求(又名“乙方,给你的甲方扔个GPT解放自己吧”)

这篇Prompt摘抄并修改自朋友送给我的书的第49页5.2.3让ChatGPT构建提示&#xff0c;质量挺不错&#xff0c;支持一下她的博客&#xff1a;【好书推荐2】AI提示工程实战&#xff1a;从零开始利用提示工程学习应用大语言模型。 书长这样&#xff1a; 不啰嗦了&#xff0c;正文如…

代码解读:使用Stable Diffusion完成相似图像生成任务

Diffusion models代码解读&#xff1a;入门与实战 前言&#xff1a;作为内容生产重要的一部分&#xff0c;生成相似图像是一项有意义的工作&#xff0c;例如很多内容创作分享平台单纯依赖用户贡献的图片已经不够了&#xff0c;最省力的方法就是利用已有的图片生成相似的图片作为…

vscode 之 win11前端环境安装(javascrip、html、nodejs以及插件推荐)

javascript 也可以用来编写一些小工具&#xff0c;包括但不限于浏览器的插件&#xff0c;浏览器的书签以及进行一些其他操作的小工具等。 这时候就需要进行安装前端相关的测试环境 1. nodejs &#xff08;1&#xff09;确保电脑存在 nodejs 的环境 在 cmd 输入 npm -v node -…