新节点如何加入 SWIM 协议中的组?

How does a new node join a group in the SWIM protocol?

P.s。我已经看过 ,我的问题问的比这个多一点,这就是为什么要单独 post.

我正在尝试用 c 实现 SWIM 协议,我有两个问题: 1) 一个节点如何被引入到组中?据我所知,我猜一个标准的 "introducer" 节点将成员列表发送到新节点并开始闲聊该节点加入集群? 和 2) 如果 "introducer" 节点出现故障会怎样?如何选举新的介绍人?我在想也许是 Paxos,但它对我来说太复杂了。

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

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