【问题标题】:How Cassandra identifies the node for replication in a multi data center multi rack multi node setupCassandra 如何在多数据中心多机架多节点设置中识别要复制的节点
【发布时间】:2017-07-31 18:54:08
【问题描述】:

我了解到 Cassandra 试图跨不同的机架复制数据 - 不同的 DC 来处理故障转移...... 例如:假设我总共有 8 个节点集群,跨越 2 个不同的 DC,每个 DC 有 2 个机架。

节点 1 - DC1 机架 1 |节点 2 - DC1 机架 1 |节点 3 - DC1 机架 2 |节点 4 - DC1 机架 2 |节点 5 - DC2 机架 1 |节点 6 - DC2 机架 1 |节点 7 - DC2 机架 2 | 节点 8 - DC2 机架 2

现在,如果我的 RF 为 3,那么在写一行时, Cassandra 将在负责第 1 行令牌范围的节点(假设在本例中为节点 1)上存储该行的第一个副本。 所以第一个副本存储在假设:节点 1 在 DC 1,RACK 1 下 现在 Cassandra 需要再存储 2 个副本才能满足 RF =3 条件。

1) 假设要处理 Rack 故障并让本地读取它将第二个副本存储在同一 DC 但不同 RACK 的某个节点中。 因此,第二个副本将存储在 DC 1、RACK 2 中的节点 3/节点 4 中。 我的问题是 Cassandra 会选择 Node 3 还是 Node 4

2)为了处理 DC 故障,它将第 3 个副本存储在其他 DC(即 DC2)中。 现在有2个选项: a) 它必须在 DC2 中的 Rack 1 和 Rack 2 之间选择一个机架。 - 我的第二个问题是它在同一数据中心的多个机架中选择的依据/逻辑是什么。 b) 让我们想象一下,如果它在 DC 2 中选择机架 1,那么它必须在节点 5 或节点 6 之间进行选择以进行复制。 - 我的第三个问题是 Cassandra 在 Same Rack 中选择节点的依据是什么? (与第一个问题基本相同)

【问题讨论】:

标签: cassandra-3.0


【解决方案1】:

这取决于您为密钥空间选择的复制策略。 在SimpleStrategy 中,它只需要环上的连续节点 - 这意味着作为单个 DC 的简单策略(我猜你不使用它,但为了完整性而添加)

NetworkTopologyStrategy 中,您需要定义每个 DC 的复制次数,Cassandra 将顺时针遍历环,直到到达另一个机架中的第一个节点。
见:Cassandra data replication docsa blog with nice visuals

问候,
乔尼

【讨论】:

  • 还有一个问题.. 如果每个 DC 有 2 个机架并且每个机架有 2 个节点。假设第一行的副本存储在(节点 1(RAC 1,DC 1),节点 3(Rac 2,DC 1),节点 5(RAC 1,DC 2).. 这要记住顺时针方向沿着环走。(检查我在问题中提到的集群结构)。现在对于第二行插入,假设 RACK 1 DC 1 中的节点 2 负责令牌范围,
  • 嗨,考虑到每个 DC 将保存整个令牌范围 - 在 DC 内,Cassandra 将尝试在机架之间拆分数据。在上述情况下,您有 2 个 DC 和 2 个机架 - 如果您想要每个 DC 中的 RF 3,您将持有 6 个!数据的副本 - 每个 DC 中的 3 个。例如,DC1 中的节点 2,3 和 1 以及 DC2 中的节点 6,7 和 5。
  • 明白了,所以在创建密钥空间时,我们会提到同一个 DC 中有多少副本......如果我提到“WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 } " ,则 DC2 中不会存储任何数据,只有 DC1 将有 3 个副本(机架 1 中的两个,机架 2 中的一个)。在这种情况下,DC 2 会获取要存储的数据吗?
  • 嗨,NetworkTopologyStrategy 您指定每个 DC 的 RF - 因此您可以将所有数据放在一个 DC 中或在 2 个 DC 之间复制。如果您想跨 DC 拆分数据 - 您需要将它们写为单个 DC - 请注意这是一个非常糟糕的主意,因为您很容易出现脑裂......是的 - 您刚刚编写的方式将保留所有内容。 DC1 中的数据。
  • 在像 FB 这样容量巨大且 KeySpace 中的数据需要在地理上分布的环境中......我们如何设计存储?假设表用户包含有关所有用户的信息,我想要要在多数据中心中隔离用户信息,可以说来自印度的所有用户都应该存储在 DC-INDIA 中,来自美国的所有用户都应该存储在 DC-US 中。如何实现?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多