遅延レプリカセット
遅延ノードには、 レプリカセットのデータセットのコピーが含まれます。 ただし、 遅延ノードのデータセットには、セットの以前の状態または遅延状態が反映されます。 たとえば、現在の時刻が09 : 52で、ノードの遅延が 1 時間の場合、遅延ノードは08 : 52よりも新しい操作を持ちません。
遅延ノードは「ローリングバックアップ」またはデータセットの実行中の「履歴」スナップショットであるため、さまざまな種類の人為的エラーから回復するのに役立つ場合があります。 たとえば、 遅延ノード により、アプリケーションのアップグレードが失敗したり、データベースやコレクションの削除などの演算子エラーから回復できるようになります。
Considerations
要件
遅延メンバー:
でなければなりません 優先順位 0のノード。 遅延ノードがプライマリにならないようにするには、優先順位を 0 に設定します。
でなければなりません 非表示メンバー。 アプリケーションが 遅延メンバー を参照したりクエリを実行したりすることは常に防止します。
が 1 に設定されている場合は、プライマリの 選挙
members[n].votes
で投票し ます 。 をmembers[n].votes
0 に設定して遅延ノードが非投票になるようにすると、パフォーマンスが向上します。
重要
レプリカセットに遅延ノードが含まれている場合は、遅延ノードが 非表示 で、投票権のないことを確認します。
遅延レプリカセット ノードを非表示にすると、そのノードに直接接続せずにアプリケーションが遅延データを参照したりクエリを実行したりできなくなります。 遅延レプリカセット ノードを投票権のないものにすると、書込み保証(write concern "majority"
による書込み操作の確認にはカウントされません。
遅延ノードを非表示にせず、1 つ以上のノードが使用できなくなった場合、レプリカセットは遅延ノードを待機する必要があり、コミット ポイントは遅延します。 コミット ポイントが遅延すると、パフォーマンスの問題が発生する可能性があります。
たとえば、プライマリ-セカンダリ-遅延レプリカセットの構成で、遅延セカンダリが 10 分の遅延で投票するものを考えてみましょう。
遅延していないセカンダリが 1 つ使用できない場合、プライマリ遅延の削減構成は、 "majority"
で書込み (write) 操作を確認するまでに少なくとも 10 分待機する必要があります。マジョリティ コミット ポイントが進むまでに時間がかかり、キャッシュ負荷による同様のパフォーマンスの問題が発生しますセカンダリ と アービタ (PSA)レプリカセットがあるプライマリ。
マジョリティ コミット ポイントの詳細については、「因果整合性、読み取り保証、書込み保証」を参照してください。 パフォーマンスの問題の解決に関する追加の詳細については、「レプリカセットのメンテナンス チュートリアル 」を参照してください。
動作
遅延ノードは、ソースoplogからの操作をコピーして遅延で適用します。 遅延量を選択するときは、遅延量を考慮してください。
は、予想されるメンテナンスウィンドウの時間以上である必要があります。
は、oplog の容量より小さくなければなりません。 oplogサイズの詳細については、 「 oplogサイズ」 を参照してください。
書込み保証 (write concern)
遅延レプリカセット ノードは、 w: <number>
で発行された書込み (write) 操作に確認応答を返せます。 ただし、 w : "majority"
で発行された書込み操作の場合、遅延ノードは投票ノードでもある必要があります( members[n].votes
0
が より大きい場合)、"majority"
書込み操作を確認します。投票権のないレプリカセット ノード( members[n].votes
は0
です)は、 majority
書込み保証(write concern)付きで書込み操作の確認に貢献できません。
遅延させたセカンダリは、設定された secondaryDelaySecs
よりも早く書込み (write) 確認応答を返すことはありません。
シャーディング
シャーディングされたクラスターでは、バランサーが有効になっている場合、 遅延ノード のユーティリティは制限されます。 遅延ノードはチャンクの移行を遅延して複製するため、シャーディングされたクラスター内の 遅延ノード の状態は、遅延ウィンドウ中に移行が発生した場合、シャーディングされたクラスターの前の状態に回復するのには役立ちません。
例
次の 5 ノードのレプリカセットでは、プライマリとすべてのセカンダリにデータセットのコピーがあります。 1 つのノードが 3600 秒(1 時間)の遅延で操作を適用します。 この 遅延ノードも非表示であり、優先順位 0のノード です。
構成
遅延ノードでは、 members[n].priority
は0
に等しく、 members[n].hidden
はtrue
に等しく、 members[n].secondaryDelaySecs
は遅延秒数と等しくなります。
{ "_id" : <num>, "host" : <hostname:port>, "priority" : 0, "secondaryDelaySecs" : <seconds>, "hidden" : true }
遅延ノードを設定するには、「遅延型自己管理型レプリカセット ノードの構成 」を参照してください。