0

我在 2 个数据中心设置了 cassandra,每个数据中心有 4 个节点,每个节点的复制因子为 2。

一致性级别为 ONE(默认设置)

尝试以 ONE 的一致性级别读取数据时,我遇到了一致性问题。如 DataStax 文档中所述,一致性级别(读取 + 写入)应大于复制因子。

我决定将写入一致性级别更改为 2,将读取一致性级别更改为 ONE,这解决了单个数据中心的不一致问题。但是在多个数据中心的情况下,问题将通过一致性级别为 LOCAL_QUORUM 来解决。

我将如何实现写入应该是(LOCAL_QUORUM + TWO),以便我应该写入本地数据中心以及 2 个节点。

4

1 回答 1

1

只需LOCAL_QUORUM在您想要的数据中心中编写 using 即可。如果每个数据中心的复制因子为 2,那么您在“本地”数据中心写入的数据最终将被复制到“其他”数据中心(但您无法保证何时)。

LOCAL_QUORUM意思是:“写操作返回后,数据已有效写入本地数据中心的法定节点”

TWO意思是:“写操作返回后,数据已写入任意数据中心的至少2个节点”

如果你想LOCAL_QUORUM在同一个数据中心读取你刚刚写入的数据,你应该使用LOCAL_ONE一致性。如果您使用 阅读ONE,那么最近的副本有可能在“远程”数据中心中,因此 Cassandra 尚未复制。

这也取决于在驱动程序级别配置的负载平衡策略。您可以在此处阅读更多相关信息:https ://datastax.github.io/java-driver/manual/load_balancing/

于 2016-10-18T09:08:58.033 回答