web-dev-qa-db-ja.com

Apache Cassandra:種をゴシップすることはできません

私はCassandra server 2.0.3をビルドし、それを実行しました。それは起動し、メッセージで停止します:

X:\MyProjects\cassandra\Apache-cassandra-2.0.3-src\bin>cassandra.bat >log.txt
Java.lang.RuntimeException: Unable to gossip with any seeds
        at org.Apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.Java:1160)
        at org.Apache.cassandra.service.StorageService.checkForEndpointCollision
(StorageService.Java:416)
        at org.Apache.cassandra.service.StorageService.joinTokenRing(StorageServ
ice.Java:608)
        at org.Apache.cassandra.service.StorageService.initServer(StorageService
.Java:576)
        at org.Apache.cassandra.service.StorageService.initServer(StorageService
.Java:475)
        at org.Apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.ja
va:346)
        at org.Apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon
.Java:461)
        at org.Apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.jav
a:504)

実行するために何を変更できますか?

47
Oleg

私はcassandra単一ノードを実行するv2.0.4クラスターで同様の問題を抱えていました。

Cassandra.yamlを確認して、「listen_address」と「seeds」の値が一致することを確認します。ただし、シード値には引用符が必要です。

104
Mark W

プライベートIPアドレスがパブリック(AWSなど)と異なる場合、この問題が発生する可能性があります。たとえば、ホストは、「55.70.33.10」として表示される場合、「172.31.0.2」であると見なします。

この問題の解決策は次のとおりです。

listen_address: 172.31.0.2
broadcast_address: 55.70.33.10
22
Lukasz Kujawa

cassandra.yaml

  1. cluster_nameエントリは、クラスター内のすべてのノードで一致します(クラスター名を変更した場合は、ストレージを削除する必要がある場合があります)

  2. すべてのノードが相互にpingできることを確認します

  3. broadcast_rpc_addressおよびlisten_addressはローカルIPに設定する必要があります(localhostまたは127.0.0.1

  4. シードは、シードのIPアドレスを指す必要があります

8
elvingt

AWSを使用しており、Ec2MultiRegionSnitchシードをプライベートIPではなくパブリックIPアドレスに設定する必要があります。

5

Ubuntu 16.04でも同じ問題が発生しました。これらの変更のどれが機能したのかわかりません。XXX.XXX.XXX.XXXは一般向けのIPアドレスです。以下はcassandra.yaml

seed_provider:
    # Addresses of hosts that are deemed contact points. 
    # Cassandra nodes use this list of hosts to find each other and learn
    # the topology of the ring.  You must change this if you are running
    # multiple nodes!
    - class_name: org.Apache.cassandra.locator.SimpleSeedProvider
      parameters:
          # seeds is actually a comma-delimited list of addresses.
          # Ex: "<ip1>,<ip2>,<ip3>"
          - seeds: "XXX.XXX.XXX.XXX"


listen_address: XXX.XXX.XXX.XXX
broadcast_address: XXX.XXX.XXX.XXX
broadcast_rpc_address: XXX.XXX.XXX.XXX
listen_on_broadcast_address: true
start_rpc: true
rpc_address: XXX.XXX.XXX.XXX

また、何らかの理由で仮想マシンを再起動する必要がありました。 ¯_(ツ)_ /¯

3
astronought

cassandra.yamlで、シードをドメイン名からIPアドレスに更新します。そしてそれは動作します。

2
Richardhe2007

RHELでの単一ノードの迅速なセットアップのために、次のことを行いました。ネットワークインターフェイスのセットアップに関する情報を取得します。

# /sbin/ifconfig -a

インターフェースと、それらが接続されているIPアドレスがリストされます。通常、「Ethernet」インターフェースと「Local Loopback」が表示されます。関連するIPアドレスを取得します。

次に、conf/cassandra.yamlを編集します。

rpc_address: [Local Loopback address]
broadcast_rpc_address: [Ethernet address]
listen_address: [Local Loopback address]
broadcast_address: [Ethernet address]
listen_on_broadcast_address: true
seed_provider:
    - class_name: org.Apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "[Ethernet address]"

次に、Linuxファイアウォールの正しいポート(9042、7000、7001)を開きます。Linuxでポートを開く方法の詳細については、こちらをご覧ください。 http://ask.xmodulo.com/open-port-firewall-centos-rhel .html

2
Denno

私の構成では、「intial_token」設定が指定されていたために起こりました(別のクラスターメンバーから構成ファイルにコピーしたためだと思います)。データディレクトリをクリアし、設定をコメントアウトしてノードを再起動すると、うまくいきました。

1
philipphoffmann

今日このエラーが発生しました...

タイミングの問題以外のエラーの理由を見つけることができませんでした。

何回も再起動しましたが、しばらくすると固まります。ゴシップチャネルでの双方向通信を期待しているように見えますが、それが十分に速く行われない場合(私には非常に短い時間のように見えます)、回線をドロップしてそのエラーを生成します。

私の場合、ソフトウェアをアップグレードし、コンピューターを再起動しました。したがって、それは明らかにコンピューター間の接続の問題ではなく(問題を複雑にするためにファイアウォールとSSLがあります)、ノードは以前に接続されていました...したがって、datastaxからその点で見つけた1つのエントリは適用されませんでした...

https://support.datastax.com/hc/en-us/articles/209691483-Bootstap-fails-with-Unable-to-gossip-with-any-seeds-yet-new-node-can-シードノードへの接続

1
Alexis Wilke

ファイアウォールとSELINUXを無効にして、再試行してください

0

Elvingtに感謝

彼の答えは私に思い出させます、私はすべてのノードが互いに話すことができる必要があることを確認する必要があります。
https://support.datastax.com/hc/en-us/articles/209691483-Bootstap-fails-with-Unable-to-gossip-with-any-seeds-yet-new -node-can-connect-to-seed-nodes

ゴシップ通信は双方向でなければなりません。

確認するには、このコマンドを使用し、BOTH SIDEのテストが必要です

nc -vz {your_node_ip} 7000

それから昨晩、ubuntuファイアウォールをオンにしたことを思い出します。私はそれを開きます

Sudo ufw allow 7000/tcp

そしてそれは今働いています

0
cicidi

同じエラーが発生しました。複数のソリューションが存在する場合があります。私の間違いがあなたがしたことを願っています。

Localhost IPが何らかのドメイン名を指していました(そして、Springブートアプリケーションのサーバーコンテキストがwww.example.com:8080 の代わりに localhost:8080、Windowsシステムのhostsファイルに次のエントリがありました)。

127.0.0.1 www.example.com

私のcassandra=バッチファイルは見つからないlocalhostを探していたので、hostsファイルにlocalhostの別のエントリも作成しました。

127.0.0.1  localhost

127.0.0.1  www.example.com

追加した後、新しいコマンドプロンプトを開き、cassandra batch cassandra= binディレクトリから取得し、動作しました。

0
Ashish

この場合、sslが有効になっており、cassandra.yamlの構成は上記のコメントのとおり正常に見えます。次に、cassandra-env.shに以下のjvmパラメーターを追加して、SSLデバッグを有効にしました-Djavax.net.debug = ssl:handshake

ノードを再起動した後、以下のcassandraログファイル

MessagingService-Outgoing-geo2_Host/xx.xx.xx.xx、クローズjavax.net.ssl.SSLHandshakeExceptionの待機中の例外:致命的なアラートを受信しました:certificate_unknown

Sslデバッグログをさらに調査した後、証明書が無効であることがわかりました。このSSLの問題を修正した後、ノードはクラスターに参加できました。

0
Laxmikant