在zookeeper集群中,节点也有不同的角色,承担着不同角色。

zookeeper有三种角色:

  • 老大:Leader   (领导者)   : 客户端提供读服务和写服务。
  • 老二:Follower(跟随者)  : 为客户端提供读服务,参与Leader选举过程
  • 老三:Observer(观察者)  : 为客户端提供读服务,不参与Leader选举过程

其中:Follower 和 Observer 归类为 Learner(学习者)

集群管理图如下:

Leader


Leader在集群中只有一个节点,可以说是老大No.1,是zookeeper集群的中心,负责协调集群中的其他节点。从性能的角度考虑,leader可以选择不接受客户端的连接

所有的跟随者Follower与观察者Observer节点的写请求都会转交给领导者Leader执行。Leader接受到一个写请求后,首先会发送给所有的Follower,统计Follower写入成功的数量。当有超过半数的Follower写入成功后,Leader就会认为这个写请求提交成功,通知所有的Follower commit这个写操作,保证事后哪怕是集群崩溃恢复或者重启,这个写操作也不会丢失。

Leader的作用

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

其中:

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

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

Follower


Follow在集群中有多个,主要的作用有:

  • 与老大Leader保持心跳连接
  • 当Leader挂了的时候,经过投票后成为新的leader。leader的重新选举是由老二Follower们内部投票决定的。
  • 向Leader发送请求(PING请求、REQUEST消息、ACK请求、REVALIDATE消息)
  • 处理leader发来的消息与请求
  • 接收Client的请求,如果为写请求,发送给Leader进行投票;
  • 返回Client请求结果。

Follower的工作流程简图:

其中:

  • UPTODATE消息:表示同步完成;
  • REVALIDATE消息:根据Leader的REVALIDATE结果,关闭待revalidate的session还是允许其接受消息;
  • SYNC消息:返回SYNC结果到客户端,这个消息最初由客户端发起,用来强制得到最新的数据更新。

Observer


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

可以说Observer是zookeeper集群中最边缘的存在。Observer的主要作用是提高zookeeper集群的读性能。通过leader的介绍我们知道zookeeper的一个写操作是要经过半数以上的Follower确认才能够写成功的。那么当zookeeper集群中的节点越多时,zookeeper的写性能就 越差。为了在提高zookeeper读性能(也就是支持更多的客户端连接)的同时又不影响zookeeper的写性能,zookeeper集群多了一个儿子Observer,只负责:

  • 与leader同步数据
  • 不参与leader选举,没有投票权。也不参与写操作的提议过程。
  • 数据没有事务化到硬盘。即Observer只会把数据加载到内存。

参考资料


Zookeeper中的角色的更多相关文章

  1. 【3】Zookeeper中的角色

    一.Zookeeper角色的分类 领导者(leader) Leader服务器为客户端提供读服务和写服务. 学习者(learner) 跟随者(follower) Follower服务器为客户端提供读服务 ...

  2. zookeeper中Watcher和Notifications

    问题导读:1.zookeeper观察者什么时候调用?2.传统远程轮询服务存在什么问题?3.zk中回调服务的机制是什么?4.zk中watcher为什么不永久注册?5.什么是znode? 在阅读之前首先明 ...

  3. Apache ZooKeeper在Kafka中的角色 - 监控和配置

    1.目标 今天,我们将看到Zookeeper在Kafka中的角色.本文包含Kafka中需要ZooKeeper的原因.我们可以说,ZooKeeper是Apache Kafka不可分割的一部分.在了解Zo ...

  4. 【分布式】Zookeeper的服务器角色

    一.前言 前一篇已经详细的讲解了Zookeeper的Leader选举过程,下面接着学习Zookeeper中服务器的各个角色及其细节. 二.服务器角色 2.1 Leader Leader服务器是Zook ...

  5. Zookeeper中Session Timeout的那些事

    前言: RDS系统致力于MySQL数据的高可用,高可靠,高性能以及在线扩展功能,实现这些特性的主要逻辑功能都运行在管理服务器上,一旦管理服务器宕机,数据库的在线扩展功能/备份功能/故障恢复功能等都无从 ...

  6. zookeeper中的分布式一致性协议

    1. zookeeper中的一致性协议-ZAB协议 在深入了解ZK之前,相信很多同学都会认为ZK就是Paxos算法的一个实现.但事实上,ZK并没有完全采用Paxos算法,而是使用了一种称为ZooKee ...

  7. Zookeeper中的watcher监听和leader选举机制

    watcher监听 什么是watcher接口 同一个事件类型在不同的通知状态中代表的含义有所不同,下图列举了常见的通知状态和事件类型. Watcher通知状态与事件类型一览 上图列举了ZooKeepe ...

  8. Zookeeper中的Leader选取机制

    一.Zookeeper是什么? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应 ...

  9. 面试官:说一说Zookeeper中Leader选举机制

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天又是一个阳光明媚的一天,我又 ...

  10. Twitter Storm源代码分析之ZooKeeper中的目录结构

    徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构 我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeepe ...

随机推荐

  1. verilog之wire和reg

    verilog之wire和reg 1.区别 wire为线,reg为寄存器.至少初期这两个名词的意思是这样的.wire在电路设计中指代的就是某个点的逻辑值,而reg则指代某个寄存器输出的逻辑值.这个理解 ...

  2. KingbaseES Json 系列一:Json构造函数

    KingbaseES Json 系列一--Json构造函数(JSON,ROW_TO_JSON,TO_JSON,TO_JSONB) JSON 数据类型是用来存储 JSON(JavaScript Obje ...

  3. PicGo图床配置码云gitee仓库上传typora图片

    (前提是已注册gitee并新建一个仓库作为你上传图片的位置) 首先在PicGo官网下载软件:https://picgo.github.io/PicGo-Doc/zh/ 打开typora,找到偏好设置. ...

  4. 华为3D建模服务(3D Modeling Kit),轻松构建高质量3D模型

    华为3D建模服务(3D Modeling Kit)是华为在图形图像领域又一技术开放,面向有3D模型.动画制作等能力诉求的应用开发者,基于AI技术,提供3D物体模型自动生成和PBR材质生成功能,实现3D ...

  5. Qt Create开发,修改 .Pro 文件改变 exe 的名称

    // .pro // 修改 TARGET 就可以改变生成的exe的名称 TARGET = Test // 要是生成的exe名称中需要带有空格,需要用到$$quote TARGET = $$quote( ...

  6. openGauss数据库源码学习-指标采集、预测与异常检测

    opengauss 源码解析 指标采集.预测与异常检测 代码位置:/gausskernel/dbmind/tools/anomaly_detection 各模组在整体结构上的组合在摩天轮论坛上官方解析 ...

  7. mysql 必知必会整理—安全管理[十七]

    前言 简单介绍一下安全管理. 正文 MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少. 换句话说,用户不能对过多的数据具有过多的访问权. 多数用户只需要对表进行 ...

  8. redis 简单整理——复制的原理[二十三]

    前言 简单介绍一下复制的原理. 正文 在从节点执行slaveof命令后,复制过程便开始运作,下面详细介绍建立 复制的完整流程. 1)保存主节点(master)信息. 执行slaveof后从节点只保存主 ...

  9. 论文记载: Deep Reinforcement Learning for Traffic LightControl in Vehicular Networks

    强化学习论文记载 论文名: Deep Reinforcement Learning for Traffic LightControl in Vehicular Networks ( 车辆网络交通信号灯 ...

  10. LeetCode - 最接近的三数之和

    最接近的三数之和 你一个长度为 n 的整数数组 nums 和 一个目标值 target.请你从 nums 中选出三个整数,使它们的和与 target 最接近. 返回这三个数的和. 假定每组输入只存在恰 ...