诀窍是改变通过 API 为写入提供的一致性设置,而不是改变复制因子。当只有一个数据中心可用时,在灾难期间使用LOCAL_QUORUM
写入设置。在正常操作期间使用EACH_QUORUM
以确保两个数据中心都有数据副本。读取可以LOCAL_QUORUM
一直使用。
以下是多个数据中心的 Datastax 文档摘要,以及较旧但在概念上仍然相关的灾难恢复 (0.7)。
使用两种一致性LOCAL_QUORUM
和EACH_QUORUM
.
这里,“local”表示单个数据中心的本地,而“each”表示在每个数据中心都严格保持同一级别的一致性。
假设您有 2 个数据中心,其中一个严格用于灾难恢复,那么您可以将复制因子设置为...
3 个用于主写入/读取中心,2 个用于故障转移数据中心
现在,根据您的数据实际写入灾难恢复节点的重要性,您可以使用 EACH_QUORUM 或 LOCAL_QUORUM。假设您正在使用复制放置策略NetworkTopologyStrategy (NTS)
,
LOCAL_QUORUM
on writes 只会延迟客户端本地写入 DC1 并异步写入 DC2 中的恢复节点。
EACH_QUORUM
将确保复制所有数据,但会延迟写入,直到两个 DC 确认成功操作。
对于读取,最好只使用 LOCAL_QUORUM 来避免inter-data center latency
.
这种方法有问题!如果您选择在写入时使用 EACH_QUORUM,则会增加潜在的故障点(DC2 已关闭,DC1-DC2 链接已关闭,无法满足 DC1 仲裁)。
好处是一旦您的 DC1 出现故障,您就有了有效的 DC2 灾难恢复。另请注意,在第二个链接中,它讨论了用于正确路由 IP 的自定义告密设置。