如何确保您的 cassandra 客户端只知道本地数据中心节点?

How to make sure your cassandra client is only aware of the local data center nodes?

我有多个节点的多个数据中心,我需要让客户端先连接到本地数据中心(最近的数据中心),如果本地数据中心(最近的数据中心)关闭,让它连接到远程数据中心。

我从每个数据中心添加了两个联络点。

客户端如何识别最近的数据中心?

我在客户端使用 java 驱动程序 3.0.0。

From doc DCAwareRoundRobinPolicy:

此策略以 round-robin 方式查询本地 data-center 的节点;可选地,如果所有本地主机都失败,它还可以在远程数据中心尝试可配置数量的主机。

调用 withLocalDc 指定本地数据中心的名称。您也可以将其省略,驱动程序将使用初始化时到达的第一个联系点的数据中心。但是,请记住,驱动程序会打乱最初的联系点列表,因此这假定所有联系点都在本地数据中心。一般来说,明确提供数据中心名称是更安全的选择。

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