Rae*_*ald 4 disaster-recovery cassandra
如何配置Apache Cassandra以允许灾难恢复,以允许两个数据中心之一失败?
该DataStax文档有关使用,确保至少一个复制写入每个两个数据中心的复制策略的会谈.但是,一旦灾难真的发生,我看不出这有什么帮助.如果切换到剩余的数据中心,则所有写入都将失败,因为这些写入将无法复制到其他数据中心.
我想你希望你的软件能够在两种模式下运行:正常模式,写入必须跨数据中心复制,以及灾难模式,他们不需要.但似乎不可能改变复制策略.
我真正想要的是两个过度配置的数据中心,并且在正常操作期间使用两个数据中心的资源,但是当只有一个数据中心时,仅使用剩余数据中心的一个资源(性能降低)正在运作.
tys*_*njh 10
诀窍是改变通过API给出的一致性设置,而不是改变复制因子.LOCAL_QUORUM在灾难期间使用设置进行写入,此时只有一个数据中心可用.在正常操作期间,使用EACH_QUORUM以确保两个数据中心都具有数据副本.读取可以一直使用LOCAL_QUORUM.
以下是多个数据中心的Datastax文档摘要以及较旧但仍具有概念相关性的灾难恢复(0.7).
制作一个配方,以满足您的需求与两个一致性LOCAL_QUORUM和EACH_QUORUM.
这里,"本地"表示单个数据中心本地,而"每个"表示一致性严格保持在每个数据中心的同一级别.
假设您有2个数据中心,一个严格用于灾难恢复,那么您可以将复制因子设置为...
3表示主要写/读中心,2表示故障转移数据中心
现在,根据您的数据实际写入灾难恢复节点的严重程度,您可以使用EACH_QUORUM或LOCAL_QUORUM.假设您正在使用复制放置策略NetworkTopologyStrategy (NTS),
LOCAL_QUORUM 写入时只会延迟客户端本地写入DC1并异步写入DC2中的恢复节点.
EACH_QUORUM 将确保所有数据都被复制但会延迟写入,直到两个DC确认成功操作.
对于读取,最好只使用LOCAL_QUORUM来避免inter-data center latency.
有这种方法的捕获!如果您选择在写入时使用EACH_QUORUM,则会增加潜在的故障点(DC2关闭,DC1-DC2链路断开,无法满足DC1仲裁).
奖励是一旦你的DC1发生故障,你就有了有效的DC2灾难恢复.另请注意,在第二个链接中,它讨论了用于正确路由IP的自定义snitch设置.