「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」
-
raft算法
raft中的主副节点的同步和kafka是一样的,两阶段状态(这个两阶段要和分布式事务的区别开来,分布式事务是TCC三阶段,和MQprepared+comfirm(这个有点像)+两阶段提交(事务控制器))+ack机制。
一开始:每个节点都在等待超时,第一个变成超时的节点就是candidate,然后发起投票,一般就是他变成leader了(每个节点的超时时间是不一样的,但接收到其他节点发过来的ping的时候,这个超时倒计时会重新开始计时)
对于主从文件的复制,和kafka有点区别就是kafka等其他replica返回同步的信息后就直接commit了,而raft算法还需要主动发给消息给从节点让他们也commit。
太厉害了!!
-
zab选主是怎么样的?
给自己投票,广播,比较服务器id,数据id,逻辑时钟,比较透给谁
比较数据,逻辑时钟。。
原则是投票超过半数的就获胜。最可靠最完全。
-
kafka选主是怎么样的?
kafka有一个controller负责选组(这个controller是zookeeper实现的,watch监控器,应该就是每一个broker去注册controller,策成功了就是controller,失败了就一直监听controller是否挂了,如果挂了就变成controller。这个又有点像zookeeper实现分布式事务锁了),同时在zookeeper中维护了ISR列表,controller去ISR列表中选择第一个,叫做偏爱分区法
重新选举,去ISR列表中找一个和leadre一样的节点。
-
redis的哨兵模式
其实也是选主,他首选要选一个哨兵leader,是发现故障的那个哨兵发起的投票,看看自己是否能够成为选举性leader的主导致。然后选举leader的原则是:slave of 优先级设置高的,数据偏移量最大的,runid(估计是服务器id_最小的)。
就变成controller。这个又有点像zookeeper实现分布式事务锁了),同时在zookeeper中维护了ISR列表,controller去ISR列表中选择第一个,叫做偏爱分区法
重新选举,去ISR列表中找一个和leadre一样的节点。
-
redis的哨兵模式
其实也是选主,他首选要选一个哨兵leader,是发现故障的那个哨兵发起的投票,看看自己是否能够成为选举性leader的主导致。然后选举leader的原则是:slave of 优先级设置高的,数据偏移量最大的,runid(估计是服务器id_最小的)。