cassandra本地\u仲裁正在等待远程数据中心响应

iecba09b  于 2021-06-10  发布在  Cassandra
关注(0)|答案(2)|浏览(428)

我们有2个数据中心(一个在欧盟,一个在美国)集群,每个集群有4个节点部署在aws中。每个节点分为3个机架(可用区)。在集群中,我们有一个复制的键空间测试:networktopologystrategy,eu-west:3,美国-east:3 in 键空间我们有一个名为mytable的表,它只有一行id文本
现在,我们正在测试数据库的性能。在一致性级别为local\u quorum的cqlsh中,我们进行了一些插入,并启用了跟踪,我们注意到请求没有按预期工作。
从跟踪数据中,我们发现协调器节点正在按预期命中另外两个本地节点,并向其中一个远程数据中心节点发送请求。现在的问题是,协调器不仅在等待本地节点(他们很快就完成了),而且在等待远程节点。
现在,由于我们的两个数据中心在地理上相距遥远,我们的请求需要很长时间才能完成。
注:-dse不会发生这种情况,但我们的理解是,我们不需要为当地的法定人数支付疯狂的资金,以便按预期工作

watbbzwu

watbbzwu1#

你很有可能在非零时击中Cassandra-9753 dclocal_read_repair_chance 将触发对远程dc的查询。您需要检查跟踪以获取有关触发查询的读取修复的提示。如果你真的明白了,那你就可以 dclocal_read_repair_chance 到0-此参数已弃用。。。

djmepvbi

djmepvbi2#

对于功能和性能测试,最好使用驱动程序而不是cqlsh,因为大多数情况下,这将是您与数据库交互的方式。
对于这种情况,您可以使用dc-aware策略,如

Cluster cluster = Cluster.builder()
    .addContactPoint("127.0.0.1")
    .withLoadBalancingPolicy(
            DCAwareRoundRobinPolicy.builder()
                    .withLocalDc("myLocalDC")
                    .build()
    ).build();

这里的示例对此进行了修改,其中删除了所有允许与远程数据中心交互的子句,因为您的目的是隔离对本地数据中心的调用。

相关问题