Zookeeper 选举过程

问题

  1. 选举过程 服务器之间是怎么通信的?

    答:QuorumCnxManager使用TCP-socket实现选举过程中的连接通信

  2. Leader的选举过程在什么时候实现?

  3. Leader的选举过程是如何实现的?

  4. Zookeeper的角色都有哪些,且各自有什么作用

  5. 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实现服务器之间的通信
  1. QuorumConnectionReqThread::initiateConnection()->startConnection():QuorumCnxManager内部维护一个线程QuorumConnectionReqThread专门用于发送连接请求到服务器,线程其实调用外部方法initiateConnection()->startConnection()初始化连接,连接成功后,将服务器的sid从存储待处理连接的集合中移除;并启动相应的发/收消息的线程
  2. QuorumConnectionReceiverThread::receiveConnection()->handleConnection():如果服务器已经有其他连接,就将这个新接收的连接关闭
Zookeeper的角色
  1. Leader:
  2. Follower:实现Learner
  3. 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 选举过程的更多相关文章

  1. zookeeper的选举过程

    zookeeper的选举过程大致如下: zookeeper的选举过程,就是选出一个在n/2+1个节点中选出一个节点为主节点的过程.比如,当我们启动一个有5个节点的zookeeper集群的时候.首先启动 ...

  2. Zookeeper分布式过程协同技术 - 群首选举

    Zookeeper分布式过程协同技术 - 群首选举 群首概念 群首为集群中服务器选择出来的一个服务器,并被集群认可.设置群首目的在与对客户端所发起的状态变更请求进行排序,包括:create.setDa ...

  3. 【分布式】Zookeeper的Leader选举-选举过程介绍(经典的Paxos算法解析)

    一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...

  4. zookeeper选举原理

    zookeeper的领导者选举和原子广播   目录:     1.工作原理概述     2.Fast Leader选举算法(领导者选举)     3.Leader与Follower同步数据(原子广播) ...

  5. zookeeper选举代码分析

    本文将以zookeeper的3.4.6版本作为源码分析版本.主要的代码类包括QuorumPeerMain.QuorumPeer.FastLeaderElection.QuorumMaj等. 假设有a, ...

  6. 学习笔记:Zookeeper选举机制

    1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定master和slave 但是,zookeeper工作时,是有一个节点为leader,其他则为follower Leader ...

  7. zookeeper选举流程

    如何在zookeeper集群中选举出一个leader,zookeeper使用了三种算法,具体使用哪种算法,在配置文件中是可以配置的,对应的配置项是”electionAlg”,其中1对应的是Leader ...

  8. zookeeper 选举和同步

    节点状态: // org.apache.zookeeper.server.quorum.QuorumPeer.ServerState public enum ServerState { LOOKING ...

  9. zookeeper选举机制

    在上一篇文章中我们大致浏览了zookeeper的启动过程,并且提到在Zookeeper的启动过程中leader选举是非常重要而且最复杂的一个环节.那么什么是leader选举呢?zookeeper为什么 ...

随机推荐

  1. redis 学习(5)-- 列表类型

    redis 学习(5)-- 列表类型 列表特点 有序.可以重复.左右两边插入弹出 索引相关知识 索引从左往右,从0开始逐个增大 0 1 2 3 4 5 索引从右往左,从-1开始逐个减小 -6 -5 - ...

  2. (转)MQTT 入门介绍

    原文链接:https://blog.csdn.net/qq_2887... MQTT 入门介绍 一.简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测 ...

  3. Auto-increment 自动增长

    Auto-increment 会在新记录插入表中时生成一个唯一的数字. AUTO INCREMENT 字段 我们通常希望在每次插入新记录时,自动地创建主键字段的值. 我们可以在表中创建一个 auto- ...

  4. 103、Swarm如何管理存储数据?(Swarm10)

    参考https://www.cnblogs.com/CloudMan6/p/8000906.html   Service 的容器副本会 scale up/down ,会 failover,会在不同的主 ...

  5. java中怎么跳出两层for循环

    使用标号(使用标号跳出两层或者多层for循环): outterLoop: for (int i = 0; i < 9; i++){             for (int j = 0; j & ...

  6. LLVM 词典

    #LLVM 词典 ## 本文转自https://github.com/oxnz/clang-user-manual/blob/master/LLVM-Language-Reference-Manual ...

  7. Golang 方法接收者是值还是指针问题

    对于普通结构体作为接收者,值和指针并没有区别. (以下代码摘抄自Go In Action 中文版) type defaultMatcher struct{} // 方法声明为使用 defaultMat ...

  8. 牛客练习赛47 DongDong数颜色 (莫队算法)

    链接:https://ac.nowcoder.com/acm/contest/904/E 来源:牛客网 DongDong数颜色 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 5242 ...

  9. BZOJ 3876 统一下界上下界费用流

    //Mcmf LargeDumpling #include<iostream> #include<cstdio> #include<cstdlib> #includ ...

  10. java web 域对象

    四大域对象 pagecontext  表示的是当前页面的域对象Request表示的是请求域中的对象session  表示的是一次会话中的对象application表示的是在一次tc启动到一次关闭的时候 ...