インクリメンタル・リペアへの移行

インクリメンタル・リペアへの移行は、SSTableメタデータが変更されているため、いくつかのステップを実行して、ノードを変更し、RepairedAtフィールドを追加する必要があります。

インクリメンタル・リペアへの移行

sstablerepairedsetユーティリティを使用したインクリメンタル・リペアへの移行は、以下の条件の下でのみ推奨されます。
  • 最初のインクリメンタル・リペアを行う。
  • レベル化コンパクション・ストラテジを使用する。
最初のインクリメンタル・リペアが実行されるまで、CassandraではSSTableのリペア済み状態が不明であるため、フル・リペアとシーケンシャル・リペアがデフォルトになります。インクリメンタル・リペアを行った後は、アンチコンパクションによってリペア済みかどうかのマークがSSTableに付けられます。レベル化コンパクション・ストラテジを使用し、最初のインクリメンタル・リペアを実行した場合、Cassandraは、リペア済みステータスか未リペア・ステータスかが不明であるため、すべてのSSTableでサイズ階層化を実行します。この操作には、時間がかかる可能性があります。時間を節約するには、ノードを1つずつインクリメンタル・リペアに移行します。次のセクションで説明する移行手順では、RHELおよびDebianを除く、インストールのtools/binディレクトリーにあるユーティリティを使用します。
  • sstablemetadataは、SSTableのリペア済みまたは未リペアのステータスをチェックします
  • sstablerepairedsetは、手動で、リペア済みのマークをSSTableに付けます。
これらのコマンドの構文は、以下のとおりです。
$ sstablemetadata <sstable filenames>
$ sstablerepairedset [--is-repaired | --is-unrepaired] [-f <sstable-list> | <sstables>]
Cassandra 2.1.1では、sstablerepairedsetはコマンドライン上のSSTableのリストまたは"-f"フラグのあるSSTableのファイルを引数として使用できます。
注: RHELおよびDebianへのインストールでは、ツール・パッケージをインストールしてください。

この例は、sstablerepairedsetを使用して、SSTableを未リペア状態にし、SSTableのリペア済み状態を消去する方法を示します。前述のように、最初のインクリメンタル・リペアが実行されるまで、CassandraではSSTableのリペア済み状態が不明であるため、この例では、sstablerepairedsetを使用して、SSTableを未リペア状態にし、SSTableのリペア済み状態を消去する方法を示します。

  1. ノードを停止します。
  2. 以下のコマンドを実行します。
    $ sstablerepairedset --is-unrepaired -f list_of_sstable_names.txt
  3. ノードを再起動します。

    すべてのデータが未リペア状態に変更されます。

インクリメンタル・リペアに移行する手順

ノードを1つずつインクリメンタル・リペアに移行するには:

  1. nodetool disableautocompactionを使用してノードのコンパクションを無効にします。
  2. デフォルトのシーケンシャル・リペアをすべて実行します。
  3. ノードを停止します。
  4. sstablerepairedsetツールを使用して、コンパクションを無効にする前に作成されたすべてのSSTableにマークを付けます。
  5. cassandraを再起動します。

SSTableに変更を加えなかった場合、フル・リペア(ただし、パーティション範囲ではない)を実行すると、SSTableはリペア済み状態のままになります。