Cassandra集群中种子节点的工作原理是什么?

5
我的理解是:
种子节点维护集群中的所有节点列表。 假设我们要向集群中添加一个新节点,我们必须将新节点名称输入到种子服务器的种子列表中,然后新节点将成为环的一部分。
我认为我们不需要在对等节点中提及种子服务器。
如果我的理解有误,请纠正我。
我曾经读到过"种子节点"失败不会造成任何问题。例如,如果种子节点崩溃了,如何维护环信息?
2个回答

14

我想澄清一下,因为文档中的引用已经过时,并且从来没有确切的精度。

即使在引导过程之后,种子节点仍然在Gossip中发挥作用。

如果有一个种子节点失败,那么不会有额外的影响。但是,如果您需要替换种子节点,请按照文档中的指南进行操作。

详情:

除了帮助新节点引导外,种子节点还用于防止群集中出现拆分脑。当节点与已经具有有关其他节点信息的节点握手时,该节点了解到其他节点的相关信息,这些信息是由最近的Gossip操作提供的。

Gossip.run()每秒运行一次。在单个gossip运行中,节点将与一个随机的活动节点握手,一个随机的已停止节点-如果有-基于某种概率,并且如果随机节点不是种子,则还会与一个随机种子节点握手-也基于某种概率。随着您的种子节点列表的增加,您将与越多的节点握手。根据此逻辑,与种子节点列表握手的概率频率将随着您的种子节点比例增加而增加。

但是,如上所述,仅当第1步未在种子节点上发生时才会执行第3步。因此,在添加种子之后需要执行第3步的概率会增加,最高点是当一半的节点都是种子时(.25机会),然后再次减少。

建议每个DC保留3个种子节点。不要将所有节点添加为种子节点


5
在新节点的配置中,您需要将其指向另一个已存在的节点作为种子提供者。种子提供者是加入群集的新节点的初始联系点。节点加入群集后,它会记住拓扑结构,不再需要种子提供者。
来自Cassandra文档
注意:种子节点的指定除了引导加入群集的新节点的Gossip进程之外,没有任何其他目的。种子节点不是单点故障,也没有任何其他特殊用途,仅用于引导节点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接