关于 Cassandra 的问题 Bootstrap

Questions on Cassandra Bootstrap

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

1) 我有 4 个节点 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 bootstrap 究竟如何工作?

谢谢,
哈利

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

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

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

  • 联系种子节点了解八卦状态。
  • 过渡到 Up 和 Joining 状态(表示它正在加入 簇;在nodetool status).
  • 中用UJ表示
  • 联系种子节点以确保模式一致。
  • 计算它将负责的代币。
  • 与其负责的令牌关联的流副本数据 来自前业主。
  • 一旦流式传输完成(到 表明它现在是集群的一部分;由 UN 表示 nodetool status).

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

八卦协议确保系统中的每个节点最终都知道关于每个其他节点状态的重要信息,包括那些在任何给定状态发生变化时无法访问或尚未在集群中的信息。 八卦计时器任务每秒运行一次。在每次运行期间,节点根据以下规则启动八卦交换:

  1. 八卦随机实时端点(如果有)
  2. 根据无法访问和活动节点的数量,以一定的概率八卦到随机无法访问的端点
  3. 如果在 (1) 处闲聊的节点不是种子,或者活动节点的数量少于种子数量,则根据无法访问的节点、种子和活动节点的数量,以一定的概率闲聊到随机种子。

这些规则确保如果网络正常运行,所有节点最终都会知道所有其他节点。 (显然,如果每个节点只联系一个种子,然后只与它知道的随机节点进行八卦,那么当有多个种子时你可以有分区——每个种子将只知道集群中节点的一个子集。步骤 3 避免这个和更微妙的问题。)

这样一个节点每轮发起与一到三个节点的八卦交换(如果它在集群中是单独的,则为零)

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

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