据我所知,Cassandra尝试在不同的机架上复制数据 - 不同的DC来处理故障转移...... 例如:假设我总共有8个节点集群跨越2个不同的DC,每个DC有2个机架。
节点1 - DC1 RACK 1 |节点2 - DC1 RACK 1 |节点3 - DC1 RACK 2 |节点4 - DC1 RACK 2 |节点5 - DC2 RACK 1 |节点6 - DC2 RACK 1 |节点7 - DC2 RACK 2 | 节点8 - DC2 RACK 2
现在如果我有3的RF,那么在写一行时, Cassandra将在节点上存储该行的第一个副本(在本例中为节点1),它负责第1行的令牌范围。 因此,第一个副本存储在节点1中,节点1在DC 1,RACK 1下 现在,Cassandra需要再存储2个复制品以满足RF = 3的标准。
1)让我们说处理机架故障&有本地读取它存储在同一DC但不同RACK的某个节点中的第二个副本。 因此,第二个副本将存储在节点3 /节点4中,它们位于DC 1,RACK 2中。 我的问题是Cassandra选择节点3或节点4的基础。它如何确定节点3在节点4上得到预感的原因,反之亦然。
2)为了处理DC故障,它将第3个副本存储在其他DC(DC2)中。 现在它有两个选择: a)必须在DC2中选择机架1和机架2之间的机架之一。 - 我的第二个问题是它在同一数据中心的多个机架中选择的基础/逻辑。 b)让我们想象一下,如果它选择DC 2中的机架1,那么它必须在节点5或节点6之间进行选择以进行复制。 - 我的第三个问题是Cassandra在Same Rack中选择节点的基础? (与第1个问题基本相同)
答案 0 :(得分:1)
这取决于您为密钥空间选择的复制策略。
在SimpleStrategy
中它只需要环上的连续节点 - 这对于单个DC来说是一个简单的策略(我猜你不使用它但是为了完整性而添加)
在NetworkTopologyStrategy
中你需要定义每个DC的复制次数,Cassandra将顺时针走环,直到到达另一个机架的第一个节点。
见:Cassandra data replication docs
和a blog with nice visuals
的问候,
尊利