我正在尝试使用dse-server和dse-studio在docker中设置一个有五个节点的cassandra ring。docker容器已经启动并运行,我可以访问casandra数据库并执行CRUD操作,但它没有连接到所有节点。我相信我没有正确创建docker组合网络,或者它可能是另一个问题。下面是项目的代码:
https://github.com/juanpujazon/DockerCassandraNodes
如果我使用连接到192.168.3.19:9042的连接器,我可以对表执行CRUD,但只有到第一个节点的连接是成功的。CRUD成功完成,但是除了第一个ip之外的所有主机ip都得到错误"Connection[/172.30.0.4:9042-1, inFlight=0, closed=false]连接到/172.30.0.4:9042错误(连接超时:/172.30.0.4:9042)"&;
我尝试创建一个连接器,将来自不同节点的所有ip添加为接触点,但未按预期工作:
Exception in thread "main" java.lang.IllegalArgumentException: Failed to add contact point: "127.0.0.1";"172.30.0.2";"172.30.0.3";"172.30.0.4";"172.30.0.5";"172.30.0.6"
at com.datastax.driver.core.Cluster$Builder.addContactPoint(Cluster.java:943)
at cassandra.java.client.CassandraConnector.connectNodes(CassandraConnector.java:30)
at cassandra.java.client.Main.main(Main.java:13)
Caused by: java.net.UnknownHostException: Host desconocido ("127.0.0.1";"172.30.0.2";"172.30.0.3";"172.30.0.4";"172.30.0.5";"172.30.0.6")
at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:933)
at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1529)
at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:852)
at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1519)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1377)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1305)
at com.datastax.driver.core.Cluster$Builder.addContactPoint(Cluster.java:939)
你知道我应该改变什么吗?
如果您只能连接到192.168.3.19
上的集群,则表明主机上无法访问容器。你需要配置你的Docker环境,使容器暴露给公共访问。
这个错误:
Connection[/172.30.0.4:9042-1, inFlight=0, closed=false]
Error connecting to /172.30.0.4:9042 (connection timed out: /172.30.0.4:9042)
您正在使用默认的CQL端口9042
连接到容器,但您已经在docker-compose.yml
的不同端口上暴露了它:
ports:
- 9044:9042
我建议您将所有容器端口重新映射到9042
,以使您更容易连接到它们。否则,在配置以下联系点时,需要指定端口和IP地址:
"ip1:port1", "ip2:port2", "ip3:port3"
我还注意到你在联系点中包含了localhost
:
Failed to add contact point: "127.0.0.1";"172.30.0.2";"172.30.0.3";"172.30.0.4";"172.30.0.5";"172.30.0.6"
如果你有一个节点只监听localhost
上的客户端连接,那么它的配置不正确,你需要修复它的配置。
最后,如果你的目标是为应用程序开发构建一个集群,你可能想要考虑使用Astra DB,这样你就不必担心配置/维护自己的Cassandra安装。使用Astra DB,您可以在一分钟多一点的时间内点击5次鼠标就可以启动免费层上的集群,而且不需要信用卡。干杯!