故障转移到远程数据中心 - Cassandra

时间:2015-03-31 11:12:19

标签: cassandra cluster-computing failover

我们正面临着一个我们没想到的问题,在Cassandra我们有一个由6个节点组成的集群,分成两个数据中心。 (见图1) http://s9.postimg.org/vyiykbosf/Cassandra_normal.png 不幸的是,我们最近遇到了一个问题,我们失去了3个节点(见图2),我们无法让集群完全可用。 http://postimg.org/image/yy3o6w10r/

在每个数据中心,我们的读取一致性为ONE,WRITE一致性为LOCAL_QUORUM。问题是我们在同一数据中心丢失了两个节点,并且当协调器设置为此数据中心中唯一可用的节点时,在写入时不满足LOCAL_QUORUM的一致性。

我们知道有onWriteTimeout方法,但我们不想降低一致性级别。 因此,当LOCAL_QUORUM不可能时,是否可以切换协调器?(即:当协调器在DataCenter II上时,无法写入,然后重试将协调器切换到数据中心I上的可用节点)

我们找到了Class DCAwareRoundRobinPolicy,但我不确定它是如何工作的,以及它是否符合我们的需要。 你们知道远程数据中心的主机是如何选择的吗?在哪里设置这些主机的列表?

此致

3 个答案:

答案 0 :(得分:2)

抱歉,我的第一个回复已被删除,因为它只询问您是否找到并回答。

然而,我最终确实找到了答案。

因此,如果您有2个DC,每个DC上有3个节点,复制因子为3。 如果一个DC发生故障或DC上的一个节点发生故障,并希望获得local_quourm。然后,您需要使用此

连接到群集

http://grepcode.com/file/repo1.maven.org/maven2/com.datastax.cassandra/cassandra-driver-core/2.0.7/com/datastax/driver/core/policies/DCAwareRoundRobinPolicy.java#172

第172行,

Set "localDc"to your DC name, E.G "DC1"
Set "usedHostsPerRemoteDc" to the number of of nodes to query in DC2, E.G 3
Set "allowRemoteDCsForLocalConsistencyLevel" to true.

在我们的测试中,当我们杀死本地应用程序时,我们的应用程序切换到远程DC。

但请注意:这附带一致性警告...... 因为这可能会破坏一致性保证,如果你对此感到满意,那么使用弱,一,二或三等弱势的人可能会更好。

答案 1 :(得分:0)

假设您正在使用Java驱动程序(其他驱动程序可能采取不同的行为),可以从联系点列表连接的第一个主机将确定您的本地DC。为每个DC使用专用群集实例应该允许您实现故障转移方案。

答案 2 :(得分:0)