【问题标题】:Questions on Cassandra Bootstrap关于 Cassandra Bootstrap 的问题
【发布时间】:2018-05-14 01:09:53
【问题描述】:

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

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) gossip 协议的工作原理/Cassandra 引导程序的工作原理是什么?

谢谢,
哈利

【问题讨论】:

  • 嗨@Harry,我希望你有机会查看我的答案,我想你会发现它很有用。干杯!

标签: java database cassandra datastax gossip


【解决方案1】:

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

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

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

  • 联系种子节点以了解八卦状态。
  • 转换到 Up 和 Joining 状态(表示它正在加入 簇;由UJ 中的nodetool status 表示)。
  • 联系种子节点以确保模式一致。
  • 计算它将负责的令牌。
  • 与它负责的令牌相关联的流副本数据 来自前任所有者。
  • 流式传输完成后转换为 Up 和 Normal 状态(到 表明它现在是集群的一部分;由UN 表示 nodetool status)。

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

gossip 协议确保系统中的每个节点最终都知道有关每个其他节点状态的重要信息,包括在发生任何给定状态更改时无法访问或尚未在集群中的那些信息。 Gossip timer 任务每秒运行一次。在每次运行期间,节点都会根据以下规则发起 gossip 交换:

  1. 八卦到随机实时端点(如果有)
  2. 根据不可达和活动节点的数量,以一定的概率向随机不可达端点发送消息
  3. 如果在 (1) 处闲聊到的节点不是种子,或者活动节点的数量小于种子数,则根据不可达、种子和活动节点的数量,以一定的概率向随机种子发送消息。

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

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

您可以在此处阅读有关 gossip 高级架构的更多信息:https://wiki.apache.org/cassandra/ArchitectureGossip

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

【讨论】:

    猜你喜欢
    • 2019-08-07
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多