Cassandra:6节点集群,RF = 2:当2个节点崩溃时该怎么办?

时间:2014-08-19 12:48:53

标签: cassandra-2.0

美好的一天

我们的密钥空间上有一个6节点casssandra集群,复制因子为3。我们的应用程序使用QUORUM,因此我们可以在单个节点丢失的情况下继续使用,而不会影响应用程序。

让我们假设我同时丢失了2个节点。如果我的应用程序使用的是一致性级别,那么它本来没问题,我的应用程序将运行没有任何问题,但我们希望将级别保持在QUORUM。

我的问题是,如果2个节点同时崩溃并且我为每个崩溃的节点执行了nodetool removenode,那么集群是否会重新平衡剩余的4个节点上的数据(并将其重新恢复为3个副本)并且如果完成,那么我的应用程序是否能够再次使用QUORUM?

1 个答案:

答案 0 :(得分:0)

在标题中,您写入RF = 2,文本RF = 3。您没有指定Cassandra版本,如果您使用的是单令牌或vnodes。仲裁CL表示在RF = 3中,2个节点必须在返回之前写入/读取。即使2个节点死亡,您也可能面临最小问题/没有问题,这取决于节点共享的公共范围(分区)的数量。

查看与您描述的完全相同的this distribution example:RF3,6个节点。

使用单一令牌:
如果你松散像(1,4) - (2,5) - (3,6)那样的夫妻 - 你的群集应该允许所有的写入和读取,没有问题。一个好的客户端会识别节点,不再使用它们作为协调员。其他情况,例如节点丢失(1,6)可能导致F和E令牌的任何r / w失败的情况(假设33%r / w操作的相等分布将失败)

使用vnodes:
这里的情况略有不同,也取决于你松散的情侣 - 现在如果你重复上面最糟糕的情况 - 你松散了几个节点,如(1,6)只有B令牌会受到r / w操作的影响,因为它是只有他们之间共享的令牌。

说,只是为了澄清可能的情景,这是你的答案。应该使用Nodetool removenode,如this document中所述。使用removenode IF仅在中减少群集大小(如果需要,可以执行此操作replace a dead node)。完成后,您的应用程序将使用Quorum重新开始工作,因为其他节点将负责先前分配给死节点的分区。

如果您使用的是官方Datastax Java驱动程序,您可能希望让驱动程序临时对抗指定DowngradingConsistencyRetryPolicy

的怪物

HTH, 卡罗