Cassandra DataStaxによってCannsandra用のドライバを使用して、Javaクライアントに接続しているが、それはエラーを以下投げます。.
スレッド「メイン」の例外com.datastax.driver.core.exceptions.NoHostAvailableException:クエリを試行したすべてのホストが失敗しました(試行:[/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();
}
私は、接続時に9160のデフォルトのRPCポートを使用して私の場合、私はこの問題に遭遇しました。一つはcassandra.yamlにCQLのための別のポートを見つけることができます -
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");
}
この問題があり、SocketOptionsでReadTimeoutを設定することでソートされました。
Cluster cluster = Cluster.builder().addContactPoint("localhost").build();
cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(HIGHER_TIMEOUT);
私も同じ問題を抱えていました。 Cassandra=を別のLinux pcにインストールし、Window pc経由で接続しようとしました。接続を作成することはできませんでした。
しかし、cassandra.yamlを編集し、Linux PCのIPアドレスを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
Apache Cassandra confディレクトリに移動し、バイナリプロトコルを有効にします
CassandraバイナリプロトコルJavaドライバーは、Cassandra 1.2で導入されたバイナリプロトコルを使用します。 1.2以上のCassandraのバージョンでのみ機能します。さらに、バイナリプロトコルサーバーは、Cassandr a 1.2の既定の構成ファイルでは起動されません。各ノードのcassandra.yamlファイルを編集する必要があります。
start_native_transport: true
次に、ノードを再起動します。
エラーメッセージが表示されたときに、私と同じ問題を抱えている可能性のある人にこれを投稿するだけです。私の複雑な依存関係ツリーは古いバージョンのcom.google.collectionsをもたらし、CQLドライバーを破壊しました。この依存関係を取り除き、グアバに完全に依存することで私の問題を解決しました。
1つのノードで新しいクラスターをテストすると、同じ問題が発生していました。
これをクラスタービルダーから削除した後、接続できました。
.withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("US_EAST"))
接続できました。
私もこの問題に遭遇しましたが、これは送信されたステートメントの単純なエラーが原因でした。
session.prepare(null);
明らかに、エラーメッセージは誤解を招くものです。
私の場合、これはポートの問題で、更新するのを忘れていました
古いRPCポートは9160
新しいバイナリポートは9042
編集
/etc/cassandra/cassandra.yaml
そして変化
rpc_address
から0.0.0.0
、broadcast_rpc_addressおよびlisten_addressをクラスターのIPアドレスに。
既定の構成が整っていると仮定して、ドライバーのバージョンの互換性を確認します。すべてのバージョンのドライバーがCassandraのすべてのバージョンと互換性があるわけではありませんが、下位互換性を主張しています。以下のリンクをご覧ください。
http://docs.datastax.com/en/developer/Java-driver/3.1/manual/native_protocol/
同様の問題が発生し、ドライバーのバージョンを変更すると問題が解決しました。
注:うまくいけば、Maven(または同様のもの)を使用して依存関係を解決します。それ以外の場合は、ドライバーの上位バージョンの多くの依存関係をダウンロードする必要があります。
以下の点を確認してください。
i)サーバーのIPを確認する
ii)リスニングポートを確認する
iii)データスタッククライアントの依存関係は、サーバーのバージョンと一致する必要があります。
Yamlファイルについては、最新バージョンでは以下のプロパティが有効になっています。
start_native_transport: true
native_transport_port: 9042