3

nodetool repairCassandra ノードで定期的に実行すると機能しなくなりますか?

Planet Cassandra FAQには、次のように記されています (強調を追加)。

アンチエントロピー ノード修復 – 頻繁に読み取られないデータの場合、または長期間ダウンしていたノード上のデータを更新する場合、ノード修復プロセス (アンチエントロピー修復とも呼ばれます) により、ノード上のすべてのデータがレプリカの一貫性が保たれます。ノードの修復 (nodetool ユーティリティを使用)は、通常のクラスタ メンテナンス操作の一環として定期的に実行する必要があります。

nodetool repairこれは、定期的に実行されていると私が見た唯一のリファレンスです。安ければ定期的に走らせても問題ないのですが、どのくらい高いのでしょうか?ノード上のすべてのレコードの一貫性チェック読み取りと同等のことを行いますか? それともそれよりも賢いですか?ドキュメントには、マークル ツリーの使用について言及されていますが、操作がどれほど高価であるかはわかりません。

ノードに 500 GB のデータがあり、そのノードが実際には他のノードと一致している場合 (修復はノーオペレーションです)、修復がディスクから読み取るデータの量について (500 GB すべてを読み取るには数時間かかります)時間)?そして、LAN 経由で送信されるデータの量について (LAN 経由で 500 GB をすべて送信するには、さらに 1 時間ほどかかる場合があります)。

4

1 に答える 1

16

一部のユース ケースは、他のケースよりも定期的な修理に大きく依存しています。ConsistencyLevel.ALL 未満で削除を実行する場合は、修復を実行して、削除された列が復活しないようにする必要があります。削除を行わない場合は、多くの場合、ヒント付きハンドオフと読み取り修復に依存して一貫性を維持できます。一貫性の低いレベルで読み書きしている場合、または定期的にサーバーのダウンタイムや過負荷が発生している場合は、おそらく修復を実行する必要があります。

修復が行うことは、それを実行するノード上のすべてのデータを読み取り (オプションで -pr (プライマリ範囲) オプションを使用して、ノードがプライマリ範囲を所有する範囲のみ)、マークル ツリーを構築することです。また、これらの範囲のいずれかのレプリカを格納するすべてのノードにメッセージを送信して、同じことを行います。これらのノードは、最初の修復ノードで複製されたデータのみを読み取ります。

500 GB のノードでマークル ツリーを構築すると、500 GB 全体が読み取られます (-pr を使用すると、レプリケーション ファクターの約 1 倍低くなります)。ただし、マークル ツリーは一定サイズ (数 MB) であるため、ノードが同期している場合、ネットワーク経由で送信されるデータはごくわずかです。

スケジュールされた修復を実行する最良の方法は、各ノードで順番に -pr を使用して実行することです。これにより、同じデータを何度も修復する必要がなくなります。また、クラスターに余分な負荷がかからないように、一度に 1 つのノードでのみ実行してください。

于 2013-07-15T14:38:36.120 に答える