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. 自动化测试: Selenium 自动登录授权,再 Requests 请求内容

    Selenium 自动登录网站.截图及 Requests 抓取登录后的网页内容.一起了解下吧. Selenium: 支持 Web 浏览器自动化的一系列工具和库的综合项目. Requests: 唯一的一 ...

  2. vc程序设计-----位图

    // resource_study.cpp : 定义应用程序的入口点. // #include "framework.h" #include "resource_stud ...

  3. Redis 单节点百万级别数据 读取 性能测试.

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 这里先进行造数据,向redis中写入五百万条数据,具体方式有如下三种: 方法一:(Lua 脚本) vim ...

  4. Java实现 LeetCode 764 最大加号标志(暴力递推)

    764. 最大加号标志 在一个大小在 (0, 0) 到 (N-1, N-1) 的2D网格 grid 中,除了在 mines 中给出的单元为 0,其他每个单元都是 1.网格中包含 1 的最大的轴对齐加号 ...

  5. Java实现 LeetCode 404 左叶子之和

    404. 左叶子之和 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 /** * Definiti ...

  6. Java实现蓝桥杯模拟约数的个数

    问题描述 1200000有多少个约数(只计算正约数). 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分. pac ...

  7. 第五届蓝桥杯JavaC组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 小明带两个妹妹参加元宵灯会.别人问她们多大了,她们调皮地说:"我们俩的年龄之积是年龄之和的6倍" ...

  8. Android studio环境配置(运行报错)

    报错的种类有很多,下面的方法能解决大多数: 所有路径不能用中文,不能有空格,逗号句号也不能用中文,项目文件路径也不行 首先要配置Java环境,这个就不多说了, 这里有以下JAVA_HOME的配置,下图 ...

  9. Java GUI 鼠标事件

    import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.Mou ...

  10. Java实现第十届蓝桥杯数列求值

    试题 C: 数列求值 本题总分:10 分 [问题描述] 给定数列 1, 1, 1, 3, 5, 9, 17, -,从第 4 项开始,每项都是前 3 项的和.求 第 20190324 项的最后 4 位数 ...