web-dev-qa-db-ja.com

cassandra-NoHostAvailableExceptionに接続できません

私は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();

いつもこのエラーが表示されるので、どうすればよいかわからなくなります。助言がありますか?

18
user2280013

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にバインドされています。この方法でデータベースを公開する場合は、セキュリティを追加することを忘れないでください:-)

29
polve

変更_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_が適切に構成されていることを確認してください。これらの手順を実行すればうまくいくと思います。

7
Jaya Ananthram

最近この問題にも遭遇しました。私の環境は異なっていて、理由も異なっていました。親ライブラリとして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を除外した後、エラーはなくなりました。

1
blandger

Cassandraを使用するJavaドライバーを使用することは、ドライバーのバージョンとドライバーの依存関係に大きく依存します。私にとって有効だった最後のことは、lib( jar)はサーバーダウンロードにバンドルされています。私の場合はWindowsでした。ただし、Linux tarボールにもドライバーと依存関係が含まれているはずです。サーバーダウンロードに同梱されているjarを使用して、= Javaドライバをインターネットから個別にダウンロードする代わりに、クライアントのクラスパス

0
Vahees

同じ問題がありました。後で、ドライバのバージョンとCQLのバージョンに互換性がないことが判明しました。互換性チャートに従って最新の .0 Driver を入手してください

http://www.datastax.com/dev/blog/Java-driver-2-1-2-native-protocol-v

0
Darshan Shah