博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【3】Zookeeper中的角色
阅读量:5147 次
发布时间:2019-06-13

本文共 1521 字,大约阅读时间需要 5 分钟。

一、Zookeeper角色的分类

  1. 领导者(leader)

    Leader服务器为客户端提供读服务和写服务。

  2. 学习者(learner)
    • 跟随者(follower)
      Follower服务器为客户端提供读服务,参与Leader选举过程,参与写操作“过半写成功”策略。
    • 观察者(observer)
      Observer服务器为客户端提供读服务,不参与Leader选举过程,不参与写操作“过半写成功”策略。用于在不影响写性能的前提下提升集群的读性能。
  3. 客户端(client)

    服务请求发起方。

Zookeeper集群管理图:

1659331-20190616232050108-421353614.png

二、Zookeeper角色的状态

  1. LOOKING:
       当前Server未知集群中的Leader,并且正在寻找。
  2. LEADING:
       当前Server即为选举出来的Leader。
  3. FOLLOWING:
       当前Follower已与选举出来的Leader同步。
  4. OBSERVING
      当前Observer已与选举出来的Leader同步。

三、Zookeeper各角色的作用

3.1、Zookeeper中的请求

  • 事务请求:
     在Zookeeper中,会改变服务器状态的请求称为事务请求(包括:创建节点、更新数据、删除节点、创建会话等) 。
  • 非事务请求
     从Zookeeper仅仅读取数据,不会对服务器数据状态进行任何修改的请求称为非事务请求。

3.2、Leader的作用

  1. 在ZAB崩溃恢复之后,消息广播之前,进行集群中的数据同步;
  2. 维持与Learner的心跳,接收Learner请求消息,并据不同的消息类型,进行不同的处理;
  3. Learner处理的消息类型包括:PING消息、REQUEST消息、ACK消息、REVALIDATE消息等。

  其中,PING消息指Learner的心跳信息;REQUEST消息是Follower发送的提议信息,包括写请求及同步请求;ACK消息是Follower的对提议的回复,超过半数的Follower通过,则commit该提议;REVALIDATE消息是用来延长SESSION有效时间。

Leader的工作流程简图如下所示,实际上流程要比下图复杂得多,启动了三个线程来实现功能:
1659331-20190622155321381-1272244654.png

3.3、Follower的作用

Follower主要有四个功能:

  1. 向Leader发送请求(PING请求、REQUEST消息、ACK请求、REVALIDATE消息);
  2. 接收Leader 的消息并进行处理;
  3. 接收Client的请求,如果为写请求,发送给Leader进行投票;
  4. 返回Client请求结果。

Follower的消息循环处理以下来自Leader的消息:

  1. PING消息:心跳消息;
  2. PROPOSAL消息:Leader发起的提案,要求Follower投票;
  3. COMMIT消息:服务器端最新一提案的信息;
  4. UPTODATE消息:表示同步完成;
  5. REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;
  6. SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的数据更新。
    1659331-20190622155414596-2053907802.png

3.3、Observer的作用

  Observer角色除了不参与Leader选举和Proposal投票外,与Follower的作用相同。

四、参考资料

参考书籍:

参考博客:

作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/DeepInThought/p/11061550.html

你可能感兴趣的文章
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
VMware环境和Window环境进行网络连接的问题
查看>>
macOS10.12允许所有来源设置
查看>>
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>
python搜索引擎(转)
查看>>
关于height,line-height导致的样式混乱的问题
查看>>
《SEO实战密码》读后一点感受
查看>>
bzoj 4815 [Cqoi2017]小Q的表格——反演+分块
查看>>
Swift 入门之简单语法(六)
查看>>
shim和polyfill有什么区别
查看>>
Failed to load the JNI shared library “E:/2000/Java/JDK6/bin/..jre/bin/client/jvm.dll
查看>>
〖Python〗-- IO多路复用
查看>>
栈(括号匹配)
查看>>
Java学习 · 初识 面向对象深入一
查看>>
源代码如何管理
查看>>
vue怎么将一个组件引入另一个组件?
查看>>
bzoj1040: [ZJOI2008]骑士
查看>>
LeetCode 74. Search a 2D Matrix(搜索二维矩阵)
查看>>
利用SignalR来同步更新Winfrom
查看>>