我们正面临一个我们没有预料到的Cassandra问题,我们将一个由6个节点组成的集群分成两个数据中心。 (见image1波纹管) http://s9.postimg.org/vyiykbosf/Cassandra_normal.png 不幸的是,我们最近面临一个问题,我们失去了3个节点(见图2波纹管),我们无法使集群完全可用。 http://postimg.org/image/yy3o6w10r/故障转移到远程数据中心 - Cassandra
在每个数据中心上,我们读取的一致性为1,写入的一致性为LOCAL_QUORUM。问题是我们在同一个数据中心上丢失了两个节点,并且当协调器被设置为该Datacenter中唯一可用的节点时,写入时一致性LOCAL_QUORUM不满足。
我们知道有onWriteTimeout方法,但我们不想降低一致性级别。 因此,当LOCAL_QUORUM不可能时,是否可以切换协调器(即:当协调器在DataCenter II上时,写入不可能,则重试将协调器切换到数据中心I上的可用节点)
我们找到了类DCAwareRoundRobinPolicy,但我不确定它是如何工作的,以及它是否符合我们的需要。 你们知道如何选择远程数据中心的主机吗?在哪里设置这些主机的列表?
问候,
谢谢你回答,但我真的不明白我在哪里可以找到任何信息,这将有助于我解决此案。也许我在这里错过了一些东西。 – HammerZEIT 2015-03-31 12:34:03
问题是它必须是一个完整的集群,分成两个数据中心。由于它必须这样,协调员可以在DCI或DCII(循环)中。如果协调器处于DCII中且LOCAL_QUORUM不满足,则写入过程将失败,并且不会在LOCAL_QUORUM在此处可以良好的DCI上重试。问题是关于如何实现/设置这样一个事实,即如果协调员的一致性不能得到满足,Cassandra会尝试写在其他DC上。 – HammerZEIT 2015-03-31 12:35:12
尝试使您的应用程序处理写入错误,并使用第二个回退到其他DC的连接来实现重试。 – 2015-03-31 13:24:09