Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Datastax cassandra驱动程序提供有关主机状态的错误元数据信息_Java_Cassandra_Datastax_Datastax Java Driver - Fatal编程技术网

Java Datastax cassandra驱动程序提供有关主机状态的错误元数据信息

Java Datastax cassandra驱动程序提供有关主机状态的错误元数据信息,java,cassandra,datastax,datastax-java-driver,Java,Cassandra,Datastax,Datastax Java Driver,我得到了一个包含2个DC的集群,每个DC包含2个节点 DC1: 192.168.60.81 192.168.60.82 DC2: 192.168.60.242 192.168.60.247 应用程序连接到192.168.60.81,因此本地DC用于 应用程序是DC1 情景1: 最初,当所有节点都启动时,以及当我尝试获取cluster.metadata.allHosts时,它会向我提供有关主机启动状态的信息 情景2: 当本地数据中心(DC1)中的任何节点上升或下降时,cluster.metad

我得到了一个包含2个DC的集群,每个DC包含2个节点

DC1:
192.168.60.81
192.168.60.82

DC2:
192.168.60.242
192.168.60.247
应用程序连接到192.168.60.81,因此本地DC用于 应用程序是DC1

情景1:

最初,当所有节点都启动时,以及当我尝试获取
cluster.metadata.allHosts
时,它会向我提供有关主机启动状态的信息

情景2:

当本地数据中心(DC1)中的任何节点上升或下降时,
cluster.metadata.allHosts
会为我提供正确的主机状态信息

问题:

当远程数据中心(DC2)中的任何节点停机时,
cluster.metadata.allHosts
会正确地向我提供主机状态信息。但是,当同一个节点恢复时,仍然
cluster.metadata.allHosts
将主机状态信息作为DOWN

我向Host.StateListener注册,查看是否为远程DC中的节点触发了事件。但不幸的是,当远程DC中的节点返回时,它也不会发出通知

任何帮助都将不胜感激

所有节点中的Cassandra版本:2.1.4
Datastax java驱动程序版本:2.1.9


我在邮件论坛上从Datastax的Andrew Tolbert那里得到了这个答案:

如果驱动程序未主动尝试重新连接到故障节点, 它非常依赖Cassandra向客户提供主办活动 司机。我的猜测是,您必须使用默认加载 使用0平衡策略或dcawarerRoundRobinPolicy 使用RemoteHostsPerRemoteDC,因此从未尝试连接到 DC2中的节点。因为您运行的是一个相当旧的C*版本,所以我 怀疑升级可能有帮助

说明:

上面的答案非常有意义,因为我的负载平衡策略是dcawarerRoundRobinPolicy和0 usedRemoteHostsPerRemoteDC。因此,驱动程序没有尝试重新连接到远程DC中的节点。因此,从驱动程序的角度来看,远程节点的状态不一致

谢谢你,安迪


我在Host.StateListener中看到的另一个问题是,本地DC中的主机状态通知是无序的。如果某个节点再次返回,则我收到的通知将向上、向下,并最终再次设置为向上:(