美文网首页
raft协议-集群成员变化处理

raft协议-集群成员变化处理

作者: 总裁大爷 | 来源:发表于2018-03-20 23:32 被阅读0次

raft协议,关于集群成员变化的一点个人理解,纯粹是根据论文分析的,不一定正确。后续看下etcd, braft的实现代码,加深理解。

1.png

Cold: 旧集群的节点配置信息,eg 【node1, node2, node3】
Cnew:新集群的节点配置信息, eg 【node1, node2, node3, node4, node5】
Cold_new:新旧节点配置信息都包含。

T1-T2时间段内,选举出来的leader可能是拥有Cold配置的节点,也有可能是拥有Cold_new配置的节点。拥有Cold_new配置的节点选举成功的条件是:Cold和Cnew中的大多数节点都同意,也就意味着他选举成功,Cold中就不会有别的candidate被选举成功,所以不会出现两个leader。

T2-T3时间段,选出来的leader必然是拥有Cold_new配置的节点。原因:在T2时刻,Cold_new日志复制成功,表示在Cold, Cnew中 Cold_new日志都占了大多数,因此即使在Cold集群中,如果选举leader成功,必须要一个拥有Cold_new日志的follower,然而该follower更新,他必然会拒绝该请求, 而只会批准哪些拥有Cold_new日志的Candidate.

T3-T4时间段,选举出来的leader可能是拥有Cold_new配置的节点, 也有可能是拥有Cnew配置的节点。但是Cold_new节点要求new节点集群的大部分同意他(也就是说大部分New集群中的节点不会选出第二个leader了),反过来说,如果new节点集群选了一个拥有Cnew配置的节点,那么Cold_new在new节点集群中必然没法得到多数同意, 因此可以看出不会同时存在两个leader。

T4之后,再选leader一定是选择拥有Cnew配置的candidate. 因为假设一个拥有Cold_new的节点申请大家的投票,需要Cnew中的大部分节点同意,但是Cnew中的大部分人都已经写入了日志Cnew,所以他们不会同意Cold_new节点成为leader.

以上是配置切换log写入成功的情况,写入失败是:Cold_new写入失败/Cnew写入失败的情况参考:
http://blog.csdn.net/zhang_shuai_2011/article/details/38585725

相关文章

  • raft协议-集群成员变化处理

    raft协议,关于集群成员变化的一点个人理解,纯粹是根据论文分析的,不一定正确。后续看下etcd, braft的实...

  • Raft(5)— 集群成员变化(edit)

    背景 到目前为止,我们都假设集群的配置(加入到一致性算法的服务器集合)是固定不变的。但是在实践中,偶尔是会改变集群...

  • RocketMQ主从切换

    本文主要是记录raft协议的学习过程,包括如下几个方面 raft协议一些基本概念 raft协议场景 raft协议在...

  • 一致性协议raft和Paxos

    raft一致性协议 透彻讲解raft协议选举过程 etcd 利用raft一致性协议 zookeeper使用Paxo...

  • 搭建高可用Etcd集群 (TLS)

    etcd集群采用raft算法选举Leader, 最小raft集群需要3个参与者,所以一个etcd集群最少需要3台虚...

  • 大数据操作系统相关优化

    1.分布式系统基石是paxos或者Raft协议,leaderElection 过程有定时器在跑,对集群时间要求比较...

  • Raft协议实现之etcd(三):日志同步

    前言 Etcd集群通过Raft协议的选举机制产生一个Leader,这样客户端在对etcd存储的数据进行更新时,就可...

  • Raft协议

    1.raft协议 raft协议是一个共识算法,主要包括leader election,log replicatio...

  • 对标Eureka的AP一致性,Nacos如何实现Raft算法

    一、快速了解Raft算法 Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解...

  • 巧妙的 一致性 hash

    问题 raft 的局限:写请求只能在 Leader 节点上进行处理,集群性能约等于单机 普通 hash (取余)分...

网友评论

      本文标题:raft协议-集群成员变化处理

      本文链接:https://www.haomeiwen.com/subject/jbsiqftx.html