gpt4 book ai didi

docker - Cassandra 容器数据库 NoNodeAvailableException

转载 作者:行者123 更新时间:2023-12-02 19:15:23 27 4
gpt4 key购买 nike

我使用 Cassandra docker 镜像,在 docker 容器上运行的 Spring Boot 服务,并使用 Datastax Java 驱动程序。
我可以使用下面的 docker compose 文件连接 connect Cassandra 并查看日志,

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}
和建筑 Cqlsession使用,
.addContactEndPoint(new DefaultEndPoint(
InetSocketAddress.createUnresolved("cassandra-db",9042)))
.withLocalDatacenter("DC1")
.withKeyspace(CassandraConstant.KEY_SPACE_NAME.getValue())
.build();
Cassandra 已启动并运行,并对其进行了验证,
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创建 Keyspace 并得到以下错误,
  • Caused by: [com.datastax.oss.driver.api.core.CqlSession]: Factory method 'session' threw exception; nested exception is java.lang.IllegalStateException: Since you provided explicit contact points, the local DC must be explicitly set (see basic.load-balancing-policy.local-datacenter in the config, or set it programmatically with SessionBuilder.withLocalDatacenter). Current contact points are: Node(endPoint=cassandra-db:9042, hostId=729bd04f-b345-4df3-a148-80545d30e032, hashCode=5563e4c4)=datacenter1. Current DCs in this cluster are: datacenter1
    然后配置 .withLocalDatacenter("DC1")- CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch在 docker compose 中。
  • 配置后,启动容器时没有错误,但是当我点击查询时,出现以下错误,
  • The Select Query is [SELECT NAME,VALUE FROM READING ]
    client-service | 2020-09-08 11:12:38.480 ERROR 1 --- [nio-8087-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.util.concurrent.ExecutionException: org.springframework.data.cassandra.CassandraConnectionFailureException: Query; CQL [com.datastax.oss.driver.internal.core.cql.DefaultSimpleStatement@1265401a]; No node was available to execute the query; nested exception is com.datastax.oss.driver.api.core.NoNodeAvailableException: No node was available to execute the query] with root cause
    client-service | com.datastax.oss.driver.api.core.NoNodeAvailableException: No node was available to execute the query
    我阅读了 API 文档, https://docs.datastax.com/en/drivers/java/4.0/com/datastax/oss/driver/api/core/NoNodeAvailableException.html哪个告诉我
    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}
    NetworkTopologyStrategy是数据中心意识。这意味着它需要为每个数据中心设置复制。据我所知,您的代码似乎正在寻找“DC1”数据中心。
    .withLocalDatacenter("DC1")
    但是,您的日志告诉您:

    Current DCs in this cluster are: datacenter1


    这意味着您的键空间定义应如下所示:
    CREATE KEYSPACE IF NOT EXISTS SensorKeySpace WITH replication = 
    {'class':'NetworkTopologyStrategy','datacenter1':3}
    你的代码应该是:
    .withLocalDatacenter("datacenter1")
    注意:数据中心名称区分大小写。请务必验证您在 cassandra-rackdc.properties 中使用的数据中心名称。文件。

    关于docker - Cassandra 容器数据库 NoNodeAvailableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63793036/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com