redis zk 选举

redis 主从复制

psync 全量复制 命令广播

选举 sental 领头羊选举

如果需要从redis集群选举一个节点为主节点,首先需要从Sentinel集群中选举一个Sentinel节点作为Leader。

每一个Sentinel节点都可以成为Leader,当一个Sentinel节点确认redis集群的主节点主观下线后,会请求其他Sentinel节点要求将自己选举为Leader。被请求的Sentinel节点如果没有同意过其他Sentinel节点的选举请求,则同意该请求(选举票数+1),否则不同意。

如果一个Sentinel节点获得的选举票数达到Leader最低票数(quorum和Sentinel节点数/2+1的最大值),则该Sentinel节点选举为Leader;否则重新进行选举。
在这里插入图片描述

leader 选举

在这里插入图片描述

zk 的选举算法

一. zk的选举机制中的概念:
SID:服务器ID。用来唯一标识一台ZooKeeper集群中的机器,每台机器不能重复,和myid一致。
ZXID:事务ID。ZXID是一个事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID值不一定完全一致,这和 ZooKeeper服务器对于客户端“更新请求”的处理逻辑有关。
Epoch:每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。
LOOKING:选举中,正在寻找Leader
FOLLOWING:随从状态,同步leader状态,参与投票
Leader:领导者,差不多是master,在zookeeper中只有leader才有写的权限,following只有读的权限
OBSERVING:观察者状态,不同leader状态,不参与投票

二.核心选举原则:
Zookeeper集群中只有超过半数以上的服务器启动,集群才能正常工作;
在集群正常工作之前,myid小的服务器给myid大的服务器投票,直到集群正常工作,选出Leader;
选出Leader之后,之前的服务器状态由Looking改变为Following,以后的服务器都是Follower。
如果集群没有Leader(非全新选举),Epoch大的服务器当选leader;
如果Epoch相等,比较ZXID(事物ID),事物ID大的,当选leader;
如果Epoch相等,ZXID相等,则比较myId(服务器id),服务器id大的当选Leader,服务器id是不重复;
三.选举机制类型:
1、全新集群选举(第一次启动):
假设目前有三台服务器,分别是1号、2号、3号;
首先1号启动,启动一次选举,1号投给自己一票,由于其他服务器没有启动,无法收到1号的投票信息,此时1号处于Looking(竞选状态);
2号启动,启动选举,2号给自己投一票,并且与1号交换信息,此时1号发现2号的myId比自己投票服务器(服务器1)的myId大,此时1号0票,2号2票,2>(3/2),服务器2的票数最多,超过半数,那么2号当选leader,1号更改状态为following,2号更改状态为leading;
3号启动,启动选举,给自己投一票,此时与之前启动的1号、2号交换信息,此时1号、2号并没有处于Looking(竞选中)状态,不会更改选举状态,3号一票,服从多数,此时3号更改状态为following;
注意:当集群服务器有5台时,前面的服务器1和服务器2,都是LOOKING,服务器1票数为0,服务器2票数为2,当启动第三台服务器时,服务器3的myid大,服务器2会把票数给服务器3,(服务器启动会给自己投一票)这时服务器3票数为3选为Leader,其他的都是follow,之后启动的服务器也是follow;

2、非全新集群选举(非第一次启动):
如果leader服务器挂了,那么整个集群将暂停对外服务,进入新一轮leader选举,其过程和启动时期的leader选举过程基本一致。Leader挂掉后,余下的服务器都将自己的服务器状态变更为looking,然后开始进入Leader选举过程。服务器1号、2号、3号,此时2号是Leader,如果2号停电挂掉之后,1号、3号无法连接到Leader,知道Leader挂了,他们就知道必须选出一个新的 Leader,于是纷纷将自己的状态都修改为 LOOKING 状态:
比如1号的ZXID(事物id)为:77,Epoch(任期代号)为:1,myid(服务器id):1;3号的ZXID(事物id)为:80,Epoch(任期代号)为:1,myid(服务器id):3;此时3号为leader。

如果follow挂掉了,此时集群还是可以对外提供服务,挂掉一个是达到整个集群总数的半数以上的,如果挂掉的follow恢复之后,还是以 Follower 的身份加入到集群中来,并且仍然以当前 Leader 的信息来同步,即使它的Epoch大于其他的服务器。

ZK消息广播

为了保证集群中存在过半的机器能够和Leader服务器的数据状态保持一致
二阶段提交(2PC)协议,你会发现其实消息广播的过程实际上就是一个简化版本的二阶段提交过程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值