2012-07-20 3 views
5

6つのCassandraノードすべてで週末に実行されるnodetool修復用の自動スクリプトを開発しています。 DC1に3つ、DC2に3つあります。最悪の場合のシナリオを理解したい。 DC1とDC2の間の接続が失われたり、複製のカップルがノードデール修復の前または途中でダウンするとどうなりますか。これはネットワークの問題、ネットワークのアップグレード(通常は週末に行われる)などである可能性があります。 Nodetoolの修復は、そのノード上の各データ範囲に対してMerkleツリーを計算し、それを他のレプリカ上のバージョンと比較することを理解します。したがって、レプリカ間に接続がない場合、どのようにnodetool修復が動作しますか?本当にノードを修復しますか?すべてのノードが起動して接続が復元されたら、ノードツールの修復を再実行する必要がありますか。彼らはこのイベントの副作用ですか?私はそれについてゴーグルをしたが、多くの詳細を見つけることができませんでした。どんな洞察も役に立つでしょう。カッサンドラレプリカノデトゥール修復中にダウンしますか?

ありがとうございました。

答えて

1

vnodeを使用しているとしましょう。デフォルトでは、各ノードに256の範囲がありますが、アイデアは同じです。

nodetool修復が既に開始された後にネットワークの問題が発生した場合は、修復が正常に行われた範囲と正常に修復されなかった範囲がログに表示されます。このエラーは、ノード "192.168.1.1が死んでいる"ため、範囲修復が失敗したと言います。

nodetool修復が開始される前にネットワークエラーが発生した場合、すべての範囲が同じエラーで失敗します。

いずれの場合も、ネットワークの問題が解決された後、別のnodetool修復を実行する必要があります。

6ノードのデータ量はわかりませんが、クラスタで処理できる場合は、週に1回、別の曜日にnodetool修復を実行する方がよいでしょう。たとえば、日曜日のノード1、月曜日のノード2などを修復できます。少量のデータがある場合、または1日の追加/更新があまり多くない場合は、1日に1回修復を実行することもできます。既に修復されたクラスタがあり、修復を頻繁に実行すると、完了までに要する時間が大幅に短縮されますが、データが多すぎると可能でない可能性があります。

一貫性レベル1を使用すると、データの違いのみに注意することができます。「修復されていない」ノードに対してクエリを実行すると、データは「修復された」ノードとは異なりますノード。たとえば、2つのノードが「修復されていない」場合に、整合性レベルを2に増やすことでこれを解決できます。実行したクエリは2つのノードを使用して解決されます。この「相違」を避ける最良の選択肢は、一貫性レベル=複製係数を持つことです。これは、ノードのうちの1つがクラスタ全体がダウンしたときに別の問題を引き起こします。クエリのタイムアウトを開始します。

希望すると助かります!

1

複数の修復オプションがあります。アプリケーションの使用状況に応じて1つを選択できます。 DSE Cassandraを使用している場合は、継続時間をgc_grace_seconds未満にして増分修復を実行するOpsCenter修復をスケジュールすることをお勧めします。

  1. デフォルト(なし):1プライマリとそれが実行されたノードが所有する2つのレプリカ:すべての3つのパーティションの範囲を修復すれば、以下の通り

    は、修理を行うためのさまざまなオプションがあります。合計5ノードが関与します2ノードは1パーティション範囲を固定し、2ノードは2パーティション範囲を固定し、1ノードは3パーティション範囲を固定します。

  2. -par:上記の操作を並行して実行します。
  3. -pr:実行されたノードのプライマリパーティション範囲のみを修正します。 EACH_QUORUMの書き込み整合性を使用している場合は、-localオプションも使用して、クロスDCトラフィックを削減してください。

修理によるパフォーマンスへの影響を避けるために、すでに本番環境にある場合は、オプション3を使用することをお勧めします。

修理について詳しくは、こちらをご覧ください。here

関連する問題