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

群首概念

群首为集群中服务器选择出来的一个服务器,并被集群认可。设置群首目的在与对客户端所发起的状态变更请求进行排序,包括:create、setData、delete操作。群首将每一个请求转换为一个事务并将事务发送给追随者,确保集群按照群首确定的顺序接受并处理这些事务。

Zookeeper事务

Zookeeper服务器会在本地处理只读请求(例如:exists、getData、getChildren)。如果一台服务器接收到客户端的getData请求,服务器读取该状态信息,并将这些信息返回客户端。由于服务器在本地处理读请求,所以在处理以只读请求为主要负载时,性能会比较高。

那些会改变状态的客户端请求(create、delete、setData)将会被转发给群首,由群首执行相应的请求,完成状态的更新,这就是Zookeeper的事务。

选举过程

每个服务器启动后进入LOOKING状态,服务器之间进行通信来选举一个群首,通过信息交换对群首选举达成共识。在本次选举中胜出的服务器将进入LEADING状态,而集群中其他服务器将进入FOLLOWING状态。

群首选举消息(leader election notifications)或简单的称为通知。当一个服务器进入LOOKING状态就会向集群中的每一个服务器发送一个通知消息。消息中包含该服务器的投票信息。

投票信息包含服务器标识符(sid)和最近执行的事务的zxid信息,例如投票信息(1,5)代表机器ID为1,最近执行的事务zxid为5。

zxid为一个long型(64位)整数,分为2部分:时间戳部分和计数器部分,每个部分为32位。

当一个服务器收到一个投票信息,该服务器将会根据以下规则修改自己的投票信息:

  1. 将接受的voteId和voteZxid作为一个标识符,并获取接收方当前的投票中的zxid,用myZxid和mySid表示接收方服务器自己的值。
  2. 如果(voteZxid > myZxid)或者(voteZxid = myZxid 且 voteId > mySid),保留当前的投票信息。
  3. 否则,修改自己的投票信息,将voteZxid赋值给myZxid,将voteId赋值给mySid。

当一个服务器收到的仲裁数量的服务器发来的投票信息都一样时,就表示群首选举成功,如果被选举的群首为某个服务器自己,该服务器将会开始行使群首角色,否则就会成为一个追随者并尝试连接被选举的群首服务器。一旦连接成功,追随者和群首之间将会进行状态同步,在同步完成后,追随者才可以处理新的请求。

通过例子来演示选举过程,三台服务器在分别发送出不同的选举投票信息,其投票值包含服务器的标识符和最新的zxid。每个服务器都会收到另外两个服务器发送的投票信息,在第一轮之后,服务器S2和S3将会改变其投票信息为(1,6),之后服务器S2和S3在改变投票信息之后会发送新的通知消息,S1服务器在接收到仲裁数量的通知消息拥有一样的投票信息,最后S1被选举出为集群的群首。

Zookeeper分布式过程协同技术 - 群首选举的更多相关文章

  1. Zookeeper分布式过程协同技术 - 部署及设置

    Zookeeper分布式过程协同技术 -  部署及设置 Zookeeper支持单机模式.伪集群模式.集群模式三种部署方式.演示部署环境为CentOS.jdk版本为1.8.Zookeeper版本为3.4 ...

  2. Zookeeper分布式过程协同技术 - 概念及基础

    Zookeeper分布式过程协同技术 - 概念及基础 Zookeeper是什么? Zookeeper是一种分布式过程协同技术,其所提供的客户端API功能强大,其中包括: 保障强一致性.有序性和持久性. ...

  3. ZooKeeper分布式过程协同技术详解1——ZooKeeper的概念和基础

    简介 分布式系统和应用,不仅能提供更强的计算能力,还能为我们提供更好的容灾性和扩展性. ZooKeeper是Google的Chubby项目的开源实现,它曾经作为Hadoop的子项目,在大数据领域得到广 ...

  4. ZooKeeper分布式过程协同技术详解2——了解ZooKeeper

    这个服务如何实现这些协作方面的原语? ZooKeeper基础

  5. 搞懂分布式技术5:Zookeeper的配置与集群管理实战

    搞懂分布式技术5:Zookeeper的配置与集群管理实战 4.1 配置文件 ZooKeeper安装好之后,在安装目录的conf文件夹下可以找到一个名为“zoo_sample.cfg”的文件,是ZooK ...

  6. Zookeeper——分布式一致性协议及Zookeeper Leader选举原理

    文章目录 一.引言 二.从ACID到CAP/BASE 三.分布式一致性协议 1. 2PC和3PC 2PC 发起事务请求 事务提交/回滚 3PC canCommit preCommit doCommit ...

  7. 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

    最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...

  8. 分布式服务协调技术zookeeper笔记

    本文主要学习ZooKeeper的体系结构.节点类型.节点监听.常用命令等基础知识,最后还学习了ZooKeeper的高可用集群的搭建与测试.希望能给想快速掌握ZooKeeper的同学有所帮助. ZooK ...

  9. Zookeeper分布式集群搭建

    实验条件:3台安装linux的机子,配置好Java环境. 步骤1:下载并分别解包到每台机子的/home/iHge2k目录下,附上下载地址:http://mirrors.cnnic.cn/apache/ ...

随机推荐

  1. 通过jquery实现tab切换

    //css代码 *{ margin: 0; padding: 0; } #box{ margin: 0 auto; width: 800px; border: 5px solid #000000; o ...

  2. Java实现 蓝桥杯 算法训练 第五次作业:字符串排序

    试题 算法训练 第五次作业:字符串排序 问题描述 输入一个小写字符串,按从小到大的顺序输出. 输入格式 bcaed 输出格式 abcde 顶格输出,中间没有空格 样例输入 一个满足题目要求的输入范例. ...

  3. Java实现 LeetCode 500 键盘行

    500. 键盘行 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词.键盘如下图所示. 示例: 输入: ["Hello", "Alaska", & ...

  4. Java实现 蓝桥杯VIP 算法训练 字符串编辑

    算法训练 字符串编辑 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个字符串(长度<=40个字符),并以字符 '.' 结束.编辑功能有: 1 D:删除一个字符,命令的方式为 ...

  5. Java实现 蓝桥杯VIP 算法提高 淘淘的名单

    算法提高 淘淘的名单 时间限制:100ms 内存限制:8.0MB 问题描述 by ZBY- ? 淘淘拿到了一份名单,他想对上面的名字进行处理,挑出一些特殊的名字,他请你来帮忙. 淘淘关注以下名字: 如 ...

  6. Java实现蓝桥杯历届真题国王的遗产

    国王的遗产 题目描述 X国是个小国.国王K有6个儿子.在临终前,K国王立下遗嘱:国王的一批牛作为遗产要分给他的6个儿子. 其中,大儿子分1/4,二儿子1/5,三儿子1/6,- 直到小儿子分1/9. 牛 ...

  7. java实现平面4点最小距离

    已知平面上若干个点的坐标. 需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数). 比如有4个点:a,b,c,d, 则平均距离是指:ab, ac, ad, bc, bd, cd ...

  8. java实现第三届蓝桥杯排日程

    排日程 [编程题](满分34分) 某保密单位机要人员 A,B,C,D,E 每周需要工作5天,休息2天. 上级要求每个人每周的工作日和休息日安排必须是固定的,不能在周间变更. 此外,由于工作需要,还有如 ...

  9. 流程图(HTML5拖拽)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. input常用限制

    1.自动过滤空格 onkeyup="this.value=this.value.replace(/^ +| +$/g,'')" onafterpaste="this.va ...