ノード上のゴシップ状態のパージ

ゴシップ状態の問題の修正。

ゴシップ情報は、ゴシップ通信を待つ必要なしにノード再起動後すぐに使用するために、各ノードによってローカルに保持されます。

手順

ゴシップの状態に問題が生じて、それを修正する必要が万一発生した場合は、以下のようにします。

  1. MX4JまたはJConsoleを使用して、ノードのJMXポートに接続してから、JMXメソッドを使用して、Gossiper.unsafeAssassinateEndpointsip_address)問題が生じたノードを強制終了します。

    この処理の完了には数秒かかるため、ノードが削除されたことについて確認のメッセージが表示されるまで待ってください。

  2. 上記のJMXメソッドによってこの問題が解決されない場合は、クライアントのアプリケーションが書き込みをクラスターに送信するのを停止します。
  3. クラスター全体をオフラインにします。
    1. 各ノードをドレーンします。
      $ nodetool options drain
    2. 各ノードを停止します。
      • パッケージ・インストール:
        $ sudo service cassandra stop
      • tarボール・インストール:
        $ sudo service cassandra stop
  4. 以下のpeersディレクトリーからデータを消去します。
    $ sudo rm -r /var/lib/cassandra/data/system/peers/*
    注意:
    この手順を行う場合には注意を払ってください。注意を払わずに実行および結果の検証を行うと、この操作によってCassandraから内部システム・データが消去されるため、アプリケーションの障害を引き起こす場合があります。結果を検証するには、次のクエリを個別に各ノードで実行して、すべてのノードがその他のすべてのノードを表示できることを確認します。
    select * from system.peers;
  5. ノードの起動時に、ゴシップ状態を消去します。
    • 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
  6. クラスターを、1ノードずつシード・ノードから始めて順にオンラインにします。
    • パッケージ・インストール:
      $ sudo service cassandra start
    • tarボール・インストール:
      $ cd install_location 
      $ bin/cassandra

次のタスク

cassandra-env.shファイルに追加した行を削除します。