我把dcawarerroundrobinpolicy和roundrobinpolicy搞混了
根据文档,dcawarerroundrobinpolicy首先从本地dc联系节点,然后从远程dc联系节点。
如果我没有设置usedhostsperremotedc&allowremotedcs本地一致性级别。所有的java客户机应用程序在回退的情况下仍然会转到远程dc吗??
我目前正在使用以下代码:
DCAwareRoundRobinPolicy.builder().withLocalDc(cassandraConfig.getLocalDC())
.withUsedHostsPerRemoteDc(cassandraConfig.getUsedHostsPerRemoteDc())
.allowRemoteDCsForLocalConsistencyLevel();
我在当前的生产集群中添加新的dcs时遇到了一个问题。由于上面的代码,我可以看到读/写开始在远程直流以及我刚刚加起来。尽管新的DC没有为它们设置任何复制因子。但我还是能看到交通堵塞。因为重建新节点需要几个小时才能完成,我不能让所有的应用程序到达新节点。最后,我需要停用新节点来暂时停止这种行为。
用usedhostsperremotedc和allowremotedcs移除后,本地感应级别看起来都很好。
税务文件上也说https://docs.datastax.com/en/latest-java-driver-api/com/datastax/driver/core/policies/dcawareroundrobinpolicy.builder.html#allowremotedcsforlocalconsistencylevel--
但是,在几乎所有情况下这样做都是不明智的,因为这可能会破坏一致性保证
如果以上是真的那么dcawarerroundrobinpolicy有什么用为什么roundrobinpolicy不好???
1条答案
按热度按时间rvpgvaaj1#
默认情况下,
DCAwareRoundRobinPolicy
在您提到的选项设置之前,不会转到远程dc。但这只会发生在一致性级别LOCAL_ONE
&LOCAL_QUORUM
. 如果你使用非-LOCAL_
一致性级别,那么请求也可以发送到远程dc。但它应该只发生在QUORUM
,EACH_QUORUM
,或:此策略保证不会查询远程数据中心中的任何主机,除非无法访问本地数据中心中的任何主机。
虽然看到这一点很奇怪,因为你说:
尽管新的DC没有为它们设置任何复制因子。
我建议通过jmx检查它是否真的到达了远程dc中的your表?