すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for MongoDB:チェーンレプリケーションの性能テスト

最終更新日:Jun 18, 2026

チェーンレプリケーションはプライマリーノードの負荷を軽減できますが、レプリケーションラグが増加する可能性があります。本ドキュメントでは、3、7、15 ノードの ApsaraDB for MongoDB レプリカセットインスタンスにおけるパフォーマンスへの影響をベンチマーク測定し、最適な構成の選択を支援します。

チェーンレプリケーション

チェーンレプリケーションとは

MongoDB はチェーンレプリケーションをサポートしています。チェーンレプリケーションは、レプリカセット内のセカンダリノードが別のセカンダリノードからデータを同期する際に発生します。これにより、プライマリノードの負荷を軽減できますが、特定のネットワークトポロジではレプリケーションラグが増加する可能性があります。詳細については、「Self-Managed Chained Replication」をご参照ください。

チェーンレプリケーションでは、すべてのノードが単一のチェーンを形成する必要はありません。セカンダリノードは、ラウンドトリップタイム (RTT) などのメトリクスに基づいて、プライマリノード以外の同期ソースを選択できます。次の図は、チェーンレプリケーションを使用するいくつかの 5 ノードレプリカセットトポロジを示しています。

image

チェーンレプリケーションの設定

コンソールの パラメーター設定 ページで settings.chainingAllowed パラメーターを調整することで、チェーンレプリケーションを有効または無効にできます。パラメーターの調整方法の詳細については、「データベースパラメーターの設定」をご参照ください。

チェーンレプリケーションによってレプリケーションラグが発生した場合は、この機能を無効にすることで同期パフォーマンスを最適化できます。

説明

セキュリティ上の理由から、ApsaraDB for MongoDB インスタンスで replSetReconfig コマンドを実行することはできません。コンソールでパラメーターを変更する必要があります。

インスタンスのパフォーマンスへの影響テスト

テスト環境

Elastic Compute Service (ECS) インスタンスと ApsaraDB for MongoDB レプリカセットインスタンスを作成します。詳細については、「レプリカセットインスタンスの作成」および「ウィザードを使用したECSインスタンスの作成」をご参照ください。

  • ApsaraDB for MongoDB インスタンスアーキテクチャ:プライマリノード 1 台、セカンダリノード 1 台、非表示ノード 1 台で構成される標準の 3 ノードレプリカセット。より大きな構成には、追加のセカンダリノードと読み取り専用ノードが含まれます。

  • ECS インスタンスと ApsaraDB for MongoDB インスタンス間のネットワークラウンドトリップタイム (RTT):両インスタンスが同じリージョンおよびゾーンにある場合、平均 0.103 ms。

次の表に、このテストで使用したインスタンス構成を示します。

パラメーター

ECS インスタンス

ApsaraDB for MongoDB インスタンス

リージョンとゾーン

中国 (北京) ゾーンH

中国 (北京) ゾーンH

ネットワークタイプ

VPC

VPC

インスタンスファミリー

コンピューティング最適化 c6

専用

インスタンスタイプ

ecs.c6.xlarge (4 vCPU, 8 GiB)

ecs.c7.xlarge (4 vCPU, 8 GiB)

ストレージタイプ

Elastic Simple Storage Device (ESSD) PL0

ESSD PL1

オペレーティングシステム

Alibaba Cloud Linux 3.2104 LTS 64 ビット

4.19.91-26.al7.x86_64

MongoDB バージョン

N/A

メジャーバージョン:5.0

マイナーベースラインバージョン:5.0.30

テストツール

このテストでは、オープンソースの YCSB 0.17.0 ベンチマークツールを使用します。

説明

Yahoo! Cloud Serving Benchmark (YCSB) は、データベースのパフォーマンスをベンチマークするための Java ベースのツールです。インストールと使用方法については、公式のYCSBリポジトリをご参照ください。

手順

  1. IPアドレスをホワイトリストに追加します。ECS コンソールにログインし、インスタンス詳細ページで ECS インスタンスのプライマリプライベートIPアドレスを見つけ、ApsaraDB for MongoDB インスタンスのホワイトリストに追加します。

  2. ECS インスタンスへの接続

  3. YCSB を使用してテストデータをロードします。

    ./bin/ycsb.sh load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=5000000 -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -p table=test -threads 8

    パラメーター:

    • recordcount:ApsaraDB for MongoDB インスタンスにロードするレコードの総数。

    • mongodb.url:ApsaraDB for MongoDB インスタンスの接続文字列。このテストでは、データベースアカウントは test、データベースは admin です。接続文字列は、ApsaraDB for MongoDB コンソール[内部接続 - VPC] セクションの Database Connection ページで確認できます。

    • threads:同時クライアントスレッドの数。

  4. YCSB のテスト結果とインスタンスのモニタリングデータを表示します。Monitoring Information ページで、[ノードモニタリング] タブに移動します。テストの時間範囲を選択し、プライマリノードの [CPU 使用率][QPS および平均応答時間] のメトリクスを表示します。詳細については、「ノードモニタリング (旧基本モニタリング)」をご参照ください。

テスト結果

パラメーター

書き込み懸念:書き込み操作に対して MongoDB から要求される確認レベル。このテストでは、次の値を使用します:

  • {w:"majority"}:デフォルト設定。書き込みは、レプリカセット内の投票ノードの過半数に複製された後に確認されます。

  • {w: 1}:書き込みは、プライマリノードが確認した後に確認されます。

詳細なテスト結果

3 ノードインスタンス

レプリカセットトポロジ:プライマリノード 1 台、セカンダリノード 1 台、非表示ノード 1 台。

書き込み懸念:{w:"majority"}

項目

チェーンレプリケーション有効

チェーンレプリケーション無効

スループット (ops)

5277

5241

CPU 使用率

65%

65%

QPS (カウント)

image.png

image.png

平均応答時間 (μs)

image.png

image.png

書き込み懸念:{w:1}

項目

チェーンレプリケーション有効

チェーンレプリケーション無効

スループット (ops)

15075

14785

CPU 使用率

93%

93%

QPS (カウント)

image.png

image.png

平均応答時間 (μs)

image.png

image.png

7 ノードインスタンス

レプリカセットトポロジ:プライマリノード 1 台、セカンダリノード 5 台、非表示ノード 1 台。

書き込み懸念:{w:"majority"}

項目

チェーンレプリケーション有効

チェーンレプリケーション無効

スループット (ops)

3005

4312

CPU 使用率

56%

85%

QPS (カウント)

image.png

image.png

平均応答時間 (μs)

image.png

image.png

書き込み懸念:{w:1}

項目

チェーンレプリケーション有効

チェーンレプリケーション無効

スループット (ops)

14414

11492

CPU 使用率

91%

93%

QPS (カウント)

image.png

image.png

平均応答時間 (μs)

image.png

image.png

15 ノードインスタンス

レプリカセットトポロジ:プライマリノード 1 台、セカンダリノード 5 台、非表示ノード 1 台、読み取り専用ノード 8 台。

この構成には、7 つの投票ノードと 8 つの非投票ノードがあります (読み取り専用ノードは投票しません)。

書き込み懸念:{w:"majority"}

項目

チェーンレプリケーション有効

チェーンレプリケーション無効

スループット (ops)

2932

3123

CPU 使用率

58%

91%

QPS (カウント)

image.png

image.png

平均応答時間 (μs)

image.png

image.png

書き込み懸念:{w:1}

項目

チェーンレプリケーション有効

チェーンレプリケーション無効

スループット (ops)

14093

7500

CPU 使用率

90%

94%

QPS (カウント)

image.png

image.png

平均応答時間 (μs)

image.png

image.png

パフォーマンスの比較とまとめ

  • ノード数が固定の場合、書き込み懸念の設定によって、チェーンレプリケーションを無効にすると書き込みパフォーマンスが低下するかどうかが決まります。

    書き込み懸念:{w:1}

    • 3 ノードインスタンスの場合、チェーンレプリケーションを無効にした場合のパフォーマンス低下はごくわずかです。

    • 7 ノードインスタンスの場合、チェーンレプリケーションを無効にすると、パフォーマンスが約 20.3% 低下します。

    • 15 ノードインスタンスの場合、パフォーマンスは 46.8% 低下し、プライマリノードの CPU 使用率が大幅に増加します。

    書き込み懸念:{w:"majority"}

    • 3 ノードインスタンスの場合、チェーンレプリケーションを無効にした場合のパフォーマンス低下はごくわずかです。

    • 7 ノードおよび 15 ノードのインスタンスの場合、チェーンレプリケーションを無効にすると、パフォーマンスが約 6.5% から 43.5% 向上します。

      パフォーマンス向上の理由:チェーンレプリケーションを無効にすると、レプリカセット内のすべてのノードの同期パスが短縮され、過半数条件を満たしやすくなり、各書き込み操作のレイテンシが短縮されます。

      非投票ノードの影響:投票ノードの数が 7 つに固定されている場合、プライマリノードのレプリケーション負荷が増加するため、非投票ノードを追加するほど、チェーンレプリケーションを無効にすることによるパフォーマンスの向上は減少します。

  • chainingAllowedwriteConcern の設定が同じ場合、ノード数が増えるにつれて書き込みパフォーマンスは低下します。この低下は、チェーンレプリケーションを無効にした場合により顕著になります。

    • デフォルト設定 (chainingAllowed:true および writeConcern:{w:"majority"}) では、レプリカセットの投票メンバーは最大 7 つであるため、過半数条件は変わらず、7 ノードから 15 ノードに拡張してもパフォーマンスの低下は大きくありません。

    • チェーンレプリケーションが有効かどうかにかかわらず、writeConcern:{w:1} のパフォーマンスは writeConcern:{w:"majority"} よりも大幅に優れています。これは、書き込み懸念の仕組みを考えると想定内の結果です。

    • 書き込み懸念の設定が固定されている場合、チェーンレプリケーションを無効にすると、有効にした場合と比べて、ノード数が増えるにつれてプライマリノードの CPU 使用率が大幅に増加します。

ベストプラクティス

  • ノード数が少ないデプロイメントの場合、チェーンレプリケーションを有効または無効にしても、インスタンスのパフォーマンスや CPU 使用率に大きな影響はありません。

  • ノード数が多いデプロイメントの場合:

    • writeConcern{w:1} の場合は、チェーンレプリケーションを有効にすることを推奨します。

    • writeConcern{w:"majority"} の場合は、プライマリノードの負荷 (CPU 使用率など) とインスタンスのパフォーマンスのバランスを取る必要があります。チェーンレプリケーションを無効にすると、書き込みパフォーマンスは向上しますが、プライマリノードの負荷が大幅に増加します。