自己管理型 PSA レプリカセットによるパフォーマンスの問題の軽減
Overview
PSA(プライマリ セカンダリ アービタ)アーキテクチャを持つ 3 ノードのレプリカセット、または 3 つのノードからなる PSA シャードを持つシャーディングされたクラスターでは、データを含むノードがダウンしたり遅延したりするとパフォーマンスの問題が発生する可能性があります。
データを保持している ノードの 1 つがダウンすると、もう 1 つのノードがプライマリになります。 この状態でも、 w:1
による書込みは引き続き成功しますが、書込み保証(write concern "majority"
による書込みは成功せず、コミット ポイントは遅延し始めます。 PSA レプリカセットに遅延したセカンダリが含まれており、レプリカセットに変更を過半数でコミットするために 2 つのノードが必要な場合は、コミット ポイントも遅延します。
コミット ポイントが遅延している場合、クラスターのパフォーマンスに影響を与える可能性があります。
storage engineは、コミット ポイントの後に発生するすべての変更をディスクに保持し、永続的な履歴を保持します。 これらの書込み (write) による追加 I/O は、時間の経過とともに増加する傾向があります。 これは書込みパフォーマンスに大きく影響を与え、キャッシュ負荷を高める可能性があります。
MongoDB は、 が削除されるのを回避するために、 oplog
majority commit point
が設定されたサイズ制限を超えて大きくなるようにします。
キャッシュ負荷を軽減し、書込みトラフィックの増加を軽減するには、使用できない、または遅延しているノードに対してvotes: 0
とpriority: 0
を設定します。 「過半数」で発行された書込み (write) 操作の場合、過半数コミットを実行するために必要なノードの数を決定するには、投票権を持つノードのみが考慮されます。 ノードの構成をvotes: 0
に設定すると、書込み保証(write concern "majority"
で書き込みをコミットするために必要なノード数が 2 から 1 に減少し、これらの書込みを成功できるようになります。
セカンダリが追いつくと、 rs.reconfigForPSASet()
メソッドを使用してvotes
を1
に戻します。
注意
MongoDB の以前のバージョンでは、 enableMajorityReadConcern
と--enableMajorityReadConcern
を構成可能で、デフォルトの読み取り保証(read concern "majority"
を無効にすることで同様の効果がありました。
手順
3 メンバーのプライマリとセカンダリのアービタ(PSA)アーキテクチャを持つ配置のキャッシュ負荷と書込みトラフィックの増加を軽減するには、使用できない、または遅延しているセカンダリに{ votes: 0, priority: 0 }
を設定します。
cfg = rs.conf(); cfg["members"][<array_index>]["votes"] = 0; cfg["members"][<array_index>]["priority"] = 0; rs.reconfig(cfg);
セカンダリの構成を後で変更する場合は、 rs.reconfigForPSASet()
メソッドを使用します。