5

6 つの Cassandra ノードすべてで毎週末実行される nodetool 修復用の自動スクリプトを開発しています。DC1 に 3 個、DC2 に 3 個あります。最悪のシナリオを理解したいだけです。ノードツールの修復前または修復中に、DC1 と DC2 の間の接続が失われたり、レプリカのカップルがダウンしたりするとどうなりますか。これは、ネットワークの問題、ネットワークのアップグレード (通常は週末に発生します)、またはその他の原因である可能性があります。nodetool repair は、そのノードのデータ範囲ごとにマークル ツリーを計算し、それを他のレプリカのバージョンと比較することを理解しています。したがって、レプリカ間に接続がない場合、ノードツールの修復はどのように動作しますか? 本当にノードを修復しますか。すべてのノードが起動し、接続が復元された後、ノード ツールの修復を再実行する必要がありますか? このイベントの副作用はありますか? ぐぐってみましたが、詳しいことはわかりませんでした。どんな洞察も役に立ちます。

ありがとう。

4

2 に答える 2

1

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

以下は、修復を行うためのさまざまなオプションです。

  1. デフォルト (なし): 3 つのパーティション範囲すべてを修復します: 実行されたノードが所有する 1 つのプライマリと 2 つのレプリカ。合計 5 つのノードが関与します。2 つのノードが 1 つのパーティション範囲を修正し、2 つのノードが 2 つのパーティション範囲を修正し、1 つのノードが 3 つのパーティション範囲を修正します。
  2. -par: 上記の操作を並行して行います。
  3. -pr : 実行されたノードのプライマリ パーティション範囲のみを修正します。EACH_QUORUM の書き込み整合性を使用している場合は、-local オプションも使用してクロス DC トラフィックを減らします。

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

修理について詳しく知りたい方はこちらをご覧ください

于 2016-05-26T19:59:56.243 に答える
1

vnode を使用しているとします。これは、デフォルトでは各ノードに 256 の範囲があることを意味しますが、考え方は同じです。

nodetool の修復が既に開始された後にネットワークの問題が発生した場合、一部の範囲が正常に修復され、他の範囲が修復されていないことがログに表示されます。エラーは、ノード「192.168.1.1が死んでいる」などの理由で範囲の修復が失敗したことを示します。

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

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

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

副作用に関しては、整合性レベル 1 を使用する場合にのみデータの違いに注意できます。「修復されていない」ノードに対してクエリを実行すると、データは「修復された」ノードのデータとは異なります。たとえば、整合性レベルを 2 に上げることでこれを解決できます。2 つのノードが「修復されていない」場合、実行したクエリがそれらの 2 つのノードを使用して解決されると、再び違いが見られます。クエリでこの「違い」を回避するための最良のオプションは、一貫性レベル = レプリケーション係数を持つことであるため、ここではトレードオフがあります。これは、ノードの 1 つがダウンし、クラスター全体がダウンし、クエリでタイムアウトを受け取り始めます。

それが役に立てば幸い!

于 2013-11-22T18:34:42.960 に答える