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

Spring Boot 3.0.0连接IPv6环境Cassandra集群失败求助

Spring Boot 3.0.0 + Spring Data Cassandra 4.0.0 连接IPv6 Cassandra集群失败排查

问题背景

将Spring Boot升级至v3.0.0、Spring Data Cassandra升级至v4.0.0后,无法连接测试环境(stg env)的Cassandra集群。该集群采用IPv6地址,数据中心非DC1。本地可正常连接localhost的Cassandra,但测试环境连接失败,抛出AllNodesFailedException。已添加程序化配置localDC的CqlSession Bean,同时配置了application.yml,相关配置及报错日志如下:

程序化配置类

@Bean(destroyMethod = "close")
public CqlSession session() {
    CqlSession session = CqlSession.builder() 
        .addContactPoint(InetSocketAddress.createUnresolved("[240b:c0e0:1xx:xxx8:xxxx:x:x:x]", port))
            .withConfigLoader(
                    DriverConfigLoader.programmaticBuilder()
                            .withString(DefaultDriverOption.LOAD_BALANCING_LOCAL_DATACENTER, localDatacenter)                              
                            .withString(DefaultDriverOption.AUTH_PROVIDER_PASSWORD,password)
                            .withString(DefaultDriverOption.CONNECTION_INIT_QUERY_TIMEOUT,"10s")
                            .withString(DefaultDriverOption.CONNECTION_CONNECT_TIMEOUT, "20s")
                            .withString(DefaultDriverOption.REQUEST_TIMEOUT, "20s")
                            .withString(DefaultDriverOption.CONTROL_CONNECTION_TIMEOUT, "20s")
                            .withString(DefaultDriverOption.SESSION_KEYSPACE,keyspace)
                            .build())
            //.addContactPoint(InetSocketAddress.createUnresolved(InetAddress.getByName(contactPoints).getHostName(), port))
            .build();
    }
    return session;

application.yml配置

spring:
  data:
    cassandra:
      keyspace-name: xxx
      contact-points: [xxxx:xxxx:xxxx:xxx:xxx:xxx]
      port: xxx
      local-datacenter: xxxx
      use-dc-aware: true
      username: xxxxx
      password: xxxxx
      ssl: true
      SchemaAction: CREATE_IF_NOT_EXISTS

测试环境报错日志(中文翻译)

Caused by: com.datastax.oss.driver.api.core.AllNodesFailedException: 无法连接到任何接触点,请确保提供了有效的地址(仅显示前1个节点,可调用getAllErrors()查看更多):
节点(endPoint=/[240b:cOe0:102:xxxx:xxxx:x:x:x]:3xxx,hostId=null,hashCode=4e9ba6a8):
[com.datastax.oss.driver.api.core.connection.ConnectionInitException: [s0|controllid:0x984419ed,L:/[240b:cOe0:102:5dd7:xxxx:x:x:xxx]:4xxx - R:/[240b:c0e0:102:xxxx:xxxx:x:x:x]:3xxx] 
协议初始化请求第1步(OPTIONS):意外失败,com.datastax.oss.driver.apt.core.connection.ClosedConnectionException: 与远程节点的连接已丢失]

排查方向

  • IPv6地址格式与拼写检查
    • 程序化配置中InetSocketAddress.createUnresolved的IPv6地址无需额外加方括号,直接传入纯IPv6字符串(如"240b:c0e0:1xx:xxx8:xxxx:x:x:x")即可,Java会自动处理IPv6格式。
    • 对比日志中的地址:日志里出现cOe0(字母O)和c0e0(数字0)的差异,确认配置中的IPv6地址是否存在拼写错误。
  • 配置冲突与完整性
    • Spring Data Cassandra检测到自定义CqlSession Bean时,会忽略application.yml中的配置,导致SSL、用户名等配置未生效。需在程序化配置中补充缺失项:
      • 添加SSL配置:withString(DefaultDriverOption.SSL_ENABLED, "true")
      • 添加用户名配置:withString(DefaultDriverOption.AUTH_PROVIDER_USERNAME, username)
  • 数据中心名称验证
    • 确认localDatacenter的值与Cassandra集群的DC名称完全匹配(大小写敏感),可通过nodetool status命令查看集群DC名称。
  • 网络连通性验证
    • 在测试环境服务器上用nc -zv [IPv6地址] 端口测试网络连通性,确认端口未被防火墙/安全组拦截,且服务器已正确配置IPv6路由。
  • 驱动版本兼容性
    • 确认Spring Data Cassandra 4.0.0对应DataStax Java Driver 4.x的依赖版本匹配,避免版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:30:41