web-dev-qa-db-ja.com

すべてのノードでnodetoolの修復を実行する必要がありますか?

クラスター内のすべてのノードでnodetool repairを実行する必要がありますか、それとも1つのノードでのみ実行する必要があり、そこからCassandraが残りを処理しますか?

12
2rs2ts

ドキュメントを見ると、これに関するリファレンスを見つけるのに苦労していますが、簡単に言えば、クラスターの各ノードでnodetool repairを実行する必要があります。私が見つけることができる最も近いものは ノードの修復に関するドキュメント であり、クラスター内の複数のノードで一度に修復を実行しないでください。

-prフラグを指定して repair を実行することもできます。これにより、修復操作が現在のノードが担当する最初のトークン範囲に制限されます。これにより、残りのノードで実行するときに作業の重複が削減されます。

9
Aaron

どのように動作するかは、構成、使用するCassandraのバージョン、およびrepairコマンドの実行方法によって異なります。

クラスター内の単一のノードでnodetool repairを実行すると、そのノードが担当するすべてのデータ(トークン範囲)と、そのデータを担当する他のノードも修復されます。

したがって、たとえば、特定のクラスター内の単一のノードでnodetool repairコマンドを実行するとします。

  • レプリケーション係数が3の3ノードクラスタを実行している場合、すべてのノードがすべてのデータを所有するため、すべてのノードに対して修復が実行されます。
  • レプリケーション係数が2の6ノードクラスターを実行している場合、データは6ノードのうち2ノードでのみ修復されます。残りの4つのノードのうち2つ以上で修復を開始する必要があります。

つまり、-hostsフラグと-dcフラグを使用して修復を実行するホストとデータセンターを定義することは可能です。さらに、-prフラグ(ノードが担当する最初のトークン範囲のみを選択する)を使用する場合は、nodetool repair -pr onallを実行する必要があります。クラスタ内のノード。

覚えておくべきもう1つのフラグは-incフラグで、Cassandra 2.1に含まれていました。このオプションは、新しいデータ(以前に修復されていないデータ)のみを修復します。これに依存するときは、特にデータを頻繁に削除する場合は注意してください( これについての詳細 )。

他に覚えておくべきことは、Cassandraで行われるデフォルトの修復方法は異なる可能性があることです。Cassandra 2.1現在、nodetool repairデフォルトで完全順次修復を実行します。バージョンの動作を調べる必要があります。

トピックの詳細については:

https://www.datastax.com/dev/blog/repair-in-cassandra

5
Gene

いいえ、個々のノードで実行する必要はありません。 nodetool repairはノードのセットで実行されます。これは ドキュメント に明確に記載されています。

修復を実行するノードまたはデータの一部を制限できます。たとえば、パーティショナーの範囲(ノードが担当する範囲)に-prオプションを指定できますが、これはクラスター全体で実行する必要があります。ただし、-localを選択すると、ノードのローカルデータセンターのノードが修復されます。

2
nkzscorpion