首页 文章

Datastax java驱动程序的自动故障转移不适用于OutOfMemoryError节点故障

提问于
浏览
1

我不确定我是否遗漏了一些东西,但是当由于OutOfMemoryError导致cassandra节点出现故障时,我的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);

有什么建议?

1 回答

  • 1

    每当cassandra节点由于OutOfMemoryError而关闭时,我的DataStax Java驱动程序都没有检测到它并仍然向它发送读取请求 .

    根据你的描述,我收集了Cassandra节点OOM,但没有退出)我怀疑如果真的发生故障,驱动程序会检测到它 . 如果那个's the case, I would argue that it'服务器的行为错误,而且Cassandra确实没有像OOM那样快速死亡(或根本没有),请参阅CASSANDRA-7507 .

    也就是说,当Cassandra行为不端时,司机应该更好地保护你,并且会在JAVA-426之后得到改善 .

相关问题