配置Apache Cassandra以进行灾难恢复

Rae*_*ald 4 disaster-recovery cassandra

如何配置Apache Cassandra以允许灾难恢复,以允许两个数据中心之一失败?

DataStax文档有关使用,确保至少一个复制写入每个两个数据中心的复制策略的会谈.但是,一旦灾难真的发生,我看不出这有什么帮助.如果切换到剩余的数据中心,则所有写入都将失败,因为这些写入将无法复制到其他数据中心.

我想你希望你的软件能够在两种模式下运行:正常模式,写入必须跨数据中心复制,以及灾难模式,他们不需要.但似乎不可能改变复制策略.

我真正想要的是两个过度配置的数据中心,并且在正常操作期间使用两个数据中心的资源,但是当只有一个数据中心时,仅使用剩余数据中心的一个资源(性能降低)正在运作.

tys*_*njh 10

诀窍是改变通过API给出的一致性设置,而不是改变复制因子.LOCAL_QUORUM在灾难期间使用设置进行写入,此时只有一个数据中心可用.在正常操作期间,使用EACH_QUORUM以确保两个数据中心都具有数据副本.读取可以一直使用LOCAL_QUORUM.

以下是多个数据中心的Datastax文档摘要以及较旧但仍具有概念相关性的灾难恢复(0.7).

制作一个配方,以满足您的需求与两个一致性LOCAL_QUORUMEACH_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设置.