クラスター内のすべてのノードでnodetool repair
を実行する必要がありますか、それとも1つのノードでのみ実行する必要があり、そこからCassandraが残りを処理しますか?
ドキュメントを見ると、これに関するリファレンスを見つけるのに苦労していますが、簡単に言えば、クラスターの各ノードでnodetool repair
を実行する必要があります。私が見つけることができる最も近いものは ノードの修復に関するドキュメント であり、クラスター内の複数のノードで一度に修復を実行しないでください。
-pr
フラグを指定して repair を実行することもできます。これにより、修復操作が現在のノードが担当する最初のトークン範囲に制限されます。これにより、残りのノードで実行するときに作業の重複が削減されます。
どのように動作するかは、構成、使用するCassandraのバージョン、およびrepairコマンドの実行方法によって異なります。
クラスター内の単一のノードでnodetool repair
を実行すると、そのノードが担当するすべてのデータ(トークン範囲)と、そのデータを担当する他のノードも修復されます。
したがって、たとえば、特定のクラスター内の単一のノードでnodetool repair
コマンドを実行するとします。
つまり、-hosts
フラグと-dc
フラグを使用して修復を実行するホストとデータセンターを定義することは可能です。さらに、-pr
フラグ(ノードが担当する最初のトークン範囲のみを選択する)を使用する場合は、nodetool repair -pr
onallを実行する必要があります。クラスタ内のノード。
覚えておくべきもう1つのフラグは-inc
フラグで、Cassandra 2.1に含まれていました。このオプションは、新しいデータ(以前に修復されていないデータ)のみを修復します。これに依存するときは、特にデータを頻繁に削除する場合は注意してください( これについての詳細 )。
他に覚えておくべきことは、Cassandraで行われるデフォルトの修復方法は異なる可能性があることです。Cassandra 2.1現在、nodetool repair
デフォルトで完全順次修復を実行します。バージョンの動作を調べる必要があります。
トピックの詳細については:
いいえ、個々のノードで実行する必要はありません。 nodetool repair
はノードのセットで実行されます。これは ドキュメント に明確に記載されています。
修復を実行するノードまたはデータの一部を制限できます。たとえば、パーティショナーの範囲(ノードが担当する範囲)に-pr
オプションを指定できますが、これはクラスター全体で実行する必要があります。ただし、-local
を選択すると、ノードのローカルデータセンターのノードが修復されます。