诀窍是改变通过用于写入的API设置给定的,而不是改变所述复制因子的一致性,。如果只有一个数据中心可用,请在灾难期间使用LOCAL_QUORUM
设置进行写入。在正常操作期间,使用EACH_QUORUM
确保两个数据中心都有数据副本。读取一直可以使用LOCAL_QUORUM
。
以下是multiple data centers的Datastax文档以及较早但仍具概念意义的disaster recovery (0.7)的摘要。
制作食谱与两个一致性LOCAL_QUORUM
和EACH_QUORUM
适合您的需求。
这里“本地”是指本地到单个数据中心,而“每个”是指在每个数据中心中严格保持同一级别的一致性。
假设你有2个数据中心,一个严格用于灾难恢复,那么你可以设置复制因子...
3主写入/读取中心,以及两个用于故障转移数据中心
现在这取决于是多么的重要,你的数据实际写入到灾难恢复节点,您可以使用EACH_QUORUM或LOCAL_QUORUM。假设你使用的是复制放置策略NetworkTopologyStrategy (NTS)
,
LOCAL_QUORUM
上写只会耽误客户端在本地写入DC1和异步写入到DC2你的恢复节点(S)。
EACH_QUORUM
将确保所有数据被复制,但会延迟写入,直到两个区议会确认成功的操作。
对于读取很可能最好还是用LOCAL_QUORUM避免inter-data center latency
。
有这种方法的捕获!如果您在写入时选择使用EACH_QUARUM,则会增加潜在故障点(DC2处于关闭状态,DC1-DC2链路断开,无法满足DC1仲裁)。
奖励是一旦您的DC1出现故障,您将拥有有效的DC2灾难恢复。另请注意,在第二个链接中,它提到了为定制路由IP的自定义路径设置。
声明文档http://wiki.apache.org/cassandra/Operations#Replication:“复制因子实际上并不打算在活动集群中进行更改” – Raedwald
然而,FAQ并未警告不要改变复制因子一个活的群集:http://wiki.apache.org/cassandra/FAQ#change_replication – Raedwald
它的工作原理,我们已经完成了,但它可能会增加修复期间的读写延迟 – tysonjh