Я создаю приложение в Java, используя Cassandra CQL-драйвер. Я могу запустить его правильно, когда я использую локальный сервер cassandra. Однако тот же код, когда я пытаюсь запустить, не работает на удаленном сервере cassandra. Это дает следующее сообщение об ошибке во время инициализации: -Cassandra NoHostAvailableException Java-CQLDriver
Ниже в Maven зависимых пакетов, которые я использую для водителя CQL: -
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>2.1.2</version>
</dependency>
Ниже приводится сообщение об ошибке: -
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: yyyy.yyy.yyy.yyy.yyy-yyy.net/yy.yy.yy.yy:9160 (com.datastax.driver.core.ConnectionException: [yyyy.yyy.yyy.yyy.yyy-yyy.net/yy.yy.yy.yy:9160] Unexpected error during transport initialization (com.datastax.driver.core.ConnectionException: [yyyy.yyy.yyy.yyy.yyy-yyy.net/yy.yy.yy.yy:9160] Operation timed out)),
Unexpected error during transport initialization (com.datastax.driver.core.ConnectionException: [xxxx.xxx.xxx.xxx.xxx-xxx.net/xx.xx.xx.xx:9160] Operation timed out)))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:220)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:78)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1231)
at com.datastax.driver.core.Cluster.init(Cluster.java:158)
at com.datastax.driver.core.Cluster.connect(Cluster.java:246)
Местного Кассандру сервер, на котором все работает нормально: -
cqlsh 4.1.1, Cassandra 2.0.7 , CQL spec: 3.1.1, Thrift Protocol 19.39.0
Удаленный сервер cassandra on которое подключается к сети, составляет: -
cqlsh 3.1.8 | Cassandra 1.2.12 | CQL spec 3.0.0 | Thrift protocol 19.36.1
Я использую следующий код для подключения. Может кто-то прокомментировать, что происходит в случае удаленного подключения?
clusterOBJECT = Cluster.builder().addContactPointsWithPorts(addrs)
.withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.ONE))
.withProtocolVersion(1).withoutJMXReporting()
.withPort(port)
.withSocketOptions(options)
.withRetryPolicy(DefaultRetryPolicy.INSTANCE)
.withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy())).build();
session = clusterOBJECT.connect();
Я предоставляю действительное имя хоста вместе с портом (9160) в addContactPointsWithPorts. Также имена хостов pingable.
PS: - Следующие свойства уже установлены в cassandra.yaml.
start_native_transport: true
native_transport_port: 9042
[EDIT] После изменения номера порта в 9042, я был в состоянии подключиться к Кассандре. НО Я вижу, что соединение скоро будет исключено из этого исключения.
com.datastax.driver.core.TransportException: [/xx.xx.xxx.xx:9042] Cannot connect
at com.datastax.driver.core.Connection.<init>(Connection.java:106)
at com.datastax.driver.core.PooledConnection.<init>(PooledConnection.java:35)
at com.datastax.driver.core.Connection$Factory.open(Connection.java:528)
at com.datastax.driver.core.DynamicConnectionPool.<init>(DynamicConnectionPool.java:74)
at com.datastax.driver.core.HostConnectionPool.newInstance(HostConnectionPool.java:33)
at com.datastax.driver.core.SessionManager.replacePool(SessionManager.java:270)
at com.datastax.driver.core.SessionManager.access$400(SessionManager.java:39)
at com.datastax.driver.core.SessionManager$3.call(SessionManager.java:303)
at com.datastax.driver.core.SessionManager$3.call(SessionManager.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.ConnectException: Connection refused: /xx.xx.xxx.xx:9042
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
at org.jboss.netty.channel.socket.nio.NioClientBoss.connect(NioClientBoss.java:150)
at org.jboss.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:105)
at org.jboss.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:79)
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
at org.jboss.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42)
... 3 more
Спасибо.
Какова структура Вашей сети? Где находятся ваш клиент и серверы? Существуют ли внутренние/внешние адреса? Можете ли вы использовать telnet для этих портов? –
Каковы значения (в вашем cassandra.yaml) таких вещей, как ваши 'listen_address',' broadcast_address', 'rpc_address' ... В основном, вывести вывод' cat cassandra.yaml | grep address' (минус пропущенные строки). – Aaron
rpc_address и listen_address обе пусты в файле cassandra.yaml. listen_address: rpc_address: – learner