2

Cassandra 2 を使用したマルチ データ センター セットアップでの「nodetool repair」のパフォーマンスを理解したいだけです。

各データセンターに 2 ~ 4 個のレプリカを持つキースペースを用意する予定です。数十のデータセンターがあるかもしれません。書き込みは状況に応じて LOCAL_QUORUM/EACH_QUORUM の一貫性で行われ、読み取りは通常 LOCAL_QUORUM の一貫性で行われます。質問:

  1. nodetool の修復の複雑さは、すべてのデータ センターのレプリカの数に比例して増加しますか?

  2. それとも、nodetool の修復の複雑さは、現在のデータ センター内のレプリカの数とデータ センターの数の組み合わせに比例して増加しますか? 漠然と、このモデルは現在のデータセンターの個々のノードのそれぞれとデータを同期する可能性がありますが、他のデータセンターのレプリカに対して EACH_QUORUM のような操作を行います。

  3. クラスターをスケーリングするには、既存のデータ センターにノードを追加するのと、全体として一定数のレプリカを想定して新しいデータ センターを追加するのとのどちらが良いですか? この質問は、nodetool 修復パフォーマンスのコンテキストで行います。

4

1 に答える 1

8

nodetool の修復がクラスターにどのように影響するか、またはクラスターのサイズが修復にどのように影響するかを理解するには、修復中に何が起こるかを理解する必要があります。修復には 2 つのフェーズがあり、最初のフェーズはデータのマークル ツリーを構築することです。2 つ目は、実際にレプリカにツリー間の違いを比較させ、必要に応じて相互にストリーミングさせることです。

この最初のフェーズは、修復を実行するノードのディスク上のほぼすべてのデータに影響するため、ディスク io に負荷がかかる可能性があります。リペアがディスク全体に影響するのを避ける簡単な方法の 1 つは、-pr ​​フラグを使用することです。-pr を使用すると、修復が必要な disksize データの代わりに disksize/RF になります。ノードで修復を実行すると、これらの範囲のいずれかのレプリカを格納するすべてのノードにメッセージが送信され、マークル ツリーも構築されます。すべてのレプリカが同時にそれを行うため、データのその部分に対する応答が遅くなる可能性があるため、これは問題になる可能性があります。

修復操作が他のデータ センターにどのように影響するかを決定する要因は、レプリカ配置戦略の使用です。データ センター間で一貫性が必要になるため (EACH_QOURUM のケース)、ネットワーク トポロジ戦略のようなクロス DC レプリケーション戦略を使用することが不可欠です。修復の場合、これは、EACH_QUORUM の一貫性のケースがいくつかあるため、修復の実行中に自分自身をローカル DC に制限できないことを意味します。すべてのデータ センターのすべてのレプリカに影響する修復を回避するには、次のことを行う必要があります。これにより、データのスナップショットが作成されます (スナップショットは既存の sstable への単なるハードリンクであり、sstable が不変であるという事実を利用して、したがって、スナップショットは非常に安価になります)、スナップショットから順次修復されます。これは、特定のレプリカ セットに対して、一度に 1 つのレプリカのみが検証圧縮を実行することを意味し、動的スニッチが他のレプリカを介してアプリケーションのパフォーマンスを維持できるようにします。

今、私たちはあなたが持っている質問に答えることができます.

  1. nodetool の修復の複雑さは、すべてのデータ センターのレプリカの数に比例して増加しますか? これを制限するには、レプリケーション戦略を動的スニッチでラップし、修復中に -snapshot オプションを渡します。

  2. それとも、nodetool の修復の複雑さは、現在のデータ センター内のレプリカの数とデータ センターの数の組み合わせに比例して増加しますか? 漠然と、このモデルは現在のデータセンターの個々のノードのそれぞれとデータを同期する可能性がありますが、他のデータセンターのレプリカに対して EACH_QUORUM のような操作を行います。上記のアプローチを使用すると、レプリカの数に応じて実行時間の点で複雑さが増します。これは、上記のアプローチでは一度に 1 つのレプリカで順次修復が行われるためです。

  3. クラスターをスケーリングするには、既存のデータ センターにノードを追加するのと、全体として一定数のレプリカを想定して新しいデータ センターを追加するのとのどちらが良いですか? この質問は、nodetool 修復パフォーマンスのコンテキストで行います。nodetool repair の観点から見ると、上記のアプローチを採用しても、これは何の違いもありません。レプリカの総数に依存するためです。

また、nodetool を使用した修復の目的は、削除が戻らないようにすることです。定期的な修復頻度の厳しい要件は、gc_grace_seconds の値です。データの削除や上書きがほとんどないシステムでは、ディスク容量への影響を最小限に抑えて gc_grace の値を上げることができます。これにより、nodetool ユーティリティを使用して修復操作をスケジュールする間隔を広げることができます。頻繁な修復を回避するための推奨される方法の 1 つは、設計によりレコードを不変性にすることです。数十のデータセンターで実行する必要があり、そうでなければ運用はすでに苦痛になるため、これは重要かもしれません.

于 2014-08-04T05:09:40.257 に答える