Zookeeper的选举流程
本篇文章主要想聊一下zookeeper的选举流程,基本的术语,zookeeper在kafka中的作用。
1.基本术语
myid: 集群id, 它是每一个集群机器中的编号文件,代表 ZooKeeper 集群服务器的标识,手动生成,全局全一。
zxid: 事务id,Zookeeper 会给每个更新请求分配一个事务 ID,它是一个 64 位的数字,由 Leader 统一进行分配,全局唯一,不断递增,在一个节点的状态信息中可以查看到最新的事务 ID 信息。
2.集群服务器角色
1、Leader(主)
2、Follower(从,参与投票)
3、Observer(观察者,不参与投票)
3.集群服务器状态
1、LOOKING
寻找 Leader 状态,当服务器处于该状态时,表示当前集群没有 Leader,因此会进入 Leader 选举状态。
2、FOLLOWING
跟随者状态,表示当前服务器角色是 Follower。
3、LEADING
领导者状态,表示当前服务器角色是 Leader。
4、OBSERVING
观察者状态,表示当前服务器角色是 Observer。
4.选举场景:
1、Zookeeper 集群启动初始化时进行选举
2、Zookeeper 集群 Leader 失联时重新选举
5.选举流程
一、初始化选举
1、初始投票:当服务器启动后,每个Server都会给自己投上一票,每次投票会包含所投票服务器的myid,zxid,
投票的结果为:zk1(1,0),zk2(2,0),zk3(3,0)
2.同步投票结果:集群中的服务器在投票后,会将各组的投票结果同步给集群中的其他服务器。
3.检查投票有效性:各服务器收到投票后会检查投票的有效性,如是否是本次投票,是否来自looking状态的服务器投票等
4.处理投票:服务器之间会进行投票比对,规则如下:
优先检查zxid,较大的服务器会优先作为leader
如果zxid相同,则myid较大的服务器作为leader
zk1和zk2对比,zk2胜出,zk1更新自己的投票为:zk1(2,0)
5.统计投票结果:
每轮投票比对之后都会统计投票结果,确认是否有超过半数的机器都得到相同的投票结果,如果是,则选出 Leader,否则继续投票。
在本次投票中,zk2节点有2票,超过半数以上,此时zk2成为本轮选举的leader.
zk3启动了,但是集群已经有leader,所以选举也结束了,zk3不在参与选举,直接成为follower
6.更改服务器状态
一旦选出leader,每个服务器就会更新各自的状态
zk1 follower
zk2 leader
zk3 follower
二、集群重新选举
Zookeeper 集群运行期间无法和 Leader 保持正常连接时,即如果 Leader 挂了,或者 Leader 服务器故障都会进行新一轮的 Leader 选举。
如果作为初始选举的 Leader zk2 挂了,集群就会暂停对外提供服务,从而进行新的 Leader 选举。
选举流程:
1.当leader挂了,也就是zk2挂了,所有follower服务器状态变更为:LOOKING,开始新一轮的选举。
2.开始投票
zk1和zk3都会默认投票给自己。
例如本次投票结果为zk1(1,66),zk3(3,28),zk1和zk3各自得到一票,假设zk1的事务id比zk3的事务id大。
3.同步选举结果:集群中的服务器在投票后,会将各组的投票结果同步给集群中的其他服务器。
4.检查投票有效性:各服务器收到投票后会检查投票的有效性。
5.处理投票,服务器之间会进行投票比对,规则如下:
优先检查zxid,较大的服务器会优先作为leader
如果zxid相同,则myid较大的服务器作为leader
zk1和zk3对比,zk1的事务id大于zk3,zk1胜出,zk3更新自己的投票为 zk1
6.统计投票结果:
zk1 2票,zk3 0票
7.更改服务器状态
zk1 leader
zk3 follower
6.zookeeper在kafka的作用。
Apache Kafka 的一个关键依赖是 Apache Zookeeper,它是一个分布式配置和同步服务。Zookeeper 是 Kafka 代理和消费者之间的协调接口。Kafka 服务器通过 Zookeeper 集群共享信息。Kafka 在 Zookeeper 中存储基本元数据,例如关于主题,代理,消费者偏移(队列读取器)等的信息。
由于所有关键信息存储在 Zookeeper 中,并且它通常在其整体上复制此数据,因此Kafka代理/ Zookeeper 的故障不会影响 Kafka 集群的状态。Kafka 将恢复状态,一旦 Zookeeper 重新启动。 这为Kafka带来了零停机时间。Kafka 代理之间的领导者选举也通过使用 Zookeeper 在领导者失败的情况下完成。
Apache Kafka是一个使用Zookeeper构建的分布式系统。Zookeeper的主要作用是在集群中的不同节点之间建立协调;如果任何节点失败,我们还使用Zookeeper从先前提交的偏移量中恢复,因为它做周期性提交偏移量工作。
如果想更多的了解zookeeper的作用,可以参考链接:https://www.lilinchao.com/archives/1548.html

浙公网安备 33010602011771号