卡桑德拉 LOCAL_QUORUM

Cassandra LOCAL_QUORUM

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

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

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

另外,为了保持读的强一致性,我需要Write nodes + read nodes > replication factor。在上面的示例中,如果读取和写入都是 LOCAL_QUORUM,我将得到 2 + 2,这将无法保证读取的强一致性。我理解正确吗?那么我需要什么级别来确保强读取一致性?

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

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

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

前面的回答是正确的:"The write will be successful after the coordinator received acknowledgement from 2 nodes from the same DC of the coordinator."读取也是一样

Quorum 始终由 N/2+1(N 是复制因子)计算得出,具有 local_quorum 可避免其他数据中心的延迟。

据我了解,RF 为 2 且 LOCAL_QUORUM 您具有更好的本地一致性,但在分区的情况下不可用:如果一个节点掉线,则所有写入和读取都将在该范围内失败该节点及其副本的令牌。

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

一旦 LOCAL_QUORUM 在任何一个数据中心完成其工作,客户端将从 corrdinator 节点获得 WRITE 或 READ 确认。

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

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

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