Cassandra在主机的不同端口上创建池

时间:2019-03-27 08:02:45

标签: cassandra port connection-pooling host

我的服务器上的Kubernetes上运行着10个Cassandra节点,并在端口10023上公开了该服务的1个联系点。

但是,当datastax驱动程序尝试与群集的其他节点建立连接时,它使用暴露的端口而不是默认端口,并且出现以下错误:

com.datastax.driver.core.ConnectionException: [/10.210.1.53:10023] Pool was closed during initialization

有没有办法暴露一个单一的接触点,并使其与标准端口(9042)上的其他节点通信?

我检查了datastax文档中是否有任何与其相关的内容,但没有发现太多。

这就是我连接到群集的方式

Cluster.Builder builder = Cluster.builder();
        builder.addContactPoints(address)
                .withPort(Integer.valueOf(10023))
                .withCredentials(user, password)
                .withMaxSchemaAgreementWaitSeconds(600)
                .withSocketOptions(
                        new SocketOptions()
                                .setConnectTimeoutMillis(Integer.valueOf(timeout))
                                .setReadTimeoutMillis(Integer.valueOf(timeout))
                ).build();
        Cluster cluster = builder.withoutJMXReporting().build();
        Session session = cluster.connect();

1 个答案:

答案 0 :(得分:0)

驱动程序联系第一个节点后,它将获取有关群集的信息,并使用此信息,并且此信息包括Cassandra侦听的端口。

要实现您要执行的操作,您需要Cassandra在相应的端口上进行侦听-这是通过native_transport_port的{​​{1}}参数进行配置的。

此外,默认情况下,Cassandra驱动程序将尝试连接到群集中的所有节点,因为它使用DCAware / TokenAware l oad balancing policy。如果您只想使用一个节点,则需要使用cassandra.yaml而不是默认策略。但是从性能角度来看并不是最佳选择。

我建议重新考虑如何将Cassandra暴露给客户。