Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker Cassandra容器数据库NoNodeAvailableException_Docker_Cassandra_Docker Compose_Datastax Java Driver - Fatal编程技术网

Docker Cassandra容器数据库NoNodeAvailableException

Docker Cassandra容器数据库NoNodeAvailableException,docker,cassandra,docker-compose,datastax-java-driver,Docker,Cassandra,Docker Compose,Datastax Java Driver,我使用Cassandra docker映像,docker容器上运行的spring引导服务,并使用Datastax Java驱动程序 我可以连接Cassandra,也可以查看日志,下面是docker compose文件 version: '3.5' networks: my-network: cassandra-db: container_name: cassandra-db image: cassandra:4.0-beta1 ports: - &q

我使用Cassandra docker映像,docker容器上运行的spring引导服务,并使用Datastax Java驱动程序

我可以连接Cassandra,也可以查看日志,下面是docker compose文件

version: '3.5'

networks:
  my-network:

 cassandra-db:
    container_name: cassandra-db
    image: cassandra:4.0-beta1
    ports:
      - "9042:9042"
    restart: on-failure
    environment:
      - CASSANDRA_CLUSTER_NAME='cassandra-cluster'
      - CASSANDRA_NUM_TOKENS=256
      - CASSANDRA_RPC_ADDRESS=0.0.0.0
      - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
    volumes:
      - ./out/cassandra_data:/var/lib/cassandra
    networks:
      - my-network


 client-service:
    container_name: client-service
    image: data/client-service
    environment:
      - SPRING_PROFILES_ACTIVE=dev
    ports:
      - 8087:8087
    depends_on:
      - cassandra-db
    links:
      - cassandra-db
    networks:
      - my-network
我的键空间查询是

CREATE KEYSPACE IF NOT EXISTS SensorKeySpace WITH replication = {'class':'NetworkTopologyStrategy','replication_factor':3}
以及使用

.addContactEndPoint(new DefaultEndPoint(
                        InetSocketAddress.createUnresolved("cassandra-db",9042)))
                .withLocalDatacenter("DC1")
                .withKeyspace(CassandraConstant.KEY_SPACE_NAME.getValue())
                .build();
卡桑德拉号已经启动并运行了,已经验证过了

CONTAINER ID        IMAGE         COMMAND                  CREATED             STATUS              PORTS                                  NAMES
57d1d29dbf00  client-service      "java -Djava.securit…"   4 minutes ago       Up 4 minutes   0.0.0.0:8087->8087/tcp                      client-service
00548a4058e6  cassandra:4.0-beta1  "docker-entrypoint.s…"   4 minutes ago  Up 4 minutes   7000-7001/tcp, 7199/tcp, 9160/tcp, 0.0.0.0:9042->9042/tcp   cassandra-db
问题出在一开始,

  • 我使用
    SimpleStrategy
    创建键空间,得到了以下错误
  • 然后在docker compose中使用LocalDatacenter(“DC1”)和
    -CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
    配置

  • 配置之后,启动容器时没有错误,但是当我点击查询时,我得到以下错误
  • 我读了API文档,它告诉我

    This can happen if all nodes are down, or if all the contact points provided at startup were invalid.
    

    我的Cassandra DB已启动(验证),连接成功。这里缺少什么?

    所以这里的问题是键空间定义

    CREATE KEYSPACE IF NOT EXISTS SensorKeySpace WITH replication = 
        {'class':'NetworkTopologyStrategy','replication_factor':3}
    
    网络拓扑策略
    支持数据中心。这意味着需要为每个数据中心设置复制。从我看到的情况来看,您的代码似乎在寻找“DC1”数据中心

    .withLocalDatacenter("DC1")
    
    但是,您的日志会告诉您:

    此群集中的当前DC为:datacenter1

    这意味着您的键空间定义应如下所示:

    CREATE KEYSPACE IF NOT EXISTS SensorKeySpace WITH replication = 
        {'class':'NetworkTopologyStrategy','datacenter1':3}
    
    您的代码应该是:

    .withLocalDatacenter("datacenter1")
    

    注意:数据中心名称区分大小写。请务必验证您在
    cassandra rackdc.properties
    文件中使用的数据中心名称。

    谢谢您的回复,Aaron,我会尽力与您保持联系。
    CREATE KEYSPACE IF NOT EXISTS SensorKeySpace WITH replication = 
        {'class':'NetworkTopologyStrategy','datacenter1':3}
    
    .withLocalDatacenter("datacenter1")