我在 docker 上成功運行了 ScyllaDB 集群,但是在嘗試將我的 Spring Boot 應用程式連接到它時遇到了一些連接問題。
集群似乎很健康:
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 172.19.0.3 205.31 KB 256 ? c387bd38-cf37-4c70-a8a3-db586f6410c4 Rack1
UN 172.19.0.2 101.61 KB 256 ? 89dda41e-70c5-43a5-a4a7-ce126007a1e1 Rack1
UN 172.19.0.4 210.34 KB 256 ? 58dfe868-a7ac-47a5-b3e9-dae610ef0bc9 Rack1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b90d0357abee scylladb/scylla:4.5.0 "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 22/tcp, 7000-7001/tcp, 9042/tcp, 9160/tcp, 9180/tcp, 10000/tcp scylla-node2
19f19cb2e631 scylladb/scylla:4.5.0 "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 22/tcp, 7000-7001/tcp, 9042/tcp, 9160/tcp, 9180/tcp, 10000/tcp scylla-node3
c98b0b1aa018 scylladb/scylla:4.5.0 "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 22/tcp, 7000-7001/tcp, 9042/tcp, 9160/tcp, 9180/tcp, 10000/tcp scylla-node1
CQL 作業沒有任何問題:
docker exec -it scylla-node1 cqlsh
Connected to at 172.19.0.2:9042.
[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh>
我正在嘗試使用datastax驅動程式(scylla-driver-core 版本 3.11.2.0)將我的 Java 應用程式連接到集群:
Cluster cluster = Cluster.builder().addContactPoints("172.19.0.3", "172.19.0.2", "172.19.0.4")
.build();
System.out.println("Connected to cluster " cluster.getMetadata().getClusterName());
但我收到以下例外:
2022-05-08 18:00:02.928 INFO 4760 --- [ restartedMain] com.datastax.driver.core.NettyUtil : Did not find Netty's native epoll transport in the classpath, defaulting to NIO.
2022-05-08 18:00:09.149 WARN 4760 --- [r1-nio-worker-0] com.datastax.driver.core.Connection : Error creating netty channel to /172.19.0.4:9042
io.netty.channel.ConnectTimeoutException: connection timed out: /172.19.0.4:9042
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe$1.run(AbstractNioChannel.java:261) ~[netty-transport-4.1.75.Final.jar:4.1.75.Final]
at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) [netty-common-4.1.75.Final.jar:4.1.75.Final]
at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170) [netty-common-4.1.75.Final.jar:4.1.75.Final]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:164) [netty-common-4.1.75.Final.jar:4.1.75.Final]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) [netty-common-4.1.75.Final.jar:4.1.75.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469) [netty-common-4.1.75.Final.jar:4.1.75.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503) [netty-transport-4.1.75.Final.jar:4.1.75.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [netty-common-4.1.75.Final.jar:4.1.75.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-common-4.1.75.Final.jar:4.1.75.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-common-4.1.75.Final.jar:4.1.75.Final]
Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /172.19.0.4:9042 (com.datastax.driver.core.exceptions.TransportException: [/172.19.0.4:9042] Cannot connect), /172.19.0.3:9042 (com.datastax.driver.core.exceptions.TransportException: [/172.19.0.3:9042] Cannot connect), /172.19.0.2:9042 (com.datastax.driver.core.exceptions.TransportException: [/172.19.0.2:9042] Cannot connect))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:270)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:109)
at com.datastax.driver.core.Cluster$Manager.negotiateProtocolVersionAndConnect(Cluster.java:1921)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1832)
at com.datastax.driver.core.Cluster.getMetadata(Cluster.java:476)
at com.dt.package.ScyllaConnection.connect_and_query(ScyllaConnection.java:15)
at com.dt.package.MyApp.main(MyApp.java:12)
... 5 more
docker-compose 檔案示例:
scylla-node2:
container_name: scylla-node2
image: scylladb/scylla:4.5.0
restart: always
command: --seeds=scylla-node1,scylla-node2 --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
volumes:
- "./scylla/scylla.yaml:/etc/scylla/scylla.yaml"
- "./scylla/cassandra-rackdc.properties.dc1:/etc/scylla/cassandra-rackdc.properties"
networks:
web:
嘗試連接到 Scylla Cloud 集群(使用正確的 IP)時,相同的代碼也有效。我在這里錯過了一些簡單的東西嗎?
uj5u.com熱心網友回復:
這個問題可能是因為你試圖用它們的 docker 內部 IP 地址連接到 ScyllaDB 節點。
如果您需要從內部 docker 網路外部訪問您的節點,則需要將適當的埠正確地暴露給 docker 主機。
ports
使用 docker compose,您可以使用該欄位匯出容器埠。例如:
scylla-node2:
container_name: scylla-node2
image: scylladb/scylla:4.5.0
restart: always
command: --seeds=scylla-node1,scylla-node2 --smp 1 --memory 750M --overprovisioned 1 --api-address 0.0.0.0
ports:
- 9043:9042
volumes:
- "./scylla/scylla.yaml:/etc/scylla/scylla.yaml"
- "./scylla/cassandra-rackdc.properties.dc1:/etc/scylla/cassandra-rackdc.properties"
networks:
web:
在示例中,我們將容器埠暴露9042
給主機埠9043
。
您將需要與其余節點類似的配置:您為所有節點使用相同的主機,因此您需要為每個節點選擇不同的埠。
scylla-node1:
...
ports:
- 9042:9042
...
scylla-node2:
...
ports:
- 9043:9042
...
scylla-node3:
...
ports:
- 9044:9042
...
不同的節點將共享同一個主機,即運行 docker 容器的主機。要從 Spring 應用程式連接到它們,您需要以下內容:
Cluster cluster =
Cluster.builder()
.addContactPointsWithPorts(
new InetSocketAddress("127.0.0.1", 9042),
new InetSocketAddress("127.0.0.1", 9043),
new InetSocketAddress("127.0.0.1", 9044)
);
System.out.println("Connected to cluster " cluster.getMetadata().getClusterName());
請注意使用方法addContactPointsWithPorts
而不是addContactPoints
在代碼中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471004.html
下一篇:查詢多對多jpa