我们使用Cassandra 3.9作为后端。我们希望在活动待机模式中支持地理多样化,以便在活动数据中心发生灾难时我们希望将所有请求切换为待机状态数据中心。我们计划将数据中心和“LOCAL_QUORUM”的复制因子设置为3,作为仅活动数据中心的写入一致性级别。
是否可以仅为活动数据中心设置“LOCAL_QUORUM”。
如果我们采用上述方法,我们担心数据是否会 在备用数据中心同步,因为所有写请求都将发生 异步。有没有办法识别数据已更新 成功进入待机数据中心。
请告知我们有关处理活动待机数据中心的更好策略/方法。
答案 0 :(得分:1)
对于你的问题:
1)LOCAL_QUORUM表示只有在协调器所在的数据中心达到QUORUM时,您的读取或写入才会成功。所以,是的,如果您定义数据中心并使用类似
的内容cluster.builder()
.withLoadBalancingPolicy(DCAwareRoundRobinPolicy.builder()
.withLocalDc("DC1")
.withUsedHostsPerRemoteDc(3).build())
取自connect to local cassandra nodes using datastax java driver? - 你在DC1中有LOCAL_ QUORUM。
单独使用LOCAL_QUORUM复制将继续复制到所有数据中心,并尝试维护为每个数据中心定义的复制因子,在您的情况下为每个DC 3。
来自该示例的奖励 - 在数据中心损失的情况下定义的行为:
如果usedHostsPerRemoteDc> 0,然后如果查询没有本地主机 如果查询的一致性级别是,则可以访问数据中心 不是LOCAL_ONE或LOCAL_QUORUM,然后是usedHostsPerRemoteDc主机 每个远程数据中心将由策略尝试作为后备。通过 默认情况下,LOCAL_ONE和LOCAL_QUORUM不会使用远程主机, 因为这会在某种程度上改变一致性水平的含义 打破一致性合同(这可以被覆盖 allowRemoteDCsForLocalConsistencyLevel())。
2)如上所述,复制始终保持配置。无论如何,您将需要一些监视来检查是否有任何东西是健康的(所有节点,提示,日志等)。
如果您真的担心所有数据中心都具有一致的数据,您可以使用EACH_QUORUM,它只在每个数据中心达到法定数量时才能成功返回。但这可能会严重影响延迟。
如果您的网络连接足够好"你有滚动修理你应该没关系LOCAL_QUORUM。
另请参阅:http://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_config_consistency_c.html