【问题标题】:Usage of the LOCAL_QUORUM consistency level in Datastax driverDatastax 驱动程序中 LOCAL_QUORUM 一致性级别的使用
【发布时间】:2018-07-09 05:21:04
【问题描述】:

由于某些原因,我需要查询我的 cassandra 集群中的特定数据中心。根据the documentation,我可以使用LOCAL_QUORUM的一致性级别:

返回当前副本达到法定人数后的记录 协调员报告的数据中心。避免延迟 数据中心间通信。

我是否正确理解,为了为当前查询指定一个特定的数据中心,我必须在属于这个特定 DC 的给定端点上构建一个集群?

比如说,我有两个带有以下节点的 DC:

DC1: 172.0.1.1, 172.0.1.2
DC1: 172.0.2.1, 172.0.2.2

因此,为了使用 DC1,我构建了一个集群:

Cluster cluster = Cluster.builder().addContactPoint("172.0.1.1").build();
Session session = cluster.connect();
Statement statement = session.prepare("select * from ...").bind().setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
ResultSet resultSet = session.execute(session);

这样做是否合适?

【问题讨论】:

    标签: java cassandra datastax datastax-java-driver cassandra-3.0


    【解决方案1】:

    DCAwwareRoundRobinPolicy 会自行选择使用“最小网络距离”算法找到的数据中心。为确保它连接到您想要的位置,您应该将 DC 指定为参数。

    我是这样告诉我们的开发团队这样做的:

    Builder builder = Cluster.builder()
      .addContactPoints(nodes)
      .withQueryOptions(new QueryOptions()
        .setConsistencyLevel(ConsistencyLevel.LOCAL_ONE))
      .withLoadBalancingPolicy(new TokenAwarePolicy(
        new DCAwareRoundRobinPolicy.Builder()
          .withLocalDc("DC1").build()))
      .withPoolingOptions(options);
    

    注意:这可能适用于您的情况,也可能不适用于您的情况,但我是否建议将TokenAwarePolicy 与嵌套在内部DCAwareRoundRobin 一起使用(指定本地DC)。这样,任何指定分区键的操作都会自动路由到正确的节点,而无需协调节点所需的额外跃点。

    【讨论】:

    • 哇 :) 非常感谢
    • 没问题!尽管在我的示例中我确实指定了LOCAL_ONE 的一致性级别,但您也需要对其进行调整。
    【解决方案2】:

    根据Clusterdocumentation

    集群对象与其中一个对象保持永久连接 它仅用于维护有关信息的集群节点 集群的状态和当前拓扑

    另外,因为a default load balancing policyDCAwareRoundRobinPolicy,这种方法应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 2015-02-27
      • 2017-06-25
      • 2020-09-27
      • 2021-01-22
      • 2020-12-02
      • 2018-07-26
      • 2017-04-26
      • 2017-06-23
      相关资源
      最近更新 更多