You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Trino Cassandra连接器连接多节点时端口错误问题求助

解决Trino Cassandra连接器连接集群节点时端口不匹配问题

问题核心

Trino能通过19001端口连接集群第一个节点,但连接其余节点时,DataStax驱动自动使用默认的9042端口,导致连接失败。这是因为驱动会从Cassandra集群的系统元数据表中获取节点端口,而非一直沿用连接器配置的端口。

解决方案

方案1:统一Cassandra集群节点的端口配置

这是最根本的解决方式,确保所有Cassandra节点本身使用19001端口对外提供服务:

  • 登录每个Cassandra节点,找到配置文件cassandra.yaml;
  • 修改native_transport_port参数为19001:
    native_transport_port: 19001
    
  • 重启每个Cassandra节点的服务,确保配置生效;
  • 重启Trino集群,让连接器重新获取集群元数据。

方案2:强制Trino驱动使用固定端口(无需修改Cassandra节点)

如果无法修改Cassandra节点的配置,可通过Trino连接器的高级驱动配置,强制驱动对所有节点使用19001端口:

  • 修改Trino的Cassandra连接器配置文件(通常在etc/catalog/cassandra.properties),替换原有的cassandra.contact-points和cassandra.native-protocol-port配置,添加以下驱动自定义配置:
    connector.name=cassandra
    cassandra.load-policy.dc-aware.local-dc=datacenter1
    cassandra.client.connect-timeout=1m
    cassandra.client.read-timeout=1m
    cassandra.retry-policy=BACKOFF
    cassandra.username=xxxxx
    cassandra.password=xxxx
    # 自定义DataStax驱动配置,指定固定端口
    cassandra.advanced.driver-config=datastax-java-driver {
      basic {
        contact-points = [
          { address = "192.168.144.56", port = 19001 },
          { address = "192.168.144.57", port = 19001 },
          { address = "192.168.144.55", port = 19001 }
        ]
      }
      advanced {
        metadata {
          schema {
            # 使用固定端口解析器,忽略集群元数据中的端口
            port-resolver = fixed
          }
        }
      }
    }
    
  • 重启Trino集群,使配置生效。

原因说明

Trino的Cassandra连接器基于DataStax Java驱动,其连接逻辑为:

  • 初始连接时,使用配置的contact-points和native-protocol-port连接节点;
  • 连接成功后,驱动会从该节点的system.local(本地节点信息)和system.peers(集群其他节点信息)表中读取所有节点的地址和端口;
  • 如果这些系统表中记录的端口是Cassandra默认的9042,驱动后续连接其他节点时会自动使用9042,而非连接器配置的19001;
  • 直接给cassandra.native-protocol-port配置多个端口无效,因为该参数仅用于初始连接的端口,不覆盖后续节点的端口解析。

内容的提问来源于stack exchange,提问作者danmo41

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:31:21