栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

【一图流思维导图】 Zookeeper 启动流程 和 选举流程

【一图流思维导图】 Zookeeper 启动流程 和 选举流程

参考
Zookeeper原理篇-Zookeeper启动流程分析
zookeeper原理篇-Zookeeper选举过程分析

Zookeeper原理篇 启动流程分析 单机模式

预处理

创建服务实例之前需要的数据读取加载准备就绪

入口启动类 QuorumPeerMain

解析Zoo.cfg配置文件

创建 DatadirCleanupManager类实例

对历史记录文件进行清理
以及定时清理日志和快照的管理器

通过clientPort参数断是是单机还是集群

创建ZookeeperServer类实例

初始化

将Zookeeper中的相关服务管理类进行创建

创建一个ServerStats实例

收集统计信息

创建 数据存储管理器–FileTxnSnaplog类

据zookeeper.serverCnxnFactory参数来确定网络连接工厂类型

基于Netty基于jdk自身的Nio工厂

初始化一个Thread 主线程

初始化ServerCnxnFactory实例

端口其实已经对外开放
还无法对外处理请求

开始恢复Zookeeper的数据

构建会话管理器–SessionTracker

负责管理Session

初始化请求过滤链

责任链模式

三个请求处理器PrepRequestProessorSyncRequestProessorFinalRequestProessor

启动注册

服务器已经开始到就绪状态了

将对应的信息注册以后即可对外提供服务了

将JMX服务注册

完成单机启动流程

可以正常提供服务了

集群模式

预处理

同单机模式

初始化

创建并初始化ServerCnxnFactory

创建数据文件管理器FileTxnSnaplog

集群模式下

创建QuorumPeer实例

属于Zookeeper的托管者会不停的检测当前服务器实例的状态并且在需要选举的时候发起选举

创建内存数据库ZKDatabase实例

录会话记录以及DataTree和事物日志

QuorumPeer实例作为托管者

将核心组件信息注册上去

包括

ZKDatabaseFileTxnSnaplog服务器列表信息选举算法

恢复数据

启动ServerCnxnFactory中的主线程

运行run方法,开始执行服务器选举相关的操作

Leader选举

electionAlg属性,确定选举算法

LeaderElection 0

UDP协议实现

UDP版本的FastLeaderElection

1 UDP版本的 非授权模式2 UDP版本的 授权模式

TCP版本的FastLeaderElection

3 TCP协议实现的3.4只支持

选举初始化阶段

初始化一个选举的票据

根据自身服务器IDlastLoggedZxid当前服务器的epoch

开始注册JMX服务

QuorumPeer的状态应该是LOOKING

才会开始进行选举操作

一般是ZXID最大的机器成为Leader如果ZXID一样,SID越大的则成为Leader

Leader与Follower交互

当选举出Leader机器以后,其他的机器则会开始与Leader进行交互

Leader服务器需要确定集群的机器存活情况

zk创建LearnerCnxAcceptor实例负责处理所有的非Leader机器的连接请求

非Leader服务器在启动完毕后

会从选举的结果中找到集群的Leader,并且尝试进行连接

建立连接后 会将自己的信息发送给Leader

此过程的数据称之为LearnerInfo

当前服务器的SID最大的ZXID

Leader收到LearnerInfo消息后,epochofleader进行比较

直到半数以上

确定整个集群中的epoch值

Leader将该信息发送给所有的非Leader

此消息称之为LEADERINFO

Follower机器收到后

响应给Leader一个ack

Leader收到ack以后

开始与该Follower机器进行数据同步过程了

超过半数的Follower机器完成了和Leader之间的数据同步过程

已经可以提前启动对外提供服务

Leader与Follower启动

创建并且启动会话管理器初始化Zookeeper中的请求处理链开始注册JMX服务注册完毕后,整个集群的启动完成可以对外开始提供服务了 详细选举流程 zookeeper中存在三种服务器角色

Leader

Follower

Observer

作为一个监控协调者的作用不参与zookeeper对外提供服务以及选举 选举分两种

当整个zookeeper的集群启动后,进行的选举过程

在zookeeper运行期间

当出现Leader崩溃的过程时,zookeeper进行的选举操作 启动选举

基础

机器编号

配置文件李myid

当至少两台含有myid的机器启动后,开始进入进群选举

每个server发起一个投票

选票

server1 (1,0) (myid,ZXID)server2 (2,0)

接受到其他服务端实例发来的选票

服务处于Looking状态

校验处理选票的流程

选票信息进行pk比较

优先比较ZXID,ZXID不一样的时候

大的的为leader

两个选票的ZXID相同的话,那么就会比较myid

大的的为leader

依据上面规则

server1 (2,0)

server1会更新自己的选票为

server2 (2,0)

统计每一次选票

判断是否有过半的实例接受到了相同的选票信息

如果是单数的实例

达到(实例数 + 1) / 2 数量一样的选票的即可

同步服务端实例状态

每个服务实例都会更新自身的状态

Follower 变为 FOLLOWER状态Leader 变成LEADING状态 运行期间选举

如果是 Follower挂了或者是新机器实例加入集群中

也不会影响Leader

一旦Leader无法响应或者是宕机了,Zookeeper集群将无法对外进行服务

而是进行新一轮的Leader选举

更新自身状态

Follower实例状态 变成 LOOKING

一样的选举流程

XMind - Trial Version

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/745666.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号