Docker Cassandra容器数据库NoNodeAvailableException
我使用Cassandra docker映像,docker容器上运行的spring引导服务,并使用Datastax Java驱动程序 我可以连接Cassandra,也可以查看日志,下面是docker compose文件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
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
创建键空间,得到了以下错误-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")