nodetool repair

1つ以上のテーブルをリペアします。

1つ以上のテーブルをリペアします。詳細については、「手動リペア:アンチエントロピー・リペア」を参照してください。

構文

$ nodetool [options] repair [args] [--] <keyspace> <tables>
表 1. オプション
短い形式 長い形式 説明
-h --host ホスト名またはIPアドレス
-p --port ポート番号
-pwf --password-file パスワード・ファイルのパス
-pw --password パスワード
-u --username ユーザー名
注:
  • オプションは以下のとおりです。
    • (-h | --host) <ホスト名> | <IPアドレス>
    • (-p | --port) <ポート番号>
    • (-pw | --password) <パスワード>
    • (-u | --username) <ユーザー名>
    • (-pwf <passwordFilePath | --password-file <passwordFilePath>)
  • -- オプションと間違えられるような引数とオプションを分離します。
  • keyspaceはキースペース名です。デフォルトは、すべてです。
  • tableは、スペースで区切られた1つ以上のテーブル名です。デフォルトは、すべてです。
  • tarボール・インストールの場合は、install_location/binディレクトリからコマンドを実行します。
  • RMI認証用のユーザー名とパスワードがホストのcassandra-env.shファイルに明示的に設定されている場合は、認証情報を指定する必要があります。
  • nodetool assassinateは、-hを使用して1つ以上の他のノードを指定していなければ、クラスター内の1つのノード上で実行されます。コマンド発行元のノードがコマンドの実行対象である場合、-hオプションを使用して実行対象を指定する必要はありません。それ以外の場合は、リモート呼び出しの場合、-hオプションを使用して1つまたは複数の実行対象ノードを指定します。
表 2. 引数
短い形式 長い形式 説明
-dc <dc> --in-dc <dc> 指定したデータ・センターをリペアします。
-dcpar --dc-parallel データ・センターを並列処理でリペアします。
-et <end_token> --end-token <end_token> 修正範囲内の最後のトークン
-full --full フル・リペアを実行します。
-j <job_threads> --job-threads <job_threads> リペア・ジョブを実行するスレッドの数。デフォルト:1 最大: 4
-local --in-local-dc 同じデータ・センター内のノードだけをリペアします。
-pr --partitioner-range パーティショナーから返された最初の範囲だけをリペアします。
-seq --sequential シーケンシャル・リペア
-st <start_token> --start-token <start_token> リペア範囲内の最初のトークン
-tr --trace リペアをトレースします。トレースはsystem_traces.eventsに記録されます。
  • -dcまたは--in-dcおよびその後に続くデータ・センター名は、指定したデータ・センター内のノードにリペアを限定することを意味します。指定したデータ・センターは、ローカル・データ・センターである必要があります。
  • -dcparまたは--dc-parallelは、データ・センターを並列処理でリペアすることを意味します。
  • -etまたは--end-tokenおよびその後に続くトークンのUUIDは、このトークンのリペア後にノードの範囲のリペアを停止することを意味します。近隣のノードを指定するには、-hostsを使用します。
  • -incまたは—incrementalは、インクリメンタル・リペアを実行することを意味します。
  • -localまたは--in-local-dcは、同じデータ・センターのノードのみをリペアすることを意味します。
  • -parまたは--parallelは、並列処理でリペアを実行することを意味します。
  • -prまたは--partitioner-rangeは、パーティショナーが返した最初の範囲のみをリペアすることを意味します。
  • -stまたは--start-tokenおよびその後に続くトークンのUUIDは、このトークンのノードの範囲のリペアを開始することを意味します。

構文の凡例

各文の構文セクションの形式には、以下のような意味があります。

  • 大文字はリテラルを意味する
  • 小文字は、リテラルでないことを意味する
  • イタリック体は指定が任意であることを意味する
  • パイプ(|)記号はORまたはAND/ORを意味する
  • 省略記号(...)は繰り返し可能を意味する
  • 範囲記号「(」および「)」はリテラルではなく、範囲を示す

この構文には、CQL文の終了となるセミコロンは含まれていません。

説明

特にデータを頻繁に削除する場合には、アンチエントロピー・ノード・リペアを定期的に実行することが重要です。nodetool repairコマンドは、クラスター内の1つまたは複数のノードをリペアします。また、リペアを特定のノード集合に限定するオプションがあります。アンチエントロピー・ノード・リペアにより、以下のタスクが実行されます。
  • レプリカ上のすべてのデータの整合性が取れていることを確認する。
  • ダウンしているノードの不整合をリペアします。

Cassandra 2.1以前では、フル・リペアがデフォルトです。Cassandra 2.2以降では、インクリメンタル・リペアがデフォルトです。Cassandra 2.2以降では、フル・リペアを実行すると、SSTablesがリペア済み、かつアンチコンパクションとマークされます。Cassandra 2.1以前では、シーケンシャル・リペアがデフォルトです。Cassandra 2.2以降では、パラレル・リペアがデフォルトです。

オプションを使用する

オプションを使用して以下のその他のタイプのリペアを実行できます。
  • シーケンシャルまたはパラレル
  • フルまたはインクリメンタル

不良ノードのリペアに使用する適格ノードをリストするには、-hostsオプションを使用します。不良ノードを指定するには、-hオプションを使用します。

フル・リペアが必要な場合は、-fullオプションを使用します。デフォルトでは、インクリメンタル・リペアを実行すると、すでにリペアされたデータを保持し、リペアされていないSSTablesのMerkleツリーだけが計算されるため、Merkleツリーを常時構築する必要がなくなります。リペアを頻繁に実行するという前提では、データセットが大きくなっても、リペア・プロセスは他のタイプのリペアよりも効率的です。最初にインクリメンタル・リペアを実行する前に、Cassandra 2.2以前に作成されたテーブルに対して必要であれば、移行手順を実行します。

データ・センターを並列処理でリペアするには、-dcparオプションを使用します。パラレル・リペアは、シーケンシャル・リペアとは異なり、すべてのデータ・センターのMerkleテーブルを一度に構築します。このため、スナップショットは不要です(生成されません)。パラレル・リペアは、リペアをすばやく完了したい場合や、リペア中にリソースを完全に消費できる実稼働ダウンタイムがある場合に使用します。

-pr オプションを使用してパーティションナー範囲リペアを実行することは、一般的には推奨しません。

すべてのnodetool repair引数はオプションです。以下の例は、以下のタイプのリペアを示しています。
  • 現在のノード上のすべてのキースペースのシーケンシャル・リペア
  • 10.2.2.20または10.2.2.21適格パーティションを使用した、現在のノード上の不良パーティションのパーティショナー範囲リペア
  • リング上の2つのノード間のすべてのノードのstart-point-to-end-pointリペア
$ nodetool repair -seq
$ nodetool repair -pr -hosts 10.2.2.20 10.2.2.21
$ nodetool -st a9fa31c7-f3c0-44d1-b8e7-a26228867840c -et f5bb146c-db51-475ca44f-9facf2f1ad6e 

リペアをローカル・データ・センターに限定するには、-dcオプションに続いてデータ・センターの名前を指定します。コマンドは、リペアするデータ・センター内のノードから発行します。指定したデータ・センター以外のデータ・センターからコマンドを発行すると、エラーが返されます。ローカルのデータ・センターのみをリペアするために、このオプションとともに-prを使用しないでください。

$ nodetool repair -dc DC1
[2014-07-24 21:59:55,326] Nothing to repair for keyspace 'system' [2014-07-24 21:59:55,617] Starting repair command #2, repairing 490 ranges for keyspace system_traces (seq=true, full=true) [2014-07-24 22:23:14,299] Repair session 323b9490-137e-11e4-88e3-c972e09793ca for range (820981369067266915,822627736366088177] finished [2014-07-24 22:23:14,320] Repair session 38496a61-137e-11e4-88e3-c972e09793ca for range (2506042417712465541,2515941262699962473] finished . . .

system.logを確認すると、リペアがDC1内のIPアドレスでのみ行われていることがわかります。

. . . INFO [AntiEntropyStage:1] 2014-07-24 22:23:10,708 RepairSession.java:171 - [repair #16499ef0-1381-11e4-88e3-c972e09793ca] Received merkle tree for sessions from /192.168.2.101 INFO [RepairJobTask:1] 2014-07-24 22:23:10,740 RepairJob.java:145 - [repair #16499ef0-1381-11e4-88e3-c972e09793ca] requesting merkle trees for events (to [/192.168.2.103, /192.168.2.101]) . . .