Java Datastax Cassandra驱动程序默认负载平衡策略的问题
如文件所述,这是TokenAware(dcawarerRoundRobinPolicy)。我的集群配置如下所示Java Datastax Cassandra驱动程序默认负载平衡策略的问题,java,cassandra,datastax,Java,Cassandra,Datastax,如文件所述,这是TokenAware(dcawarerRoundRobinPolicy)。我的集群配置如下所示 lazy val session = { val poolOptions = new PoolingOptions() poolOptions.setMaxConnectionsPerHost(HostDistance.LOCAL, config.getInt("pooling.max-local")) poolOptions.setCoreConnectionsPerHost(Hos
lazy val session = {
val poolOptions = new PoolingOptions()
poolOptions.setMaxConnectionsPerHost(HostDistance.LOCAL, config.getInt("pooling.max-local"))
poolOptions.setCoreConnectionsPerHost(HostDistance.LOCAL, config.getInt("pooling.min-local"))
poolOptions.setMaxConnectionsPerHost(HostDistance.REMOTE, config.getInt("pooling.max-remote"))
poolOptions.setCoreConnectionsPerHost(HostDistance.REMOTE, config.getInt("pooling.min-remote"))
Cluster.builder.addContactPoints(hosts)
.withPoolingOptions(poolOptions)
.build
.connect
}
我的集群如下所示:
DC1
10.dc1.rac1.ip1
10.dc1.rac2.ip1
DC2
10.dc2.rac1.ip1
10.dc2.rac2.ip1
应用程序正在第五台不相关的计算机上运行。问题似乎与localDc自动发现有关。根据源代码,驱动程序应该将本地DC检测为主机列表中的第一个节点。下面是发生的情况:
- 如果hosts=[10.dc1.rac1.ip1,10.dc2.rac1.ip1],应用程序将以50/50的比例成功,无hostAvailableException。本地Dc将为“dc1”或“dc2”
- 如果hosts=[10.dc1.rac1.ip1,10.dc1.rac2.ip1],应用程序将以NoHostAvailableException一致失败。本地Dc将被错误地设置为“dc2”。如果我使用其他两台机器,情况也是如此。注意:应用程序的位置未更改
- 如果我在构建器中手动设置localDc,那么一切都会按预期进行。但这并不重要,因为广告的功能应该能够回退到另一个数据中心
编辑:抱歉,我应该提到我使用的是3.0.0,上面的安迪·托尔伯特对任何正在查看的人都给出了正确的答案。不幸的是,默认设置(以及除在每台计算机上明确配置正确地址之外的任何设置)似乎不允许您同时接受来自本地和远程主机的连接 您正在使用哪个版本的驱动程序?驱动程序可能正在尝试localhost,因为其中一个节点上的cassandra.yaml中的rpc_地址/广播_rpc_地址设置为localhost。你能证实是否是这样吗?此外,您还应该查看system.peers表,方法是分别对每个主机进行cqlsh并运行“select*from system.peers”,以查看每个节点的每个对等点的rpc_地址和数据_中心值。