同じ VPC 内の ApsaraDB for MongoDB インスタンスにアクセスする ECS インスタンスからストレステストを実行することで、仕様の異なる ApsaraDB for MongoDB レプリカセットインスタンスが最大接続数に達することができるか検証します。
テスト環境
Elastic Compute Service (ECS) インスタンスと ApsaraDB for MongoDB レプリカセットインスタンスを作成します。 レプリカセットインスタンスの作成およびECS インスタンスの作成をご参照ください。
次の表に、このテストで使用したインスタンスの構成を示します。
|
設定項目 |
ECS インスタンス |
クラウドディスクを使用する ApsaraDB for MongoDB インスタンス |
ローカルディスクを使用する ApsaraDB for MongoDB インスタンス |
|
リージョンとゾーン |
北京ゾーン H |
北京ゾーン H |
北京ゾーン H |
|
ネットワークタイプ |
Virtual Private Cloud (VPC) |
VPC |
VPC |
|
インスタンスカテゴリ |
c6e、パフォーマンスが強化されたコンピューティング最適化インスタンスファミリー |
汎用および専用 |
汎用および専用 |
|
インスタンスタイプ |
ecs.c6e.2xlarge |
3 つのインスタンスタイプをテストしました。 テスト結果をご参照ください。 |
2 つのインスタンスタイプをテストしました。 テスト結果をご参照ください。 |
|
ストレージタイプ |
ESSD (エンタープライズ SSD) AutoPL ディスク |
ESSD |
ローカル SSD |
|
イメージまたはエンジンバージョン |
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 です。
テストツール
-
YCSB (Yahoo Cloud Serving Benchmark) 0.17.0。
説明YCSB は Java ベースのデータベースベンチマークツールです。 インストールと使用方法については、GitHub の YCSB をご参照ください。
-
カスタム接続ストレステストプログラム。 96,000 接続のストレステストに関する追加情報をご参照ください。
テスト方法
ApsaraDB for MongoDB インスタンスのホワイトリストに ECS インスタンスの [プライマリプライベート IP] を追加します。詳細については、「ホワイトリストを変更する」をご参照ください。
説明ECS コンソールにログインし、[インスタンス詳細] ページの [設定情報] セクションで ECS インスタンスの [プライマリプライベート IP アドレス] を確認できます。
ECS インスタンスに接続します。 詳細については、「ECS コンソール (簡易版) を使用した ECS インスタンスの作成と管理」をご参照ください。
-
YCSB ツールを使用してテストデータをロードします。
./bin/ycsb.sh load mongodb -s -p workload=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 コンソールにログオンします。Database Connection ページで、[内部接続 - VPC] セクションの接続文字列を見つけます。
-
threads 8: 同時クライアントスレッド数。
-
-
ストレステストを実行します。
./bin/ycsb.sh run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p operationcount=5000000 -p readproportion=50 -p updateproportion=50 -p requestdistribution=zipfian -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin&maxPoolSize=8000" -p table=test -threads 8000次の設定を変更します。
-
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 コンソールにログインします。Database Connection ページの [内部接続 - VPC] セクションで接続文字列を確認します。
-
maxPoolSizeパラメーターを指定する必要があります。 そうしない場合、デフォルト値の 100 が適用され、`MongoWaitQueueFullException` エラーが発生し、テストが目標の最大接続数に達しなくなる可能性があります。
-
-
-
モニタリングデータを表示します。 ノードモニタリング (旧基本モニタリング)。
[ノードモニタリング] タブで、テストの時間範囲を選択し、CPU使用率、メモリ使用率、QPS操作数、接続数、および接続数使用率 のメトリックを表示します。
96,000 接続のストレステストに関する追加情報
YCSB は Java に依存しています。 JVM ヒープメモリは限られているため、20,000 を超える同時スレッドでテストを実行すると、`Cannot allocate memory` エラーが返されます。
`JAVA_OPTS` を増やしてもこの問題は解決しません。 代わりに、カスタムストレステストプログラムを使用してください。このプログラムは、スレッドを周期的に生成し、各スレッドが MongoClient を作成してクエリを実行し、接続を解放せずに開いたままにします。
単一のストレステストクライアントはポートが限られているため、96,000 接続 (32 コア 128 GB の仕様で必須) に達することができません。 複数のマシンで同じプログラムを実行してください。
現在のポート範囲をクエリします。
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 出力の connections サブドキュメントで検証可能です。
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 使用率 |
メモリ使用量 |
|
|
|
|
|
|
16 コア 64 GB のインスタンスでは、分単位の粒度でデータを見ると、一部のデータポイントに欠落が見られます。これは、CPU 使用率が 100% に達した際に収集コマンドがタイムアウトしたためです。これらの時点における実際の接続数は 32,000 のままでした。
2 コア 16 GB メモリの専用インスタンス
最大接続数:8,000
|
QPS |
接続数 |
接続使用率 |
CPU 使用率 |
メモリ使用量 |
|
|
|
|
|
|
まとめ
-
ApsaraDB for MongoDB レプリカセットインスタンスは、テストされたすべての仕様およびストレージタイプで最大接続数に達しました。
-
最大値に達すると、それ以降の接続は拒否されます。 アプリケーションでは、接続の失敗により、高レイテンシやリクエストのスタックが発生します。
-
同時接続数が多いほど、より多くの CPU とメモリを消費します。 ビジネス要件に基づいて接続数を調整してください。
























