Cassandra 如何在多数据中心多机架多节点设置中识别要复制的节点

How Cassandra identifies the node for replication in a multi data center multi rack multi node setup

我了解到 Cassandra 试图跨不同的机架复制数据 - 不同的 DC 来处理故障转移... 例如:假设我有一个总共 8 个节点的集群,跨越 2 个不同的数据中心,每个数据中心有 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 critria.

1) 假设要处理 Rack 故障并让本地读取它在同一 DC 但不同 RACK 的某个节点中存储第二个副本。 因此,第二个副本将存储在 DC 1、RACK 2 中的节点 3/节点 4 中。 我的问题是 Cassandra 选择节点 3 或节点 4 的依据是什么。它如何弄清楚为什么节点 3 在节点 4 上被预释放,反之亦然。

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

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

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

此致,
乔尼