私はNoHostAvailableException
についていくつかのスレッドがあることを知っていますが、それらは単に私の問題の解決策を提供しません。
Cassandra with the Datastax Java Cassandra Driverで接続できません。エラーが発生します:
com.datastax.driver.core.exceptions.NoHostAvailableException:クエリで試行されたすべてのホストが失敗しました(試行:[/54.221.241.107])
私は設定が正しいと確信しています。 cassandra.yamlで構成を設定しました。
start_native_transport: true
# port for the CQL native transport to listen for clients on
native_transport_port: 9042
私のCassandraインストールは、AWSのEC2インスタンスの標準インストールです。ポート9042を許可するようにAWSを設定しました。
CassandraはWindows Server 2008 R2で実行しており、ファイアウォールを9042のインバウンド接続とアウトバウンド接続に構成しました。
私のコードは次のようになります:
cluster = Cluster.builder()
.withPort(9042)
.addContactPoint("54.221.241.107").build();
いつもこのエラーが表示されるので、どうすればよいかわからなくなります。助言がありますか?
Casssandra.yamlファイルを確認します。 native_transportは、rpc_addressと同じアドレスバインディングを使用します。 「54.221.241.107」以外のアドレスにバインドされている場合、この問題が発生します。に設定してみてください
rpc_address: 0.0.0.0
または
rpc_address: 54.221.241.107
それが役立つかどうかを確認します。 ec2-ipsは再起動時に変更される可能性があることに注意してください。
私の推測では、ec-2の内部IPにバインドされています。この方法でデータベースを公開する場合は、セキュリティを追加することを忘れないでください:-)
変更_public IP to private IP
_。
cassandraがEC2にある場合、yaml設定でプライベートIPを設定する必要があります_rpc_address: PRIVATE_IP
_。
クライアントプログラム(cassandraの接続に使用されるJavaアプリ)もEC2にある場合は、プライベートIPをコードに追加する必要があります.addContactPoint("PRIVATE_IP").build();
。
cassandraがEC2にあり、クライアントアプリがEC2にない場合(クライアントJavaアプリ)を意味する)場合、設定する必要があります_private IP in yaml configurations
_および_public IP in your Java app
_
次に重要な点は_native_transport_port: 9042
_に言及することです_access for port 9042
_および_Firewall configurations
_を許可します。これらはあなたが正しくやったと思います。また、yamlファイルでエンドポイントスニッチ_endpoint_snitch: Ec2Snitch
_が適切に構成されていることを確認してください。これらの手順を実行すればうまくいくと思います。
最近この問題にも遭遇しました。私の環境は異なっていて、理由も異なっていました。親ライブラリとしてSpringBoot 1.5.3.RELEASEを使用し、Datastax cassandra driverバージョン3.3.0:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
............
<dependencies>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.3.0</version>
<exclusions>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-handler</artifactId>
</exclusion>
</exclusions>
</dependency>
.......
SpringBootの親POMとDatastaxから継承されたNettyライブラリが衝突しました。 Nettyを除外した後、エラーはなくなりました。
Cassandraを使用するJavaドライバーを使用することは、ドライバーのバージョンとドライバーの依存関係に大きく依存します。私にとって有効だった最後のことは、lib( jar)はサーバーダウンロードにバンドルされています。私の場合はWindowsでした。ただし、Linux tarボールにもドライバーと依存関係が含まれているはずです。サーバーダウンロードに同梱されているjarを使用して、= Javaドライバをインターネットから個別にダウンロードする代わりに、クライアントのクラスパス
同じ問題がありました。後で、ドライバのバージョンとCQLのバージョンに互換性がないことが判明しました。互換性チャートに従って最新の .0 Driver を入手してください
http://www.datastax.com/dev/blog/Java-driver-2-1-2-native-protocol-v