我有一个有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 .
Situation 1:
最初当所有节点都启动时,当我尝试获取 cluster.metadata.allHosts
时,它会向我提供有关主机状态为UP的信息 .
Situation 2:
当本地数据中心(DC1)中的任何节点上升或下降时, cluster.metadata.allHosts
会为我提供正确的主机状态信息 .
Problem:
当远程数据中心(DC2)中的任何节点发生故障时, cluster.metadata.allHosts
会将主机状态信息正确地显示为DOWN . 但是当同一个节点重新启动时, cluster.metadata.allHosts
仍然将主机状态信息显示为DOWN .
我在Host.StateListener中注册,以查看是否为远程DC中的节点触发了事件 . 但不幸的是,当远程DC中的节点重新启动时,它从不会通知 .
任何帮助,将不胜感激 .
所有节点中的Cassandra版本:2.1.4 Datastax java驱动程序版本:2.1.9
1 回答
I got this answer from Andrew Tolbert from Datastax in the mail forum:
Explanation:
上面的答案非常有意义,因为我的负载均衡策略是DCAwareRoundRobinPolicy,其中有0个usedRemoteHostsPerRemoteDC . 因此,驱动程序没有尝试重新连接到远程DC中的节点 . 因此,远程节点的状态与驱动程序的视图不一致 .