AnsibleとEC2経由でのベンチマーク実行
これは、負荷テストを実行するためにAmazon Web Services EC2インスタンス用のAnsibleを使用した自動セットアップで、kcb.shスクリプトの一般的なCLIを拡張します。
これは、負荷生成のための単一インスタンスでは不十分な場合、例えば、TIMED_WAITステータスの接続が多すぎてネットワーク接続が十分に速く確立できない場合に使用します。また、ユーザーが観測するレイテンシを最小限に抑えたり、シミュレートしたりするために、同じまたは異なるAWSリージョンにロードドライバを配置するのにも役立ちます。
前提条件
-
テストのためのKeycloakの準備 からのKeycloak URL
-
Ansible CLIのインストール(Fedoraでは
dnf install ansibleを使用)
負荷生成のためのEC2インスタンス
フォルダ構成
ansible フォルダには、次のファイルとフォルダがあります。
roles/aws_ec2-
Ansibleロール。
roles/aws_ec2/defaults/main.yml-
Ansibleロールのデフォルト。ラッパースクリプトで読み込まれる
env.ymlで上書き可能です。 aws_ec2.sh-
ラッパースクリプト。
設定
環境を設定するための設定ファイル env.yml を作成します。設定例として env_example.yaml ファイルをご利用ください。
env.yml を介してEC2環境を設定する設定例cluster_size: 5
instance_type: t4g.small
instance_volume_size: 30
env.yml でカスタマイズする最も重要なパラメータは次のとおりです。
cluster_size-
作成されるインスタンスの数。デフォルトでは、Gatlingは新しいユーザーごとに新しいHTTP接続を作成します。ロードドライバのネットワークスタックが
TIME_WAIT状態の多数の接続で輻輳する可能性があるため、秒間250ユーザーあたりEC2インスタンス1つを目安にしてください。 instance_type-
作成されるインスタンスのサイズ。「AWSインスタンスタイプ」をご参照ください。
EC2インスタンスの作成
| インスタンスは、作成元のシステムのIPアドレスに紐づけられます! |
インスタンスを作成する際、マシンを作成するホストのパブリックIPアドレスがEC2セキュリティグループに追加され、このIPアドレスのみがSSH経由でロードドライバにログインすることを許可されます。パブリックIPアドレスが変更された場合は、create コマンドを再実行する必要があります。パブリックIPアドレスは、例えば、場所やネットワークを変更した場合、または自宅のインターネット接続が毎晩IPアドレスを更新した場合などに変更されます。Ansibleを実行しているホストのIPアドレスが接続できない場合に表示されるメッセージは Failed to connect to the host via ssh です。
-
必要なAnsible AWSコレクションをインストールします。
./aws_ec2.sh requirements
-
EC2インスタンスと関連インフラストラクチャを作成します。完了までに約5分かかります。
./aws_ec2.sh create <REGION>
これにより、ホストにアクセスするためのAnsibleホストインベントリファイルと一致するSSHプライベートキーが作成されます。
-
benchmark_<USERNAME>_<REGION>_inventory.yml -
benchmark_<USERNAME>_<REGION>.pem
-
EC2インスタンスの停止/開始
作成後、EC2インスタンスは実行中です。コストを節約するために、停止して、必要なときに後で開始することを検討してください。これは、インスタンスを再度作成するよりも少し時間がかかりません。
./aws_ec2.sh stop <REGION> ./aws_ec2.sh start <REGION>
start アクションは、再起動されたホストの新しいIPアドレスでホストインベントリファイルを再作成します。
ベンチマーク
フォルダ構成
roles/benchmark-
Ansibleロール。
roles/benchmark/defaults/main.yml-
Ansibleロールのデフォルト。ラッパースクリプトで読み込まれる
env.ymlで上書き可能です。 benchmark.sh-
ラッパースクリプト。
設定
環境を設定するために、設定ファイル env.yml を更新します。設定例として env_example.yaml ファイルをご利用ください。
env.yml を介してベンチマーク実行を設定する設定例kcb_zip: ../benchmark/target/keycloak-benchmark-999.0.0-SNAPSHOT.zip
kcb_heap_size: 1G
ベンチマークのインストールと実行
最初のパラメータとしてリージョンを指定し、次に kcb.sh スクリプトに適用されるパラメータを指定します。詳細については、CLIからのベンチマーク実行 のページをご参照ください。
プレイブックは、出力構造を生成し、負荷を分散するためにいくつかのパラメータを解析するため、パラメータ scenario が必須です。パラメータ concurrent-users が指定されている場合、負荷が分散されるEC2ノードの倍数である必要があります。
パラメータ concurrent-users または users-per-sec を使用して、Keycloakインスタンスに対して実行される合計負荷を指定します。プレイブックは、コマンドラインで指定された concurrent-users または users-per-sec を読み取り、EC2インスタンスで実行されている各 kcb.sh スクリプトに値を渡す前に、これらの数値をEC2インスタンスの数で割ります。
./benchmark.sh <REGION> <P1> <P2> ... <Pn>
コマンド例は以下のようになります。
./benchmark.sh eu-west-1 --scenario=keycloak.scenario.authentication.ClientSecret \
--server-url=https://keycloak-runner-keycloak.apps.....openshiftapps.com \
--users-per-sec=1000 \
--measurement=600 \
--realm-name=realm-0 \
--clients-per-realm=10000
これは、benchmark_<USERNAME>_<REGION>_inventory.yml にリストされているホストにKeycloakベンチマークをインストールし、パラメータ P1、P2、… Pn を kcb.sh スクリプトに渡してベンチマークを実行します。
その他のパラメータは env.yml ファイルから設定可能です。
インストールするベンチマークのバージョンは kcb_version パラメータで指定できます。
ファイルがローカルに存在する場合は kcb_zip パラメータを、ダウンロード元を指定する場合は kcb_zip_url パラメータを直接指定することも可能です。kcb_version はファイル名から抽出されます。
パラメータ skip_install を使用してインストール手順をスキップできます。その場合、変数 kcb_version は、以前にインストールされたものに基づいて指定する必要があります。
ベンチマーク結果
分散シミュレーションの集計レポートは、実行ディレクトリからの相対パスにある files フォルダにローカル保存されます。
📒 files/
└─📂 benchmark/
└─📂 keycloak-benchmark-{{ kcb_version }}/
└─📂 results/
└─📂 {{ scenario }}-{{ timestamp }}/
├─📂 simulation/ (1)
│ ├─📄 {{ host_1 }}.log
│ ├─📄 {{ host_2 }}.log
│ └─📄 ...
├─📂 gatling/ (2)
│ ├─📄 {{ host_1 }}.log
│ ├─📄 {{ host_2 }}.log
│ ├─📄 ...
│ ├─📄 {{ host_1 }}.rc
│ ├─📄 {{ host_2 }}.rc
│ └─📄 ...
└─📄 index.html
| 1 | simulation/ ディレクトリには、個々のノードからのシミュレーションデータが含まれています。 |
| 2 | gatling/ ディレクトリには、個々のノードからのGatlingログとリターンコードが含まれています。 |