三分钟明白zookeeper集群中的三种角色Leader、Follower和observer

像Mysql的主从模式会分master主节点和slave从节点一样,在zookeeper集群中,节点也有不同的角色,承担着不同角色。

zookeeper有三种角色:老大Leader(领导者)   2、老二Follower (跟随者) 3、老三Observer(观察者)。其中,Follower和Observer归类为Learner(学习者)

按重要性排序是Leader > Follower > Observer

老大领导者Leader。

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

主要作用有:

1、发起与提交写请求。

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

2、与learner保持心跳

3、崩溃恢复时负责恢复数据以及同步数据到Learner

 

老二跟随者Follower。

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

1、与老大Leader保持心跳连接

2、当Leader挂了的时候,经过投票后成为新的leader。leader的重新选举是由老二Follower们内部投票决定的。

3、向leader发送消息与请求

4、处理leader发来的消息与请求

 

老三观察者Observer

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

1、与leader同步数据

2、不参与leader选举,没有投票权。也不参与写操作的提议过程。

3、数据没有事务化到硬盘。即Observer只会把数据加载到内存。

 

下图是zookeeper官方文档中不同节点的zookeeper集群的性能表现(节点角色只有leader和follower):

ZooKeeper Throughput as the Read-Write Ratio Varies

竖轴是每秒请求量,横轴是读请求的占比,不同颜色的曲线代表了不同数量的zookeeper节点,分别是3个节点,5个节点,7个节点,9个节点,13个节点。

可以看到,随着读请求所占的比例越来越多,zookeeper所能处理的请求数量是指数级得提升。除了三个节点的zookeeper集群外,当读请求占比达到100%时,从曲线上看其他数量的集群能够处理的请求几乎无穷大。

当读请求达到80%时,由于follower数量的增大导致写请求的耗时增长,节点数量越多的zookeeper吞吐量越小(三个节点的集群是个例外)。吞吐量排序是:5>7>3>9>13。

正常情况下所有的请求都是读请求是不可能的,肯定含有写请求。所以建议zookeeper集群的读写比例为7:3或8:2最好,机器数量为5或者7台,不仅成本低也有良好的性能表现。

 

  • 13
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZooKeeper 集群,主要有以下三种角色LeaderFollowerObserver。它们分别具有不同的特点、作用和责任。 1. Leader Leader 是整个 ZooKeeper 集群的核心,它的作用是负责协调集群各个节点之间的状态,保证数据的一致性。Leader 主要承担以下责任: - 处理客户端请求:Leader 节点负责处理所有客户端的写操作请求,并将这些操作同步到集群的其他节点。 - 协调数据同步:Leader 节点负责协调集群各个节点之间的数据同步,保证数据的一致性。 - 选举新的 Leader:当 Leader 节点发生故障时,集群的其他节点会通过选举算法选举出新的 Leader 节点。 2. Follower FollowerZooKeeper 集群最普通的节点,它们的主要作用是接收来自 Leader 节点的数据同步请求,并将数据同步到本地,以保证数据的一致性。Follower 主要承担以下责任: - 处理客户端请求:Follower 节点只处理读操作请求,所有写操作请求都会被转发给 Leader 节点处理。 - 参与数据同步:Follower 节点会接收 Leader 节点发送的数据同步请求,并将数据同步到本地,保持数据的一致性。 - 参与 Leader 选举:当集群Leader 节点发生故障时,Follower 节点会参与新的 Leader 选举过程。 3. Observer ObserverZooKeeper 集群一种特殊的节点,它们的主要作用是为集群提供更好的扩展性和容错性。Observer 主要承担以下责任: - 参与数据同步:Observer 节点会接收 Leader 节点发送的数据同步请求,并将数据同步到本地,保持数据的一致性。 - 提高集群的读取能力:Observer 节点只处理读取请求,不参与写入操作,因此可以扩展集群的读取能力,提高集群的性能。 - 提高集群的容错性:Observer 节点不参与 Leader 选举过程,因此即使 Leader 节点发生故障,Observer 节点也可以继续提供读取服务,保证系统的可用性。 总之,在 ZooKeeper 集群,不同角色的节点具有不同的特点、作用和责任,它们共同协作,保证了整个集群的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值