【问题标题】:How does a new node join a group in the SWIM protocol?新节点如何加入 SWIM 协议中的组?
【发布时间】:2020-03-05 19:12:02
【问题描述】:

附:我已经看过SWIM protocol how does a new node get an address of an existing node in a cluster,我的问题比这要多一点,这就是为什么要单独发帖。

我正在尝试在 c 中实现 SWIM 协议,我有两个问题: 1)如何将节点引入组?从我能想到的,我猜一个标准的“介绍人”节点将成员列表发送到新节点并开始八卦节点加入集群? 和 2) 如果“introducer”节点失败了怎么办?新的介绍人是如何选出的?我在想也许是 Paxos,但它对我来说太复杂了,无法实现。

【问题讨论】:

    标签: distributed-system


    【解决方案1】:

    新节点成员根据提供给它的配置加入集群时,选择集群的对等节点(种子成员)的随机子集作为八卦消息的目标。集群的至少一个活着的节点成员/种子成员地址的地址必须为新节点成员所知,这样它才能加入集群。如果种子成员(引入者)在初始阶段被杀死,则新节点没有其他方式来传达其存在,除非子集中存在备用种子地址且新节点知道该子集,否则它将被隔离成员。但是,如果种子成员(引入者)在新节点的初始八卦已经传达给集群的另一个节点的阶段被杀死,则不会有太大影响,除非新节点需要确保到达特定的另一个节点节点。

    一旦加入,其他节点会将其介绍给gossip,这使得新的节点成员可以逐渐接收到有关集群所有节点的信息。新节点添加的“八卦信息”包含在协议使用的(ping,ping-req,ack)等数据包中,用于定期向其他节点发送消息,称为“感染式”传播机制。 因此,每当有新的节点成员加入或离开集群时,每个节点成员维护的成员列表都会更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-25
      • 2021-12-13
      • 2011-10-01
      • 1970-01-01
      • 2015-10-11
      • 2023-03-07
      • 1970-01-01
      • 2018-07-21
      相关资源
      最近更新 更多