【问题标题】:Cassandra LOCAL_QUORUM is waiting for remote datacenter responsesCassandra LOCAL_QUORUM 正在等待远程数据中心响应
【发布时间】:2020-06-16 21:55:45
【问题描述】:

我们有 2 个数据中心(一个在欧洲,一个在美国)集群,每个集群都部署在 AWS 中的 4 个节点。 节点分别位于 3 个机架(可用区)中。 在集群中,我们有一个带有复制的键空间测试:NetworkTopologyStrategy, eu-west:3, us-east:3 在键空间中,我们有一个名为 mytable 的表,它只有一行 'id' 文本

现在,我们正在对数据库的性能进行一些测试。 在具有 LOCAL_QUORUM 一致性级别的 CQLSH 中,我们在 TRACING ON 的情况下执行了一些插入操作,但我们注意到请求未按预期工作。

从跟踪数据中,我们发现协调器节点按预期命中了其他 2 个本地节点,并且还向远程数据中心节点之一发送了请求。现在这里的问题是协调器不仅在等待本地节点(他们很快完成),而且也在等待远程节点。

现在,由于我们的 2 个数据中心在地理位置上相距较远,因此我们的请求需要很长时间才能完成。

注意事项: - DSE 不会发生这种情况,但我们的理解是我们不需要为 LOCAL_QUORUM 像预期的那样付出疯狂的钱

【问题讨论】:

    标签: cassandra replication database-replication consistency eventual-consistency


    【解决方案1】:

    对于功能和性能测试,最好使用驱动程序而不是 CQLSH,因为大多数时候这将是您与数据库交互的方式。

    对于这种情况,您可以使用 DC 感知策略,例如

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

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

    【讨论】:

    • Cassandra 驱动程序应该默认设置 DCAwareRoundRobinPolicy 并且它应该是令牌感知的。而且我们的分布设置方式我知道我从驱动程序中击中了正确的区域
    【解决方案2】:

    当非零 dclocal_read_repair_chance 触发对远程 DC 的查询时,您很可能会点击 CASSANDRA-9753。您需要检查跟踪以获取有关触发查询读取修复的提示。如果你真的明白了,那么你可以将dclocal_read_repair_chance 设置为 0 - 这个参数无论如何都被弃用了......

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多