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

问题描述 投票:1回答:3

我们正面临着一个我们在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,但我不确定它是如何工作的,如果它符合我们的需要。你们知道远程数据中心的主机是如何选择的吗?在哪里设置这些主机的列表?

问候,

cassandra cluster-computing failover
3个回答
2
投票

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

但是我最终确实找到了答案。

因此,如果您有2个DC,每个节点上有3个节点,复制因子为3.并且如果一个DC发生故障或DC上的1个节点发生故障,则希望获得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。

但是请注意:这带有一致性警告......因为这可能会破坏一致性保证,如果你对它很好,那么使用较弱的一个,如两个或两个较弱的可能性更好


0
投票

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


© www.soinside.com 2019 - 2024. All rights reserved.