微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Zookeeper中的角色

在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挂了的时候,经过投票后成为新的leaderleader的重新选举是由老二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只会把数据加载到内存。

 

参考资料


 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐