raft重叠(分布式技术系列 | 八. raft之成员变更)

分布式武艺系列 | 八. raft之成员变动

思索一个成绩,假如你们的分布式体系必要横向扩展,也就是加抄本数、加机器,应该怎样宁静地更新每台机器上设置?大概说,更新机器设置的历程约莫会显现什么成绩?


成员变动带来的成绩

起首,说一下设置是啥,它就是在说集群是由哪些节点构成的,是集群各节点地点信息的聚集。好比节点 A、B、C 构成的集群,那么集群的设置就是[A, B, C]聚集,每台机器上都必要保存该信息。然后我们再来看,假定现在有一个由节点A、B、C构成的集群,然后必要再到场两个节点D和E,关于成员变动,寻常是经过这几步完成的:

  1. master感知新节点:一切的worker都市向master节点上订阅相反的主题(好比主题名hello),新到场的节点会向这个主题公布一条消息(此中包含了本人的节点信息),向leader标明“我以前到场,请pua我把”。
  2. master向新的节点同步汗青的抄本数据
  3. worker感知新节点:当master向新的节点同步完汗青的抄本数据后,再向订阅过主题hello的一切worker推送带有新节点信息的设置,也就是[A, B, C,D,E],然后一切worker将新的配相信息使用到当地,就此完成了一次成员变动

那么此中约莫会显现什么成绩呢?想想,毕竟worker使用新的设置到当地毕竟是偶尔间上的先后顺遂的,时期假如显现了一些不测情况,招致了leader推举的触发,那么就会显现有的节点保存的是新设置,而剩下的节点则是旧设置。

如上图,旧设置是3个节点,那么只必要取得2个节点的投票就可以提升为leader,而新设置是5个节点,那么必要取得3个节点的投票则可以提升为leader。假定B节点取得了A,B的支持,而C节点取得了C、D、E的支持,这就显现了两个leader并存的情况。


使用单节点变动处理成员变动中带来的多主成绩

单节点变动,就是经过一次变动一个节点完成成员变动。假如必要变动多个节点,则必要实行多次单节点变动。好比将 3 节点集群扩容为 5 节点集群,这时你必要实行2次单节点变动,先将 3 节点集群变动为 4 节点集群,然后再将 4 节点集群变动为 5 节点集群

像如此每次只增长一个节点的办法,不管旧的集群设置是怎样构成的,旧设置的“大大多”和新设置的“大大多”都市有一个节点是堆叠的。

1. 假定如今集群有2n+1个节点

大多是n+1,扩容一个节点到2n+2,大多是n+2,按旧集群大多n+1和新集群大多n+2相加,共必要2n+3个节点才干推举出2个主,扩容后的节点数仅有2n+2,旧设置的“大大多”和新设置的“大大多”存在一个节点堆叠,以是不会显现多个主

2. 假定如今集群有2n个节点

大多是n+1,扩容一个节点到2n+1,大多是n+1,按旧集群大多n+1和新集群大多n+1相加,共必要2n+2个节点才干推举出2个主,扩容后的节点数仅有2n+1,相反地,旧设置的“大大多”和新设置的“大大多”存在一个节点堆叠,以是不会显现多个主


现在大大多分布式体系接纳的都是单节点变动的处理思绪,好比etcd和Hashicorp Raft。固然,处理成员变动成绩的伎俩另有团结共鸣,团结共鸣逻辑比力繁复,完成起来也比力难,我以为这是现在没有被大大多体系采取的主要缘故,有兴致的大大们可以自行学习。

raft重叠(分布式技术系列 | 八. raft之成员变更)

本站资源均来源于互联网,仅提供信息存储空间服务,用于学习交流,如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 dhh0407@outlook.com 举报,一经查实,本站将立刻删除。

本文链接:https://6wyx.com/post/244943.html

发表列表

评论列表

还没有评论,快来说点什么吧~