目录

1.首先要知道集群中节点的状态

2.集群中的选举机制

3.什么情况下需要进行选举

1..集群中的从节点数量不足以通过半数校验,主节点会自己挂掉,选举新的主节点

2.集群启动时,需要进行主节点的选举(五台机器)

3.集群正常启动,leader因为故障歇菜了

4.加入了新的follower


1.首先要知道集群中节点的状态

leader ,领导者,也就是 master 主节点,
follower ,跟随者,也就是从节点 slave
observer ,观察者,特殊的从节点,不参与主节点选举,只提供读操作
looking ,是一个临时状态,在集群选举 master 过程中,所有的 follower 节点都会去竞选 master
集群中必须有主节点,否则无法正常工作。
所以在没有主节点时就会发生选举
以下三条是一些概念:

(1)Server id:服务器ID

(2)Zxid:事务ID

(3)Epoch:逻辑时钟

2.集群中的选举机制

简单来说就是会投票,谁的票数多,谁就是老大,就是主节点。

3.什么情况下需要进行选举

1.集群中的从节点数量不足以通过半数校验,主节点会自己挂掉,选举新的主节点

假如有5台服务器  ,主节点可以收到5张票,  假如有3个slaver 挂了,就剩一个主节点,一个从节点,测试选举没有超过一半,则master 自杀

2.集群启动时,需要进行主节点的选举(五台机器)

每个节点都有自己携带的唯一id,

1.启动第一台机器1,发起选举,自己投票给自己,票数不过半,选举失败,服务器1保持looking状态。

2.启动第二台机器2,发起选举,1和2都先给自己投一票,1发现2 比自己的id大,所以把自己的票也投给服务器2,此时服务器2有2票,服务器1有0票,票数不过半,选举失败。

服务器1,2均保持looking 状态

3.启动第三台机器3,发起选举,1,2,3都先给自己投上一票,但是1和2发现服务器3的id比自己大,所以把自己的票都投给服务器3,次数服务器3票数过半,选举成功,服务器3当选leader

服务器1,2变为follower,服务器3变为leader.

此时已经选举成功了,后面两台机器的选举不会改变结果

4.启动第四台机器

发起一次选举,此时服务器1,2,3是folllower 状态,不会更改选票信息。此时:服务器3为3票,服务器4为1票。服务器4少数服从多数,更改选票信息为服务器3。

服务器4更改状态为follower

5.启动第五台机器

与服务器4一样投票给3,此时服务器3一共5票,服务器5为0票。

服务器5更改状态为follower

3.集群正常启动,leader因为故障歇菜了

此情景中每个节点都有自己的myid和zxid,选举规则就是谁的数据最新鲜,其他人就会投票给他

zxid是事务id,事务id越大,代表数据越大,代表当前节点存储的数据越新

1.第一次投票都会投给自己

2.然后每台机器都会把自己的票发给其他机器,如果发现了其他机器的zxid比自己大,将会重新投票,并都会投给xzid最大的那台机器。此后,zxid最大的服务器就会当选为leader。

4.加入了新的follower

此时发生选举并不会影响主节点的改变。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐