ノード上のゴシップ状態のパージ
ゴシップ状態の問題の修正。
ゴシップ情報は、ゴシップ通信を待つ必要なしにノード再起動後すぐに使用するために、各ノードによってローカルに保持されます。
手順
ゴシップの状態に問題が生じて、それを修正する必要が万一発生した場合は、以下のようにします。
-
MX4JまたはJConsoleを使用して、ノードのJMXポートに接続してから、JMXメソッドを使用して、Gossiper.unsafeAssassinateEndpoints(ip_address)問題が生じたノードを強制終了します。
この処理の完了には数秒かかるため、ノードが削除されたことについて確認のメッセージが表示されるまで待ってください。
- 上記のJMXメソッドによってこの問題が解決されない場合は、クライアントのアプリケーションが書き込みをクラスターに送信するのを停止します。
-
クラスター全体をオフラインにします。
-
各ノードをドレーンします。
$ nodetool options drain
-
各ノードを停止します。
- パッケージ・インストール:
$ sudo service cassandra stop
- tarボール・インストール:
$ sudo service cassandra stop
- パッケージ・インストール:
-
各ノードをドレーンします。
-
以下のpeersディレクトリーからデータを消去します。
$ sudo rm -r /var/lib/cassandra/data/system/peers/*
注意:この手順を行う場合には注意を払ってください。注意を払わずに実行および結果の検証を行うと、この操作によってCassandraから内部システム・データが消去されるため、アプリケーションの障害を引き起こす場合があります。結果を検証するには、次のクエリを個別に各ノードで実行して、すべてのノードがその他のすべてのノードを表示できることを確認します。select * from system.peers;
-
ノードの起動時に、ゴシップ状態を消去します。
- tarボール・インストールでは、コマンドライン・オプションを使用するか、cassandra-env.shを編集できます。コマンドラインを使用するには、以下のように入力します。
install_location/bin/cassandra -Dcassandra.load_ring_state=false
- パッケージ・インストールの場合または上記のコマンドライン・オプションを使用しない場合は、以下の行をcassandra-env.shファイルに追加してください。
JVM_OPTS="$JVM_OPTS -Dcassandra.load_ring_state=false"
- パッケージ・インストール: /usr/share/cassandra/cassandra-env.sh
- tarボール・インストール: install_location/conf/cassandra-env.sh
cassandra-env.shファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール /etc/cassandra/cassandra-env.sh tarボール・インストール install_location/conf/cassandra-env.sh - tarボール・インストールでは、コマンドライン・オプションを使用するか、cassandra-env.shを編集できます。コマンドラインを使用するには、以下のように入力します。
-
クラスターを、1ノードずつシード・ノードから始めて順にオンラインにします。
- パッケージ・インストール:
$ sudo service cassandra start
- tarボール・インストール:
$ cd install_location $ bin/cassandra
- パッケージ・インストール:
次のタスク
cassandra-env.shファイルに追加した行を削除します。