一、工作流

一旦ZooKeeper集合启动,它将等待客户端连接。客户端将连接到ZooKeeper集合中的一个节点。它可以是leader或follower节点。一旦客户端被连接,节点将向特定客户端分配会话ID并向该客户端发送确认。如果客户端没有收到确认,它将尝试连接ZooKeeper集合中的另一个节点。 一旦连接到节点,客户端将以有规律的间隔向节点发送心跳,以确保连接不会丢失。

  • 如果客户端想要读取特定的znode,它将会向具有znode路径的节点发送读取请求,并且节点通过从其自己的数据库获取来返回所请求的znode。为此,在ZooKeeper集合中读取速度很快。
  • 如果客户端想要将数据存储在ZooKeeper集合中,则会将znode路径和数据发送到服务器。连接的服务器将该请求转发给leader,然后leader将向所有的follower重新发出写入请求。如果只有大部分节点成功响应,而写入请求成功,则成功返回代码将被发送到客户端。 否则,写入请求失败。绝大多数节点被称为 Quorum 

让我们分析在ZooKeeper集合中拥有不同数量的节点的效果。

  • 如果我们有单个节点,则当该节点故障时,ZooKeeper集合将故障。它有助于“单点故障",不建议在生产环境中使用。

  • 如果我们有两个节点而一个节点故障,我们没有占多数,因为两个中的一个不是多数。

  • 如果我们有三个节点而一个节点故障,那么我们有大多数,因此,这是最低要求。ZooKeeper集合在实际生产环境中必须至少有三个节点。

  • 如果我们有四个节点而两个节点故障,它将再次故障。类似于有三个节点,额外节点不用于任何目的,因此,最好添加奇数的节点,例如3,5,7。

二、leader选举

让我们分析如何在ZooKeeper集合中选举leader节点。考虑一个集群中有N个节点。leader选举的过程如下:

  • 所有节点创建具有相同路径 /app/leader_election/guid_ 的顺序、临时节点。
  • ZooKeeper集合将附加10位序列号到路径,创建的znode将是 /app/leader_election/guid_0000000001,/app/leader_election/guid_0000000002等。
  • 对于给定的实例,在znode中创建最小数字的节点成为leader,而所有其他节点是follower。
  • 每个follower节点监视下一个具有最小数字的znode。例如,创建znode/app/leader_election/guid_0000000008的节点将监视znode/app/leader_election/guid_0000000007,创建znode/app/leader_election/guid_0000000007的节点将监视znode/app/leader_election/guid_0000000006。
  • 如果leader关闭,则其相应的znode/app/leader_electionN会被删除。
  • 下一个在线follower节点将通过监视器获得关于leader移除的通知。
  • 下一个在线follower节点将检查是否存在其他具有最小数字的znode。如果没有,那么它将承担leader的角色。否则,它找到的创建具有最小数字的znode的节点将作为leader。
  • 类似地,所有其他follower节点选举创建具有最小数字的znode的节点作为leader。

最新文章

  1. Android错误:W/ResourceType(2411): No package identifier when getting value for resource number 0x
  2. 【C51】UART串口通信
  3. 解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位
  4. java 15-2 Collection的高级功能测试
  5. Day08_面向对象第三天
  6. 网络上下载的Ghost系统含威胁
  7. php截取字符串的实例代码(支持utf-8)
  8. 什么是php命名空间
  9. 【重点--web前端面试题总结】
  10. [HAOI2008]糖果传递
  11. 视频压缩:I帧、P帧、B帧
  12. hihocoder编程练习赛75
  13. BZOJ3565 : [SHOI2014]超能粒子炮
  14. Solr全文检索框架
  15. C#异步编程の-------异步编程模型(APM)
  16. centos6.5环境使用RPM包离线安装MariaDB 10.0.20
  17. char/unsigned char/int/short 存储范围
  18. DP Big Event in HDU
  19. docker之容器管理
  20. 01 Oracle分区索引

热门文章

  1. jQuery中对象的构建
  2. 0-1分布(伯努利分布)、n 重伯努利分布(二项分布)
  3. expdp&impdp
  4. 手把手教你安装QT集成开发环境(操作系统为ubuntu10.04,需要先安装build-essential和libncurses5-dev)
  5. 扪心自问,强大的UI框架,给我们带来了什么?(作者因此写了一个GuiLite)
  6. WPF中的3D Wireframe
  7. Robot Framework 快速入门_中文版
  8. Qt程序调试之Q_ASSERT断言(条件为真则跳过,否则直接异常+崩溃)
  9. python 教程 第二十一章、 扩展Python
  10. wpf实现两头渐窄的线条效果