Java Datastax cassandra驱动程序提供有关主机状态的错误元数据信息
我得到了一个包含2个DC的集群,每个DC包含2个节点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
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.4Datastax java驱动程序版本:2.1.9
我在邮件论坛上从Datastax的Andrew Tolbert那里得到了这个答案: 如果驱动程序未主动尝试重新连接到故障节点, 它非常依赖Cassandra向客户提供主办活动 司机。我的猜测是,您必须使用默认加载 使用0平衡策略或dcawarerRoundRobinPolicy 使用RemoteHostsPerRemoteDC,因此从未尝试连接到 DC2中的节点。因为您运行的是一个相当旧的C*版本,所以我 怀疑升级可能有帮助 说明: 上面的答案非常有意义,因为我的负载平衡策略是dcawarerRoundRobinPolicy和0 usedRemoteHostsPerRemoteDC。因此,驱动程序没有尝试重新连接到远程DC中的节点。因此,从驱动程序的角度来看,远程节点的状态不一致 谢谢你,安迪
我在Host.StateListener中看到的另一个问题是,本地DC中的主机状态通知是无序的。如果某个节点再次返回,则我收到的通知将向上、向下,并最终再次设置为向上:(