Trino Cassandra 连接器正在尝试连接到具有错误端口的接触点

问题描述 投票:0回答:1

我正在使用 Cassandra 连接器,想要将 Trino 连接到三个节点(接触点),所有节点都使用 19001 端口,Trino 成功连接到第一个节点(使用 19001 端口),但无法连接到其他两个节点。

connector.name=cassandra
cassandra.contact-points=192.168.144.56,192.168.144.57,192.168.144.55
cassandra.load-policy.dc-aware.local-dc=datacenter1
cassandra.native-protocol-port=19001
cassandra.client.connect-timeout=1m
cassandra.client.read-timeout=1m
cassandra.retry-policy=BACKOFF
cassandra.username=xxxxx
cassandra.password=xxxx

日志说:

com.datastax.oss.driver.internal.core.pool.ChannelPool  [s0|/192.168.144.57:9042]  Error while opening new channel (ConnectionInitException: [s0|connecting...] Protocol initialization request, step 1 (STARTUP {CQL_VERSION=3.0.0, DRIVER_NAME=DataStax Java driver for Apache Cassandra(R), DRIVER_VERSION=4.17.0, CLIENT_ID=...}): failed to send request (io.netty.channel.StacklessClosedChannelException))

请注意,Trino(或 datastax 驱动程序)正在尝试通过 9042 连接到 192.168.144.57。

我尝试以这种方式添加其他端口:

cassandra.native-protocol-port=19001,19001,19001
但这是不正确的。

我希望 Trino 使用端口 19001 连接到其他节点。

cassandra datastax-java-driver trino trino-cassandra-connector
1个回答
0
投票

查看代码,Trino 连接器正确添加接触点以及

CassandraClientModule.createCassandraSession()
中配置的 CQL 端口:

        contactPoints.forEach(contactPoint -> cqlSessionBuilder.addContactPoint(
            createInetSocketAddress(contactPoint, config.getNativeProtocolPort())));

所以我认为问题出在你的集群上。

Cassandra Java 驱动程序 通过按照列出的顺序循环访问接触点来连接到集群。一旦它成功连接到节点,它就会经历一个初始化过程,其中包括请求成员节点列表及其相应的 CQL 端口(通过“控制连接”)。 从您的描述来看,驱动程序似乎成功连接到列表中的第一个接触点,这意味着它不再需要连接到其余的接触点。

由于驱动程序从第一个接触点获取了节点列表 + 相应的 CQL 端口,因此它会打开与所有这些节点的连接。对于节点

192.168.144.57

,驱动程序将

.57
的 CQL 端口接收为
9042
(在上面的初始化阶段),因此这就是它在该端口上打开连接的原因。
我建议与您的 Cassandra 管理员验证集群的配置,然后重试。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.