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