Cassandra LOCAL_QUORUM

时间:2015-07-28 18:03:11

标签: cassandra datastax cql cassandra-2.0 nosql

我无法理解/查找有关如何在cassandra中计算各种法定人数的信息。

假设我有一个16节点集群,它使用2个数据中心的网络拓扑策略。每个数据中心的复制因子为2(DC1:2,DC2:2)。

在这个例子中,如果我使用LOCAL_QUORUM写入,我会将数据写入4个节点(每个数据中心2个),但确认何时发生?在1个数据中心写入2个节点后?

此外,为了保持强读取一致性,我需要写节点+读取节点>复制因子。在上面的例子中,如果读取和写入都是LOCAL_QUORUM,那么我将有2 + 2,这不能保证强读取一致性。我理解正确吗?那么我需要什么级别才能确保强大的读取一致性?

这里的目标是确保如果数据中心发生故障,可以继续读取/写入,同时最大限度地减少延迟。

3 个答案:

答案 0 :(得分:5)

协调器收到来自协调器同一DC的2个节点的确认后,写操作将成功。

使用LOCAL_QUORUM进行读取和写入将获得强大的一致性,前提是相同的DC将用于读取和写入,并且仅用于此DC。

答案 1 :(得分:0)

之前的答案是正确的:“协调器从协调器的同一DC收到来自2个节点的确认后,写入将成功。”读取也是一样。

仲裁总是按N / 2 + 1计算(N是复制因子),local_quorum可以避免其他数据中心的延迟。

据我所知,RF为2和LOCAL_QUORUM你有更好的本地一致性,但在分区的情况下没有可用性:如果一个节点丢失,所有写入和读取将失败,对于该节点的范围标记及其复制品。

因此,如果您打算使用Quorum,我建议RF为3。对于2副本,你最好使用ONE。

答案 2 :(得分:0)

一旦LOCAL_QUORUM在任何一个数据中心中完成其工作,

客户端就会从corndinator节点获得WRITE或READ确认。

https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/dml/dmlClientRequestsMultiDCWrites.html

如果写一致性级别为LOCAL_ONE或LOCAL_QUORUM,则只有与协调器节点位于同一数据中心中的节点才能响应客户端请求,以使请求成功。

使用LOCAL_ONE或LOCAL_QUORUM来减少地理延迟,从而减轻对客户端写请求响应时间的影响。