文章目录

  • 集群
    • 集群角色
    • 选举
      • 服务器启动时期的选举
      • 服务器运行时期的选举
    • 集群的机器数量

集群

集群角色

通常在分布式系统中,构成一个集群的每一台机器都有自己的角色,最常见的集群模式就是Master/Slave模式(主从模式),在这种模式中,通常Maste服务器作为主服务器提供写服务,其他的Slave服务器从服务器通过异步复制的方式获取Master服务器最新的数据提供读服务。

但是ZooKeeper并没有沿用传统的主从模式,而是引入了LeaderFollowerObserver三种角色,如下图所示:

ZooKeeper集群中的三种角色

ZooKeeper集群中的所有机器通过一个Leader 选举过程来选定一台称为Leader的机器,Leader既可以为客户端提供写服务又能提供读服务。除了Leader外,FollowerObserver都只能提供读服务。Follower和Observer唯一的区别在于Observer机器不参与Leader的选举过程,也不参与写操作的“过半写成功”策略,因此Observer机器可以在不影响写性能的情况下提升集群的读性能。

集群中的角色

  • Leader:为客户端提供读和写的服务,负责投票的发起和决议,更新系统状态。
  • Follower:为客户端提供读服务,如果是写服务则转发给Leader。在选举过程中参与投票。
  • Observer:与Follower工作原理基本一致,唯一的区别是Observer不参与任何形式的投票。Observer主要用来在不影响写性能的情况下提升集群的读性能,是ZooKeeper3.3中新增的角色。

ZooKeeper用以下四种状态来表示各个节点

  • LOOKING:竞选状态。
  • LEADING:Leader状态。
  • FOLLOWING:Follower状态。
  • OBSERVING:Observer状态。

选举

Leader选举是ZooKeeper中最重要的技术之一,也是保证分布式数据一致性的关键所在。

当ZooKeeper集群中的一台服务器出现以下两种情况之一时,就会开始进入Leader选举

  • 服务器初始化启动
  • 服务器运行期间无法和Leader保持连接

在介绍选举之前,首先介绍三个重要参数

  • 服务器ID(myid):编号越大在选举算法中权重越大。
  • 事务ID(zxid):值越大说明数据越新,权重越大。
  • 逻辑时钟(epoch-logicalclock):同一轮投票过程中的逻辑时钟值是相同的,每投完一次值会增加。

服务器启动时期的选举

ZooKeeper集群初始化时,当满足以下两个条件时,就会开始进入Leader选举流程:

  • 集群规模至少为2台机器
  • 集群内的机器能够互相通信

选举流程图

如上图,选举流程如下:

  1. 每个服务器会发出一个投票:由于是初始化状态,每一个节点都会将自己作为Leader来进行投票,每次投票的内容包含:推举服务器的myid(在集群中的机器序号)和ZXID(事务ID),以(myid, ZXID)的形式表示。初始化阶段每个节点都会将票投给自己,然后将这个投票发给集群总其他所有机器。
  2. 接受来自各个服务器的投票:每个服务器都会接收来自其他服务器的投票,在接收投票后首先会判断该投票的有效性,如是否为本轮投票(逻辑时钟)、是否来自LOOING状态的服务器。
  3. 处理投票:在接收到来自其他服务器的投票后,针对每一个投票,服务器都需要将别人的投票和自己的投票进行PK,PK规则如下
    • 优先检查ZXID,ZXID较大的优先作为Leader。
    • 如果Leader相同则比较myid,myid较大的作为Leader。
  4. 统计投票:每次投票后,服务器都会统计所有投票,判断是否已经有过半的机器接收到相同的投票信息。当票数达到半数以上时,此时就认为已经选出了Leader。
  5. 改变服务器状态:一旦确认了Leader,则每个服务器开始改变自己的状态。如果是Follower则更改成FOLLOWING;如果是Observer则更改成OBSERVING;如果是Leader则更改成LEADING;

服务器运行时期的选举

在ZooKeeper集群正常运行中,一旦选出一个Leader,那么所有服务器的集群角色一般不会再发生变化——也就是说Leader服务器将一直作为集群的Leader,即使集群中有非Leader机器挂了或者是有机器加入集群也不会影响Leader。但是一旦Leader所在的机器挂掉,那么此时整个集群将暂时无法对外服务,马上进入新一轮的Leader选举。

服务器运行期间的Leader选举和启动时期的Leader选举基本是一致的,只增加了一个变更状态的步骤,流程如下:

  1. 变更状态:当Leader挂了之后,剩下的所有非Observer服务器都会将自己的服务器状态变更为LOOKING,然后开始进入Leader选举流程。
  2. 每个服务器会发出一个投票
  3. 接受来自各个服务器的投票
  4. 处理投票
  5. 统计投票
  6. 改变服务器状态

集群的机器数量

为什么ZooKeeper提倡集群的机器数量最好要做奇数台呢?

ZooKeeper 集群在宕掉几个 ZooKeeper 服务器之后,如果剩下的 ZooKeeper 服务器个数大于宕掉的个数的话整个 ZooKeeper 才依然可用。假如我们的集群中有 n 台 ZooKeeper 服务器,那么也就是剩下的服务数必须大于 n/2。先说一下结论,2n 和 2n-1 的容忍度是一样的,都是 n-1,大家可以先自己仔细想一想,这应该是一个很简单的数学问题了。 比如假如我们有 3 台,那么最大允许宕掉 1 台 ZooKeeper 服务器,如果我们有 4 台的的时候也同样只允许宕掉 1 台。 假如我们有 5 台,那么最大允许宕掉 2 台 ZooKeeper 服务器,如果我们有 6 台的的时候也同样只允许宕掉 2 台。

综上,何必增加那一个不必要的 ZooKeeper 呢?

ZooKeeper 集群:集群概念、选举流程、机器数量相关推荐

  1. Zookeeper源码分析:选举流程

    参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0 Zookeeper选举模式 针对zookeeper-3.0.0版本,选 ...

  2. zookeeper集群部署监控与选举同步流程等工作原理

    部署一个zookeeper集群,要多简单就能有多简单(下载压缩包,解压,修改配置文件zoo.cfg,执行启动脚本),但是想要真的把这套东西玩好了,还是需要费些功夫研究一番的.就跟自己搭建一个lnmp的 ...

  3. zookeeper专题:zookeeper集群模式下,leader选举流程分析

    文章目录 Zookeeper 集群模式一共有三种类型的角色 1. zookeeper启动时leader选举流程 1.1 加载配置文件,设置基本信息 1.2 指定快速选举算法,启动多级队列.线程 1.3 ...

  4. ZooKeeper场景实践:(6)集群监控和Master选举

    1. 集群机器监控 这通经常使用于那种对集群中机器状态,机器在线率有较高要求的场景,可以高速对集群中机器变化作出响应.这种场景中,往往有一个监控系统,实时检測集群机器是否存活. 利用ZooKeeper ...

  5. ElasticSearch探索之路(五)集群与分片:选举、动态更新、近实时搜索、事务日志、段合并

    文章目录 集群内部原理 集群与节点 分片 选举 分片内部原理 索引不变性 动态更新索引 近实时搜索 事务日志 段合并 集群内部原理 集群与节点 一个运行中的Elasticsearch实例称为一个节点, ...

  6. Kafka Without ZooKeeper ---- 不使用zookeeper的kafka集群

    不使用zookeeper的kafka集群 前言 ZooKeeper的缺点 Kakfa Without ZooKeeper简介 Kakfa Without ZooKeeper的优势 总结 参考链接 前言 ...

  7. zookeeper单机及集群部署,附安装包下载(二)

    zookeeper单机及集群部署,附安装包下载(二) 问题背景 zookeeper分布式技术基本概念(一) zookeeper单机及集群部署,附安装包下载(二) zookeeper客户端命令(三) 安 ...

  8. Zookeeper理解与集群搭建

    文章目录 前言 介绍 简介 Zookeeper持久化机制 Zookeeper特性 安装与部署 节点znode介绍 Zookeeper如何保存数据 znode节点信息 znode结构 znode类型 Z ...

  9. 基于zookeeper的solrCloud集群搭建

    转自:https://blog.csdn.net/yougoule/article/details/78445759  基于原文对实践遇到的问题稍作补充 1.安装及搭建相关环境 1.1环境准备 cen ...

最新文章

  1. 摄像头标定GML Camera Calibration
  2. Cassandra——类似levelDB的基于p2p架构的分布式NOSQL数据库
  3. 信息系统项目管理师教程章节重点考点汇总(1)绪论重点
  4. 【数据结构与算法】之深入解析“键盘行”的求解思路与算法示例
  5. linux那些事之page table
  6. 白噪音和粉红噪音煲机_白噪音信号的概念及基本理论
  7. 十分钟释疑Oracle中“小表超慢”之谜(SQL调优/SQL优化)
  8. python和java还有sql区别_人人都在学编程?Python,R,Java,SQL,你究竟需要学哪一种?...
  9. vue 中使用axios的总结
  10. 亚马逊的冷血文化:虽然备受争议,但颇具力量
  11. 儿童学python下哪个软件好_少儿学编程适合哪个软件
  12. 高级研发工程师都有哪些特点?快来看看你是否符合【超级准】
  13. 关于学期结束的一些题目的记录
  14. Sparse Local Patch Transformer for Robust Face Alignment and Landmarks Inherent Relation Learning
  15. 语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符)
  16. 崩坏2服务器维护,崩坏学园2(日服)无法连接服务器是什么原因
  17. ui设计移动端字体适配_移动端UI设计规范全方位汇总(附演示PPT下载)
  18. Linux 批量处理dos2unix
  19. uni-app 相机相册选择图片转base64
  20. 教你用 python 画圣诞树

热门文章

  1. 两个引用指向同一个数组的内存图
  2. 使用springaop技术面向切面编程
  3. 索引创建以及优化_1
  4. Bootstrap组件_下拉菜单
  5. matlab图片拼接变成白的,利用matlab实现对图片的拼接
  6. mongodb同时更新一条记录_MongoDB 存储和优化系列一
  7. _Linux 的文件系统及文件缓存知识点整理
  8. 计算机的好处英语,跪求一篇英语作文 题目:论计算机的优缺点
  9. MySQL存储过程和游标
  10. 为什么要接口管理软件???