2012-11-30 125 views
4

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

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

我想你想你的软件有两种工作模式:普通模式,为此,必须写在两个数据中心复制和灾难模式,为此,他们需要的不是。但改变复制战略似乎不可能。

我真正想要的是两个数据中心过度配置,并且在正常操作过程中使用两个数据中心的资源,但只使用仅剩下一个数据中心的资源(性能降低)一个数据中心正在运行。

+0

声明文档http://wiki.apache.org/cassandra/Operations#Replication:“复制因子实际上并不打算在活动集群中进行更改” – Raedwald

+0

然而,FAQ并未警告不要改变复制因子一个活的群集:http://wiki.apache.org/cassandra/FAQ#change_replication – Raedwald

+0

它的工作原理,我们已经完成了,但它可能会增加修复期间的读写延迟 – tysonjh

回答

8

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

以下是multiple data centers的Datastax文档以及较早但仍具概念意义的disaster recovery (0.7)的摘要。

制作食谱与两个一致性LOCAL_QUORUMEACH_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的自定义路径设置。

+0

所以,关键是你可以选择写入的法定人数,而不仅仅是读取。 – Raedwald

+0

@Raedwald正确! – tysonjh

+0

@tysonjh你提到的一些捕获可以很容易地通过自定义的IRetryPolicy来克服,它可以降低从EACH_QUORUM到LOCAL_QUORUM的一致性级别。 – Scooletz