我不确定我是否遗漏了一些东西,但是每当 cassandra 节点由于 OutOfMemoryError 而关闭时,我的 DataStax Java 驱动程序就不会检测到它,并且仍然向它发送读取请求。如果我手动关闭节点,它工作正常。我使用重新连接和重试策略的默认值:
LoadBalancingPolicy loadBalancingPolicy;
if (datacenter != null) {
loadBalancingPolicy = new DCAwareRoundRobinPolicy(datacenter);
} else {
loadBalancingPolicy = new RoundRobinPolicy();
}
loadBalancingPolicy = new TokenAwarePolicy(loadBalancingPolicy);
loadBalancingPolicy = LatencyAwarePolicy.builder(loadBalancingPolicy).build();
Builder builder = Cluster.builder().addContactPoints(endpoints).withLoadBalancingPolicy(loadBalancingPolicy);
有什么建议吗?
最佳答案
whenever a cassandra node is going down due to OutOfMemoryError my DataStax Java driver is not detecting it and still sending read requests to it.
根据您的描述,我推测 Cassandra 节点 OOM,但并没有真正停止运行(进程没有退出),我怀疑如果它真的停止运行,驱动程序会检测到它。如果是这种情况,我认为这是服务器的错误行为,并且 Cassandra 确实没有在 OOM 上尽快(或根本)死亡,请参阅 CASSANDRA-7507 .
也就是说,当 Cassandra 行为不当时,驱动程序应该更好地保护您,这将通过 JAVA-426 得到改善。 .
关于java - Datastax java 驱动程序的自动故障转移不适用于 OutOfMemoryError 节点故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399439/