私は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)
実行するために何を変更できますか?
私はcassandra単一ノードを実行するv2.0.4クラスターで同様の問題を抱えていました。
Cassandra.yamlを確認して、「listen_address」と「seeds」の値が一致することを確認します。ただし、シード値には引用符が必要です。
プライベートIPアドレスがパブリック(AWSなど)と異なる場合、この問題が発生する可能性があります。たとえば、ホストは、「55.70.33.10」として表示される場合、「172.31.0.2」であると見なします。
この問題の解決策は次のとおりです。
listen_address: 172.31.0.2
broadcast_address: 55.70.33.10
cassandra.yaml
cluster_name
エントリは、クラスター内のすべてのノードで一致します(クラスター名を変更した場合は、ストレージを削除する必要がある場合があります)
すべてのノードが相互にpingできることを確認します
broadcast_rpc_address
およびlisten_address
はローカルIPに設定する必要があります(localhostまたは127.0.0.1
)
シードは、シードのIPアドレスを指す必要があります
AWSを使用しており、Ec2MultiRegionSnitch
シードをプライベートIPではなくパブリックIPアドレスに設定する必要があります。
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
また、何らかの理由で仮想マシンを再起動する必要がありました。 ¯_(ツ)_ /¯
cassandra.yamlで、シードをドメイン名からIPアドレスに更新します。そしてそれは動作します。
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
私の構成では、「intial_token」設定が指定されていたために起こりました(別のクラスターメンバーから構成ファイルにコピーしたためだと思います)。データディレクトリをクリアし、設定をコメントアウトしてノードを再起動すると、うまくいきました。
今日このエラーが発生しました...
タイミングの問題以外のエラーの理由を見つけることができませんでした。
何回も再起動しましたが、しばらくすると固まります。ゴシップチャネルでの双方向通信を期待しているように見えますが、それが十分に速く行われない場合(私には非常に短い時間のように見えます)、回線をドロップしてそのエラーを生成します。
私の場合、ソフトウェアをアップグレードし、コンピューターを再起動しました。したがって、それは明らかにコンピューター間の接続の問題ではなく(問題を複雑にするためにファイアウォールとSSLがあります)、ノードは以前に接続されていました...したがって、datastaxからその点で見つけた1つのエントリは適用されませんでした...
ファイアウォールとSELINUXを無効にして、再試行してください
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
そしてそれは今働いています
同じエラーが発生しました。複数のソリューションが存在する場合があります。私の間違いがあなたがしたことを願っています。
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ディレクトリから取得し、動作しました。
この場合、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の問題を修正した後、ノードはクラスターに参加できました。