Datastax cassandra 驱动程序提供有关主机状态的错误元数据信息
Datastax cassandra driver giving wrong metadata information about host states
我有一个有 2 个 DC 的集群,每个 DC 包含 2 个节点。
DC1:
192.168.60.81
192.168.60.82
DC2:
192.168.60.242
192.168.60.247
Application is connected to 192.168.60.81 and hence the local DC for
the application is DC1.
情况一:
最初,当所有节点都启动时,当我尝试获取 cluster.metadata.allHosts
时,它会向我提供有关主机状态的信息。
情况二:
当本地数据中心 (DC1) 中的任何节点启动或关闭时,cluster.metadata.allHosts
会提供正确的主机状态信息。
问题:
当远程数据中心 (DC2) 中的任何节点出现故障时,cluster.metadata.allHosts
正确地向我提供了 DOWN 主机状态信息。但是当同一个节点重新启动时,仍然 cluster.metadata.allHosts
给我主机状态信息为 DOWN。
我注册了 Host.StateListener 以查看是否为远程 DC 中的节点触发了事件。但不幸的是,当远程 DC 中的节点恢复时,它也不会通知。
如有任何帮助,我们将不胜感激。
Cassandra version in all nodes: 2.1.4
Datastax java driver version: 2.1.9
我在邮件论坛中从 Datastax 的 Andrew Tolbert 那里得到了这个答案:
If the driver is not actively attempting to reconnect to DOWN nodes,
it is very dependent on Cassandra to deliver host UP events to the
driver. My guess is that you must be using the default load
balancing policy or DCAwareRoundRobinPolicy with 0
usedRemoteHostsPerRemoteDC, so there is never an attempt to connect to
nodes in DC2. Since you are running a fairly old version of C*, I
suspect upgrading might help.
解释:
上面的答案非常有意义,因为我的负载平衡策略是 DCAwareRoundRobinPolicy 和 0 usedRemoteHostsPerRemoteDC。因此,驱动程序并未尝试重新连接到远程 DC 中的节点。因此,从驱动程序的角度来看,远程节点的状态并不一致。
Thanks Andy.
我有一个有 2 个 DC 的集群,每个 DC 包含 2 个节点。
DC1:
192.168.60.81
192.168.60.82
DC2:
192.168.60.242
192.168.60.247
Application is connected to 192.168.60.81 and hence the local DC for the application is DC1.
情况一:
最初,当所有节点都启动时,当我尝试获取 cluster.metadata.allHosts
时,它会向我提供有关主机状态的信息。
情况二:
当本地数据中心 (DC1) 中的任何节点启动或关闭时,cluster.metadata.allHosts
会提供正确的主机状态信息。
问题:
当远程数据中心 (DC2) 中的任何节点出现故障时,cluster.metadata.allHosts
正确地向我提供了 DOWN 主机状态信息。但是当同一个节点重新启动时,仍然 cluster.metadata.allHosts
给我主机状态信息为 DOWN。
我注册了 Host.StateListener 以查看是否为远程 DC 中的节点触发了事件。但不幸的是,当远程 DC 中的节点恢复时,它也不会通知。
如有任何帮助,我们将不胜感激。
Cassandra version in all nodes: 2.1.4
Datastax java driver version: 2.1.9
我在邮件论坛中从 Datastax 的 Andrew Tolbert 那里得到了这个答案:
If the driver is not actively attempting to reconnect to DOWN nodes, it is very dependent on Cassandra to deliver host UP events to the driver. My guess is that you must be using the default load balancing policy or DCAwareRoundRobinPolicy with 0 usedRemoteHostsPerRemoteDC, so there is never an attempt to connect to nodes in DC2. Since you are running a fairly old version of C*, I suspect upgrading might help.
解释:
上面的答案非常有意义,因为我的负载平衡策略是 DCAwareRoundRobinPolicy 和 0 usedRemoteHostsPerRemoteDC。因此,驱动程序并未尝试重新连接到远程 DC 中的节点。因此,从驱动程序的角度来看,远程节点的状态并不一致。
Thanks Andy.