为了账号安全,请及时绑定邮箱和手机立即绑定

AllNodesFailedException:无法到达任何联系点

AllNodesFailedException:无法到达任何联系点

汪汪一只猫 2023-08-16 16:31:58
我通过docker在三个数据中心(DC1、DC2和DC3)中设置了三个Cassandra节点(cas1、cas2和cas3)。我想使用 Java API 在 cas1 建立会话,但它无法连接并引发异常。我尝试过手动设置端口并寻找可用的解决方案,但它们不起作用。cas1创建:docker run --name cas1 -p 19041:9042 -e CASSANDRA_CLUSTER_NAME=MyCluster -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_DC=DC1 -e CASSANDRA_RACK=RAC1 -d cassandraJava代码:InetAddress addr = InetAddress.getByName("172.17.0.2");InetSocketAddress addrSoc = new InetSocketAddress(addr,19041);CqlSession session = CqlSession.builder().addContactPoint(addrSoc).build();预期结果:会话应该已建立。错误 :datastax.oss.driver.api.core.AllNodesFailedException:无法到达任何联系点,请确保您提供了有效的地址(显示前 1 个,使用 getErrors() 了解更多信息:com.datastax.oss.driver.internal.core .metadata.DefaultNode@605c5ab0(null,/172.17.0.2:19041): com.datastax.oss.driver.api.core.connection.ConnectionInitException: [s0|control|connecting...] 初始化查询启动: 写入错误)
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

面临同样的问题。通过在配置类中将节点 ip(172.18.0.2) 更改为全局 ip '127.0.0.1' 来解决。


我使用 docker-compose 命令来运行 cassandra。请查看我的 docker-compose.yml 文件:


version: '3'

services:

 n1:

  build: .

  image: cassandra-with-cqlshrc

  networks:

   - cluster

  ports:

   - "9042:9042"

networks:

 cluster:

我的 Java 中的 CassandraConfiguration 文件:


@Configuration

@EnableCassandraRepositories

public class CassandraConfiguration extends AbstractCassandraConfiguration {


    @Override

      public String getContactPoints() {

        return "127.0.0.1";

      }


      @Override

      protected String getKeyspaceName() {

        return "stockmarket";

      }

     

      @Override

      protected int getPort() {

          return 9042;

      }

}


查看完整回答
反对 回复 2023-08-16
?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

有效。我使用 IP:127.0.0.1 而不是全局 IP 和端口 19041(我明确配置的)并且它成功连接。



查看完整回答
反对 回复 2023-08-16
?
皈依舞

TA贡献1851条经验 获得超3个赞

所有 DataStax 驱动程序都从内置数据中心故障转移和来自接触点的本地推理转向。

如果使用 Spring/Springboot,则必须指定数据中心名称。将此行添加到您的 application.properties 中: spring.data.cassandra.local-datacenter=datacenter1

对于数据中心的名称,“datacenter1”是默认名称。您可以在 cqlsh 中使用以下命令找到数据中心的名称:select data_center from system.local;

另外,不要忘记关闭 cqlsh 会话,因为它可能会导致在下一个请求中到达单节点 cassandra 集群时出现一些问题。

Session.close()


查看完整回答
反对 回复 2023-08-16
  • 3 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信