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

ApsaraDB for MongoDB:レプリカセットインスタンスへの最大接続数のストレステスト

最終更新日:Jun 12, 2024

このトピックでは、異なる仕様の複数のApsaraDB for MongoDBレプリカセットインスタンスへの最大接続数のストレステストを実行する方法について説明します。 テストは、Elastic Compute Service (ECS) インスタンスからApsaraDB for MongoDBインスタンスにアクセスすることによって実行されます。

テスト環境

ECSインスタンスとApsaraDB for MongoDBインスタンスを作成します。 詳細については、「レプリカセットインスタンスの作成」および「ECSインスタンスの作成」をご参照ください。

次の表に、テストで使用されるECSインスタンスとApsaraDB for MongoDBインスタンスの設定を示します。

設定アイテム

ECSインスタンス

クラウドディスクを使用するApsaraDB for MongoDBインスタンス

ローカルディスクを使用するApsaraDB for MongoDBインスタンス

リージョンとゾーン

北京 (中国北部) ゾーンH

北京 (中国北部) ゾーンH

北京 (中国北部) ゾーンH

ネットワークタイプ

Virtual Private Cloud (VPC)

VPC

VPC

インスタンスファミリー

c6e: パフォーマンスが強化されたコンピューティング最適化インスタンスファミリー

一般目的および専用

一般目的および専用

インスタンスタイプ

ecs.c6e.2xlarge

使用可能な3つのインスタンスタイプ。 詳細については、「テスト結果」をご参照ください。

使用可能な2つのインスタンスタイプ。 詳細については、「テスト結果」をご参照ください。

ストレージタイプ

エンタープライズSSD (ESSD) AutoPLディスク

ESSD

ローカルディスク

画像またはエンジンのバージョン

Alibaba Cloud Linux 3.2104 LTS 64ビット

4.19.91-26.al7.x86_64

3.10.0-327.ali2017.alios7.x86_64

カーネルバージョン

N/A

  • メジャーバージョン: MongoDB 4.4

  • マイナーバージョンのベースライン: 4.4.28

  • メジャーバージョン: MongoDB 4.2

  • マイナーバージョンのベースライン: 4.2.23

  • テストで使用されるApsaraDB for MongoDBインスタンスは、プライマリノード、セカンダリノード、および隠しノードで構成される3ノードアーキテクチャを採用しています。

  • テストで使用されるECSインスタンスとApsaraDB for MongoDBインスタンスは、同じリージョンの同じゾーンにデプロイされており、平均往復時間 (RTT) は0.103 msです。

テストツール

  • テストでは、オープンソースのYahoo Cloud Serving Benchmark (YCSB) 0.17.0ツールを使用します。

    説明

    YCSBは、複数の種類のデータベースのパフォーマンスをベンチマークするために使用できるJavaツールです。 YCSBのインストール方法と使用方法の詳細については、「YCSB」をご参照ください。

  • テストでは、カスタム接続ストレステストプログラムが使用されます。 詳細については、「96,000接続のストレステストに関する追加情報」をご参照ください。

テスト方法

  1. ECSインスタンスのプライマリプライベートIPアドレスをApsaraDB for MongoDBインスタンスのホワイトリストに追加します。 詳細については、「ApsaraDB For MongoDBインスタンスのIPアドレスホワイトリストの変更」をご参照ください。
    説明 ECSコンソールにログインし、[インスタンスの詳細] ページの [ネットワーク情報] セクションでECSインスタンスの [プライマリプライベートIPアドレス] を表示します。
  2. ECSインスタンスに接続します。 詳細については、「ECSコンソール (エクスプレスバージョン) を使用したECSインスタンスの作成と管理」をご参照ください。
  3. YCSBツールを使用してテストデータをロードします。

    // ycsb Runコマンドを実行します。
    . /bin/ycsb.sh load mongodb -s -pワークロード=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p mongodb.url="mongodb:// test:**** @ dds-bp13e84d11 **** .mongodb.rds.aliyuncs.com:3717/admin" -p table=test -threads 8 

    次の設定を変更します。

    • recordcount=1000000: ApsaraDB for MongoDBインスタンスにロードされたデータの合計量。

    • mongodb.url="mongodb:// test:**** @ dds-bp13e84d11 **** .mongodb.rds.aliyuncs.com:3717/admin": ApsaraDB for MongoDBインスタンスの接続文字列。 テストでは、データベースアカウントはtestで、データベースはadminです。

      説明

      エンドポイントは、ApsaraDB for MongoDBコンソール[データベース接続] ページの [内部接続-VPC] セクションで取得できます。

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

  4. 次のコマンドを実行して、パフォーマンスストレステストを実行します。

    . /bin/ycsb.sh run mongodb -s -pワークロード=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p operationcount=5000000 -p readproportion=50 -p updateproportion=50 -p requestdistribution=zipfian -p mongodb.url=8000 /3717-mongodbスレッド: ****

    次の設定を変更します。

    • recordcount=1000000: ApsaraDB for MongoDBインスタンスにロードされたデータの合計量。

    • operationcount=5000000: 読み取り操作と書き込み操作の合計数。

    • insertproportion=0: ロード操作の比率。

    • readproportion=50: 読み取り操作の比率。

    • updateproportion=50: 更新操作の比率。

    • mongodb.url="mongodb:// test:**** @ dds-bp13e84d11 **** .mongodb.rds.aliyuncs.com:3717/admin": ApsaraDB for MongoDBインスタンスの接続文字列。 テストでは、データベースアカウントはtestで、データベースはadminです。

      説明
      • エンドポイントは、ApsaraDB for MongoDBコンソール[データベース接続] ページの [内部接続-VPC] セクションで取得できます。

      • 上記のステートメントを実行するときは、maxPoolSizeパラメーターを設定する必要があります。 それ以外の場合、デフォルトの接続数は100です。 この場合、テスト中にMongoWaitQueueFullExceptionエラーが返され、期待される最大接続数に達することができません。

  5. テストで使用されるECSインスタンスおよびApsaraDB For MongoDBインスタンスのモニタリング情報を表示する方法の詳細については、「基本モニタリング」をご参照ください。

    [基本モニタリング] タブで、CPU使用率メモリ使用率QPS接続、および接続使用率のメトリクスを表示するテストの期間を選択します。

96,000接続のストレステストに関する追加情報

YCSBテストはJava環境に依存します。 Java仮想マシン (JVM) の最大ヒープメモリサイズには制限があります。 テストで20,000を超える同時スレッドが使用されている場合、[Cannot allocate memory] エラーが返され、テストが中断されます。image

JAVA_OPTSパラメーターの値を増やしても、エラーが発生します。 この問題を解決するには、カスタム接続ストレステストプログラムを使用します。 ストレス試験プログラムは、複数のスレッドを周期的に生成する。 各スレッドはMongoClientを生成します。 MongoClientがクエリを実行した後、MongoClientは解放されることなく一定期間接続を維持します。

ストレステストクライアントが実行される単一のマシンには、限られた数のポートがあります。 したがって、32コアと128 GBのメモリの仕様では、接続 (最大96,000接続) のストレステストの要件を満たすことができません。 この場合、複数のマシンで同じストレステストプログラムを実行する必要があります。

次のBashステートメントを実行して、マシンの現在のポート範囲を照会します。

sysctl net.ipv4.ip_local_port_range

レスポンス例:

net.ipv4.ip_local_port_range = 40000 65535

次のステートメントを実行して、マシンのポート範囲を拡張し、接続ストレステストを実行します。

sudo sysctl -w net.ipv4.ip_local_port_range="10240 65535"

テスト結果

ESSDを使用するインスタンス

4コア、8 GBのメモリを持つ専用インスタンス

最大接続数: 8,000

QPS

接続数

接続使用率

CPU使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

説明

[基本監視] タブで収集間隔を単位で選択した場合、その間隔内に到達した最大接続数をタブに表示できません。 実際の接続数は8,000に達します。 これは、詳細なモニタリングを構成するか、serverStatusステートメントの結果で接続サブドキュメントを表示することで確認できます。image

32コア、128 GBのメモリを持つ専用インスタンス

最大接続数: 96,000

QPS

接続数

接続使用率

CPU使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

説明

最大接続数が96,000の場合のテストに使用するツールは、最大接続数が8,000および16,000の場合のテストに使用するツールとは異なります。 したがって、QPS、CPU使用率、およびメモリ使用量に関連する上記のモニタリングスクリーンショットには不一致があります。

8コアと32 GBのメモリを持つ汎用インスタンス

最大接続数: 16,000

QPS

接続数

接続使用率

CPU使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

ローカルディスクを使用するインスタンス

16コア、64 GBのメモリを持つ汎用インスタンス

最大接続数: 32,000

QPS

接続数

接続使用率

CPU使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

説明

[基本監視] タブで収集間隔を単位で指定した場合、CPU使用率の100% による収集コマンドのタイムアウトのため、16コア、64 GBのメモリを持つ汎用インスタンスでは、複数の時点での接続数は監視されません。 この場合、微小レベルの谷が発生し、その時点での実際の接続数は32,000のままである。

2コア、16 GBのメモリを持つ専用インスタンス

最大接続数: 8,000

QPS

接続数

接続使用率

CPU使用率

メモリ使用量

image.png

image.png

image.png

image.png

image.png

概要

  • ApsaraDB for MongoDB異なる仕様とストレージタイプのレプリカセットインスタンスは、仕様に対応する最大接続数に達することができます。

  • 最大接続数に達すると、ApsaraDB for MongoDBは後続の接続を拒否します。 接続の確立に失敗したため、リクエストのレイテンシが高いか、アプリケーションでスタックしています。

  • 同時接続の数が多いほど、CPUやメモリなどのリソースを消費します。 ビジネス要件に基づいて、インスタンスへの接続数を調整することを推奨します。