有人可以回答我下面的问题,

1)我有四个节点172.30.56.60、172.30.56.61、172.30.56.62、172.30.56.63,并且我在所有四个节点中的cassandra.yaml中都将种子配置为“ 172.30.56.60、172.30.56.61”。
注意:我没有在cassandra.yaml文件中提供有关'172.30.56.62,172.30.56.63'的任何信息。但是,当我在所有四个节点中启动Cassandra时,Cassandra如何识别62和63?

2)八卦协议到底如何工作/ Cassandra引导程序到底如何工作?

谢谢,
哈里

最佳答案

(免责声明:我是Scylla的员工)

当您在节点上启动Cassandra / Scylla时,它们会联系seed / s节点(您在yaml文件中为所有4个节点定义),以获取有关环,令牌范围和环中其他成员(其他节点)的信息。 )。

Bootstrap控制在插入新节点时自动重新分配群集中数据的能力。加入集群的新节点被定义为没有系统表或数据的空节点。


联系种子节点以了解八卦状态。
过渡到“启动并加入”状态(以表明它正在加入
簇;在UJ中由nodetool status表示)。
联系种子节点以确保架构协议。
计算它将负责的令牌。
流与其负责的令牌关联的副本数据
从前业主。
流式传输完成后,过渡到正常和正常状态
指出它现在是集群的一部分;在UN中表示
nodetool status)。


您可以在此处阅读有关引导的更多信息:http://thelastpickle.com/blog/2017/05/23/auto-bootstrapping-part1.html

闲话协议可确保系统中的每个节点最终都知道有关每个其他节点状态的重要信息,包括在发生任何给定状态更改时群集中不可达或尚未到达的信息。
八卦计时器任务每秒运行一次。在这些运行的每一次期间,节点根据以下规则启动八卦交换:


八卦到随机直播端点(如果有)
根据不可达和活动节点的数量,以一定概率闲聊到随机不可达端点
如果在(1)处闲聊的节点不是种子,或者活动节点的数量少于种子数量,请根据无法到达的种子和活动节点的数量,以一定的概率闲聊到随机种子。


这些规则可确保如果网络正常运行,则所有节点最终都将知道所有其他节点。 (很明显,如果每个节点仅接触一个种子,然后仅闲聊到它知道的随机节点,则当有多个种子时,您可以进行分区-每个种子将只知道集群中节点的一个子集。步骤3避免了这个和更微妙的问题。)

这样,一个节点每轮与一到三个节点启动八卦交换(如果集群中只有一个,则为零)

您可以在这里阅读更多关于八卦高级架构的信息:https://wiki.apache.org/cassandra/ArchitectureGossip

您可以在此处阅读有关Scylla八卦实现的更多信息:
https://github.com/scylladb/scylla/wiki/Gossip

10-07 19:33
查看更多