【问题标题】:How seed node works in Cassandra cluster种子节点在 Cassandra 集群中的工作原理
【发布时间】:2014-02-14 09:59:50
【问题描述】:
我的理解是:
种子节点维护集群中的所有节点列表。
假设我们必须向集群添加一个新节点,我们必须在种子服务器的种子列表中输入新节点名称,然后新节点将成为环的一部分。
我假设我们不必提及对等节点中有关种子服务器的任何事情。
如果我的理解不正确,请纠正我。
我读到一些“种子节点”中的失败不会导致任何问题的地方。比方说如果种子节点崩溃了如何维护环信息?
【问题讨论】:
标签:
nosql
cassandra
cloud
cluster-computing
【解决方案1】:
我想澄清一下,因为文档中的引用是旧的,而且从未完全准确。
即使在引导之后,种子节点仍然在 Gossip 中发挥作用。
如果您的种子节点出现故障,则不会产生额外影响。虽然如果您需要更换种子节点,您应该遵循guide in the docs.
详情:
除了帮助新节点引导外,种子节点还用于防止集群中出现裂脑。当一个节点与一个已经从最近的八卦操作中获得其他节点信息的节点握手时,它会发现其他节点。
Gossip.run() 每秒发生一次。在一次 gossip 运行中,一个节点将与一个随机活动节点、一个随机死节点(如果有的话)基于某种概率握手,以及一个随机种子节点(如果随机节点不是种子)——也基于某种概率.随着种子节点列表的增加,您将与之握手的节点越多。根据logic,与种子节点列表握手的概率频率将随着种子节点比例的增加而增加。
但是,如上所述,步骤 3 仅在步骤 1 未发生在种子节点上时才会发生。因此,必须执行第 3 步的概率随着种子的添加而增加,在一半节点是种子的点处达到最大值(0.25 机会),然后再次降低。
建议每个 DC 保留 3 个种子节点。 不要将所有节点都添加为种子节点
【解决方案2】:
反之亦然:在新节点的配置中,您指向另一个已经存在的节点作为种子提供者。种子提供者是新节点加入集群的初始接触点。节点加入集群后,它会记住拓扑,不再需要种子提供者。
来自Cassandra docs:
注意:种子节点指定没有其他目的
为加入集群的新节点引导 gossip 进程。
种子节点不是单点故障,也没有任何
集群操作中除引导之外的其他特殊用途
节点数。