Zookeeper 选举过程
Zookeeper 选举过程
问题
选举过程 服务器之间是怎么通信的?
答:QuorumCnxManager使用TCP-socket实现选举过程中的连接通信
Leader的选举过程在什么时候实现?
Leader的选举过程是如何实现的?
Zookeeper的角色都有哪些,且各自有什么作用
Zookeeper集群为什么需要奇数个服务器
组件
Election
实现选举过程必须实现的接口
public interface Election {
//开启新一轮的选举:当服务器状态改为looking时,
public Vote lookForLeader() throws InterruptedException;
public void shutdown();
}
QuorumCnxManager
服务器之间的连接管理器,对每对服务器都维护一个连接
FastLeaderElection
Election的一个实现
Notification:通知包含其他服务器它改变了自己的投票
ToSend:消息包装类,向其他服务器发送通知(notification/ack)
Messenger:消息处理类,内部维护两个线程,发送/接受并处理
public class FastLeaderElection implements Election {
//参与选举的服务器的托管者
QuorumPeer self;
Messenger messenger;
//发送消息的存储队列:由Messenger中的WorkerSend发送
LinkedBlockingQueue<ToSend> sendqueue;
//从其他服务器接收到的通知的存储队列:由Messenger的WorkerRecv接收
LinkedBlockingQueue<Notification> recvqueue;
//开启消息管理器:开启接收和发送线程
public void start() {
this.messenger.start();
}
//开启新一轮的选举
public Vote lookForLeader() throws InterruptedException {
//1. 向其他服务器发送投票消息
//2. 循环接收其他服务器的通知:在没有选举成功前且服务器仍在运行
//3. 处理投票:先判断是不是同一轮选举
//LOOKING:比较ZXID和myid,ZXID越大越优先,如果相同,比较myid
//4. 统计投票:判断是否已经有过半机器接受到相同的投票信息,那么就认为选出了leader
//5. 更改服务器状态:当确定leader时 相应服务器更改状态
}
}
实现
QuorumCnxManager实现服务器之间的通信
- QuorumConnectionReqThread::initiateConnection()->startConnection():QuorumCnxManager内部维护一个线程QuorumConnectionReqThread专门用于发送连接请求到服务器,线程其实调用外部方法initiateConnection()->startConnection()初始化连接,连接成功后,将服务器的sid从存储待处理连接的集合中移除;并启动相应的发/收消息的线程
- QuorumConnectionReceiverThread::receiveConnection()->handleConnection():如果服务器已经有其他连接,就将这个新接收的连接关闭
Zookeeper的角色
- Leader:
- Follower:实现Learner
- Observer:实现Learner
https://blog.csdn.net/tanga842428/article/details/52247756
https://blog.csdn.net/qq_21178933/article/details/82841679
https://blog.csdn.net/panxj856856/article/details/80403487
https://www.cnblogs.com/leesf456/p/6139266.html
Zookeeper 选举过程的更多相关文章
- zookeeper的选举过程
zookeeper的选举过程大致如下: zookeeper的选举过程,就是选出一个在n/2+1个节点中选出一个节点为主节点的过程.比如,当我们启动一个有5个节点的zookeeper集群的时候.首先启动 ...
- Zookeeper分布式过程协同技术 - 群首选举
Zookeeper分布式过程协同技术 - 群首选举 群首概念 群首为集群中服务器选择出来的一个服务器,并被集群认可.设置群首目的在与对客户端所发起的状态变更请求进行排序,包括:create.setDa ...
- 【分布式】Zookeeper的Leader选举-选举过程介绍(经典的Paxos算法解析)
一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...
- zookeeper选举原理
zookeeper的领导者选举和原子广播 目录: 1.工作原理概述 2.Fast Leader选举算法(领导者选举) 3.Leader与Follower同步数据(原子广播) ...
- zookeeper选举代码分析
本文将以zookeeper的3.4.6版本作为源码分析版本.主要的代码类包括QuorumPeerMain.QuorumPeer.FastLeaderElection.QuorumMaj等. 假设有a, ...
- 学习笔记:Zookeeper选举机制
1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave 但是,zookeeper工作时,是有一个节点为leader,其他则为follower Leader ...
- zookeeper选举流程
如何在zookeeper集群中选举出一个leader,zookeeper使用了三种算法,具体使用哪种算法,在配置文件中是可以配置的,对应的配置项是”electionAlg”,其中1对应的是Leader ...
- zookeeper 选举和同步
节点状态: // org.apache.zookeeper.server.quorum.QuorumPeer.ServerState public enum ServerState { LOOKING ...
- zookeeper选举机制
在上一篇文章中我们大致浏览了zookeeper的启动过程,并且提到在Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节.那么什么是leader选举呢?zookeeper为什么 ...
随机推荐
- FluentValidation在C# WPF中的应用
原文:FluentValidation在C# WPF中的应用 一.简介 介绍FluentValidation的文章不少,零度编程的介绍我引用下:FluentValidation 是一个基于 .NET ...
- python 运算符与流程控制
运算符与流程控制 运算符 赋值运算 用'='表示,'='的左边只能是变量 算术运算 +.-.*:加.减.乘 /:除法运算,运算结果为浮点数 //:除法运算,运算结果为整数(商) %:求余 **:求幂 ...
- 无法连接asp.net development server
我的电脑重装了,在此之前,是可以进行调试的.并且将该解决方案拷到其他机器上能正常打开.并且正常调试.今天刚打开项目调试就提示“无法连接asp.net development server”,后来发现是 ...
- CentOS 7系统时间与实际时间差8个小时
1.查看系统时间: [root@localhost sysconfig]# timedatectl Local time: 一 2017-11-06 21:13:19 CST Universal ti ...
- 使用pagehelper分页工具page警告问题
警告: Hessian/Burlap: 'com.github.pagehelper.Page' is an unknown class in WebappClassLoader java.lang. ...
- centos 7 搭建 LNMP ( Linux+Nginx+MySQL+PHP )
操作系统 | CentOS Linux release 7.6.1810 (Core) [root@localhost ~# cat /etc/redhat-release CentOS Linux ...
- kernel module insmod错误
kernel模块配置 Enable loadable module support 打开可加载模块支持,如果打开它则必须通过"make modules_install"把内核模块安 ...
- CentOS 7 安装 gcc 4.1.2
CentOS 7 安装 gcc 4.1.2 0. 参考 在centOS7.2上编译gcc4.1.2 1. 安装了编译所需 yum groupinstall "Development Tool ...
- zabbix 添加 host item
Zabbix常用术语 host(主机):监控的网络设备,可由IP或DNS名称指定. host Group(主机组):Host的逻辑容器,可以包含主机和模板. Item(监控项):一个特定监控指标的相关 ...
- Foo, Bar的含义
有些朋友问:foo, bar是什么意思, 为什么C++书籍中老见到这个词.我google了一下, 发现没有很好的中文答案.这个问题,在维基百科上有很好的回答.在这里翻译给大家. 译文: 术语fooba ...