Ошибка при подключении к Cassandra с помощью Java-драйвера для Apache Cassandra 1.0 из com.example.cassandra
При подключении к клиенту Cassandra с помощью java-драйвера для Cannsandra от DataStax он бросает следующую ошибку.
Исключение в потоке "main" com.datastax.driver.core.exceptions.NoHostAvailableException: все хосты (ы), попробованные для запроса, не сработали (try: [/127.0.0.1])
Пожалуйста, предложите...
Спасибо!
Мой код Java выглядит следующим образом:
package com.example.cassandra;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Host;
import com.datastax.driver.core.Metadata;
public class SimpleClient {
private Cluster cluster;
public void connect(String node){
cluster = Cluster.builder().addContactPoint(node).build();
Metadata metadata = cluster.getMetadata();
System.out.println(metadata.getClusterName());
}
public void close()
{
cluster.shutdown();
}
public static void main(String args[]) {
SimpleClient client = new SimpleClient();
client.connect("127.0.0.1");
client.close();
}
Ответы
Ответ 1
В моем случае я столкнулся с этой проблемой, так как я использовал порт RPC по умолчанию 9160 во время соединения. Можно найти другой порт для CQL в cassandra.yaml -
start_native_transport: true
# port for the CQL native transport to listen for clients on
native_transport_port: 9042
Как только я изменил код для использования порта 9042, попытка подключения прошла успешно -
public BinaryDriverTest(String cassandraHost, int cassandraPort, String keyspaceName) {
m_cassandraHost = cassandraHost;
m_cassandraPort = cassandraPort;
m_keyspaceName = keyspaceName;
LOG.info("Connecting to {}:{}...", cassandraHost, cassandraPort);
cluster = Cluster.builder().withPort(m_cassandraPort).addContactPoint(cassandraHost).build();
session = cluster.connect(m_keyspaceName);
LOG.info("Connected.");
}
public static void main(String[] args) {
BinaryDriverTest bdt = new BinaryDriverTest("127.0.0.1", 9042, "Tutorial");
}
Ответ 2
У меня была эта проблема, и она была отсортирована, установив ReadTimeout в SocketOptions:
Cluster cluster = Cluster.builder().addContactPoint("localhost").build();
cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(HIGHER_TIMEOUT);
Ответ 3
Перейдите в каталог Apache Cassandra conf и включите двоичный протокол
Двоичный протокол Кассандры
Драйвер Java использует двоичный протокол, который был введен в Cassandra 1.2. Он работает только с версией Cassandra, большей или равной 1.2. Кроме того, сервер двоичных протоколов не запускается с конфигурационным файлом по умолчанию в Cassandr a 1.2. Вы должны отредактировать файл cassandra.yaml для каждого node:
start_native_transport: true
Затем перезапустите node.
Ответ 4
У меня тоже была такая же проблема. Я установил Cassandra на отдельном ПК Linux и попытался подключиться через Window pc. Мне не удалось создать соединение.
Но когда мы редактируем файл cassandra.yaml, установите мой ip-адрес linux pc на rpc_address и перезапустите, он позволяет мне успешно подключиться,
# The address or interface to bind the Thrift RPC service and native transport
# server to.
#
# Set rpc_address OR rpc_interface, not both. Interfaces must correspond
# to a single address, IP aliasing is not supported.
#
# Leaving rpc_address blank has the same effect as on listen_address
# (i.e. it will be based on the configured hostname of the node).
#
# Note that unlike listen_address, you can specify 0.0.0.0, but you must also
# set broadcast_rpc_address to a value other than 0.0.0.0.
#rpc_address: localhost
rpc_address: 192.168.0.10
Ответ 5
Просто опубликуйте это для людей, которые могут иметь ту же проблему, что и я, когда я получил это сообщение об ошибке. Оказалось, что мое сложное дерево зависимостей вызвало старую версию com.google.collections, которая сломала драйвер CQL. Удаление этой зависимости и полное использование guava решило мою проблему.
Ответ 6
У меня была такая же проблема с тестированием нового кластера с одним node.
После удаления этого из Cluster builder я смог подключиться:
.withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("US_EAST"))
Он смог подключиться.
Ответ 7
В моем случае это была проблема с портом, которую я забыл обновить
Старый порт RPC 9160
Новый двоичный порт 9042
Ответ 8
Я тоже столкнулся с этой проблемой, и это было вызвано простой ошибкой в заявлении, которое было отправлено.
session.prepare(null);
Очевидно, что сообщение об ошибке вводит в заблуждение.
Ответ 9
Изменить
/etc/cassandra/cassandra.yaml
и измените
rpc_address
до 0.0.0.0
, broadcast_rpc_address и listen_address к IP-адресу кластера.
Ответ 10
Проверьте пункты ниже:
i) проверить сервер ip
ii) проверить порт прослушивания
iii) зависимость клиентской базы данных должна соответствовать версии сервера.
В файле yaml последние версии имеют следующие свойства:
start_native_transport: true
native_transport_port: 9042
Ответ 11
Предполагая, что у вас установлены конфигурации по умолчанию, проверьте совместимость версий драйверов. Не все версии драйверов совместимы со всеми версиями Cassandra, хотя они требуют обратной совместимости. См. Ссылку ниже.
http://docs.datastax.com/en/developer/java-driver/3.1/manual/native_protocol/
Я столкнулся с подобной проблемой, и изменение версии драйвера решило мою проблему.
Примечание. Надеемся, вы используете Maven (или что-то подобное) для разрешения зависимостей. В противном случае вам может потребоваться загрузить множество зависимостей для более высоких версий драйвера.