我有一个包含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
时,它会向我提供有关主机状态为UP的信息。
情况2:
当本地数据中心(DC1)中的任何节点上升或下降时,cluster.metadata.allHosts
会为我提供正确的主机状态信息。
问题:
当远程数据中心(DC2)中的任何节点发生故障时,cluster.metadata.allHosts
会将主机状态信息正确地显示为DOWN。但是当同一节点重新启动时,cluster.metadata.allHosts
仍然将主机状态信息显示为DOWN。
我在Host.StateListener中注册,以查看是否为远程DC中的节点触发了事件。但不幸的是,当远程DC中的节点重新启动时,它也不会通知。
任何帮助都将不胜感激。
所有节点中的Cassandra版本:2.1.4
Datastax java驱动程序版本:2.1.9
答案 0 :(得分:2)
我在邮件论坛中从Datastax的Andrew Tolbert那里得到了这个答案:
如果驱动程序没有主动尝试重新连接到DOWN节点, 它非常依赖于Cassandra来向主机提供主机UP事件 驱动程序。我的猜测是你必须使用默认负载 平衡策略或DCAwareRoundRobinPolicy为0 usedRemoteHostsPerRemoteDC,因此永远不会尝试连接 DC2中的节点。由于您运行的是相当旧版本的C *,我 怀疑升级可能会有所帮助。
<强>解释强>
上面的答案非常有意义,因为我的负载均衡策略是DCAwareRoundRobinPolicy,其中有0使用了RemoteHostsPerRemoteDC。因此,驱动程序没有尝试重新连接到远程DC中的节点。因此,远程节点的状态与驱动程序的视图不一致。
谢谢安迪。