升级到Cassandra Java驱动程序4.x,出现错误“您指定dc1为本地DC,但某些联系点来自其他DC”

nc1teljy  于 2023-02-04  发布在  Cassandra
关注(0)|答案(2)|浏览(155)

我们运行的是datastax java driver 1.9版本,我们的配置如下所示:

cassandra.contactpoints=tfi-db-ddac-001.tfi.myCompany.net,tfi-db-ddac-002.tfi.myCompany.net
cassandra.username=username
cassandra.password=password
cassandra.keyspace.create=CREATE KEYSPACE myKeySpace WITH replication = {'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 1};
cassandra.keyspace_log.create=CREATE KEYSPACE myKeySpace_log WITH replication = {'class' : 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 1};
cassandra.log_entries.write_consistency_level=TWO
cassandra.metric_monitor.write_consistency_level=TWO
cassandra.app_tracking.write_consistency_level=TWO

使用此命令并将依赖项更新为4.x:

try (CqlSession session = CqlSession.builder()
                .addContactPoint(new InetSocketAddress("tfi-db-ddac-001.tfi.myCompany.net", 9042))
                .addContactPoint(new InetSocketAddress("tfi-db-ddac-002.tfi.myCompany.net", 9042))
                .withLocalDatacenter("dc1")
                .withAuthCredentials("username","password")
                .build()) {

我总是得到这个错误:

You specified dc1 as the local DC, but some contact points are from a different DC: Node(endPoint=tfi-db-ddac-002.tfi.myCompany.net/10.8.64.97:9042, hostId=43e3df16-1e44-4aff-b0ac-2fee0e17ace5, hashCode=2043258b)=ggi-l, Node(endPoint=tfi-db-ddac-001.tfi.myCompany.net/10.8.64.95:9042, hostId=4d5b9290-8c92-4f1a-b348-51d42d439e2b, hashCode=7f1da1b2)=ggi-s; please provide the correct local DC, or check your contact points

有人能给我一个建议/例子,请如何迁移到4.xCassandra。
先谢了!

vulvrdjw

vulvrdjw1#

所以这个:

'DC1' : 1

还有这个

.withLocalDatacenter("dc1")

使用的数据中心名称 * 不 * 相同。请记住,Cassandra是区分大小写的。由于旧的驱动程序配置工作,我猜数据中心名称应该是大写的DC1。尽管如此,您总是可以检查nodetool status只是为了确保。

ozxc1zmp

ozxc1zmp2#

Cassandra Java驱动程序的版本4是从头开始重构的,因此它与旧版本(包括DSE版本的驱动程序)不兼容。
与旧版本的Java驱动程序相比,最大的区别之一是内置的负载平衡策略(DefaultLoadBalancingPolicyDcInferringLoadBalancingPolicy)将只连接到一个数据中心。因此,驱动程序将只接受属于配置的本地DC的联系点(如果使用默认负载平衡策略)。
在初始化阶段,驱动程序明确检查已配置接触点的DC(参见OptionalLocalDcHelper. checkLocalDatacenterCompatibility())。当驱动程序检测到“坏”接触点时,它将记录WARN消息,其中包含以下指令:(a)提供正确的本地DC,或(b)检查接触点列表。
它与群集DC是否都不是应用程序示例的“本地”无关--当驱动程序检测到这种不推荐的配置时,它仍将向您发出警报。由于它被记录为警告(WARN),因此应用程序仍将工作,但驱动程序将永远不会在查询计划中包括远程节点。
有关详细信息,请参阅Load balancing with the Java driver。干杯!

相关问题