このトピックでは、異なる仕様の複数の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 |
|
|
テストで使用される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接続のストレステストに関する追加情報」をご参照ください。
テスト方法
- ECSインスタンスのプライマリプライベートIPアドレスをApsaraDB for MongoDBインスタンスのホワイトリストに追加します。 詳細については、「ApsaraDB For MongoDBインスタンスのIPアドレスホワイトリストの変更」をご参照ください。 説明 ECSコンソールにログインし、[インスタンスの詳細] ページの [ネットワーク情報] セクションでECSインスタンスの [プライマリプライベートIPアドレス] を表示します。
- ECSインスタンスに接続します。 詳細については、「ECSコンソール (エクスプレスバージョン) を使用したECSインスタンスの作成と管理」をご参照ください。
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
: クライアント上の同時スレッド数。
次のコマンドを実行して、パフォーマンスストレステストを実行します。
. /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
エラーが返され、期待される最大接続数に達することができません。
テストで使用されるECSインスタンスおよびApsaraDB For MongoDBインスタンスのモニタリング情報を表示する方法の詳細については、「基本モニタリング」をご参照ください。
[基本モニタリング] タブで、CPU使用率、メモリ使用率、QPS、接続、および接続使用率のメトリクスを表示するテストの期間を選択します。
96,000接続のストレステストに関する追加情報
YCSBテストはJava環境に依存します。 Java仮想マシン (JVM) の最大ヒープメモリサイズには制限があります。 テストで20,000を超える同時スレッドが使用されている場合、[Cannot allocate memory]
エラーが返され、テストが中断されます。
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使用率 | メモリ使用量 |
[基本監視] タブで収集間隔を分単位で選択した場合、その間隔内に到達した最大接続数をタブに表示できません。 実際の接続数は8,000に達します。 これは、詳細なモニタリングを構成するか、serverStatus
ステートメントの結果で接続
サブドキュメントを表示することで確認できます。
32コア、128 GBのメモリを持つ専用インスタンス
最大接続数: 96,000
QPS | 接続数 | 接続使用率 | CPU使用率 | メモリ使用量 |
最大接続数が96,000の場合のテストに使用するツールは、最大接続数が8,000および16,000の場合のテストに使用するツールとは異なります。 したがって、QPS、CPU使用率、およびメモリ使用量に関連する上記のモニタリングスクリーンショットには不一致があります。
8コアと32 GBのメモリを持つ汎用インスタンス
最大接続数: 16,000
QPS | 接続数 | 接続使用率 | CPU使用率 | メモリ使用量 |
ローカルディスクを使用するインスタンス
16コア、64 GBのメモリを持つ汎用インスタンス
最大接続数: 32,000
QPS | 接続数 | 接続使用率 | CPU使用率 | メモリ使用量 |
[基本監視] タブで収集間隔を分単位で指定した場合、CPU使用率の100% による収集コマンドのタイムアウトのため、16コア、64 GBのメモリを持つ汎用インスタンスでは、複数の時点での接続数は監視されません。 この場合、微小レベルの谷が発生し、その時点での実際の接続数は32,000のままである。
2コア、16 GBのメモリを持つ専用インスタンス
最大接続数: 8,000
QPS | 接続数 | 接続使用率 | CPU使用率 | メモリ使用量 |
概要
ApsaraDB for MongoDB異なる仕様とストレージタイプのレプリカセットインスタンスは、仕様に対応する最大接続数に達することができます。
最大接続数に達すると、ApsaraDB for MongoDBは後続の接続を拒否します。 接続の確立に失敗したため、リクエストのレイテンシが高いか、アプリケーションでスタックしています。
同時接続の数が多いほど、CPUやメモリなどのリソースを消費します。 ビジネス要件に基づいて、インスタンスへの接続数を調整することを推奨します。