インクリメンタル・リペアへの移行
インクリメンタル・リペアへの移行は、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のファイルを引数として使用できます。この例は、sstablerepairedsetを使用して、SSTableを未リペア状態にし、SSTableのリペア済み状態を消去する方法を示します。前述のように、最初のインクリメンタル・リペアが実行されるまで、CassandraではSSTableのリペア済み状態が不明であるため、この例では、sstablerepairedsetを使用して、SSTableを未リペア状態にし、SSTableのリペア済み状態を消去する方法を示します。
- ノードを停止します。
- 以下のコマンドを実行します。
$ sstablerepairedset --is-unrepaired -f list_of_sstable_names.txt
- ノードを再起動します。
すべてのデータが未リペア状態に変更されます。
インクリメンタル・リペアに移行する手順
ノードを1つずつインクリメンタル・リペアに移行するには:
- nodetool disableautocompactionを使用してノードのコンパクションを無効にします。
- デフォルトのシーケンシャル・リペアをすべて実行します。
- ノードを停止します。
- sstablerepairedsetツールを使用して、コンパクションを無効にする前に作成されたすべてのSSTableにマークを付けます。
- cassandraを再起動します。
SSTableに変更を加えなかった場合、フル・リペア(ただし、パーティション範囲ではない)を実行すると、SSTableはリペア済み状態のままになります。