Apache JMeter™のたくさんのリモートサーバーをたった5分の作業でAzureに構築する
Load Tester (multiple remote servers) Powered by Apache JMeter™を利用して、Azure上にApache JMeterの複数台リモートサーバーを構築する方法を説明します。
Apache JMeter™でとても大きな負荷を作り出すためには、何台ものJMeterサーバーを構築し、それをJMeterクライアントから制御することで、JMeterサーバーたちから一気に処理を流すということをやります。
このいくつものJMeterサーバーたちは、基本的に同じ構成でセットアップされていればよいのですが、もしも100台のJMeterサーバーの構築作業を皆さんが担当するとしたら、『どこに』、『どうやって』、『どれくらいの時間をかけて』作りますか?
PCを100台用意する?
vmwareなどの仮想化環境?
それともクラウド?
1台1台OSやJMeterをインストールする?
VMwareやクラウド用の仮想マシンイメージやコンテナイメージを作ってから、それを展開する?
構築後にテスト要件が変更になり、新たなJMeter Pluginの追加やテストデータの追加が必要になったらどうする?
インストールしたPCや作成したイメージのOS(ディストリビューション)やJMeterのアップデートは?
もしかしてイメージの作り直し?
これらの準備をするにはどれくらいの時間がかかりそうでしょうか?
Load Tester (multiple remote servers) Powered by Apache JMeter™を利用することで、何台ものJMeterサーバーとそれを制御するJMeterクライアントを、とても短時間の作業でMicrosoft Azure上に構築することができます。
ここでは、Azure Portalでその構築をする方法を紹介します。
前提
- Virtual MachineやStorage Accountなどを作成できるMicrosoft Azureのサブスクリプションがあること
手順概要
- Azure Portalにアクセス
- 仮想ネットワークの作成
- Azure MarketplaceからLoad Testerをデプロイ
- 動作確認
手順詳細
-
Azure Portalにアクセス Azure Portalにアクセスし、ログインします。
https://portal.azure.com -
仮想ネットワークの作成 JMeterクライアントやJMeterサーバーの仮想マシンを配置する仮想ネットワークを作成します。
JMeterクライアント用とJMeterサーバー用に、2つのサブネットが必要です。
既存の仮想ネットワークを利用することも可能ですが、その場合はJMeterサーバー用に1つのサブネットはリソースがない空の状態の必要があります。
- 特にJMeterサーバーの数を多くする場合、JMeterサーバー用のサブネットにはそれを十分に収容できるアドレス範囲を確保してください。
- VNet peeringなどでAzureの他のVNetに接続する場合や、VPNやExpressRouteでオンプレミスやほかのクラウドサービスに接続する場合は、アドレス範囲が競合しないようにしてください。
- 現在Load TesterはIPv6のサブネットには対応していません
-
Azure MarketplaceからLoad Testerをデプロイ
-
「リソースの作成」で「jmeter pnop」で検索
2つ検索されるので「Load Tester (multiple remote servers) Powerd by …」を選択
以下のurlに直接アクセスすることもできます。
https://portal.azure.com/#create/pnop.jmeter-multiple-remote-serversjmeter-multiservers -
- リソース グループ
新規作成をするか、既存の空のリソースグループを選択します。 - リージョン
JMeterクライアントとJMeterサーバーを作成するリージョンを選択します。
先ほど作成した仮想ネットワークと同じリージョンを選択してください。 - Username
JMeterクライアントとJMeterサーバーの仮想マシンに接続するユーザー名 - Authentication type SSH接続時の認証方式を選択します
- “パスワード"を選択した場合
- Password / Confirm password JMeterクライアントとJMeterサーバーの仮想マシンに接続するユーザーのパスワード
- “SSH公開キー"を選択した場合
- SSH public key JMeterクライアントおよびJMeterサーバーへの接続時に利用される公開キー
- Password for Remote Desktop connection / Confirm password JMeterクライアントにリモートデスクトップ接続するユーザーのパスワード
- リソース グループ
-
- Virtual network
先ほど作成した仮想ネットワークを選択します。
ここで新規作成も選択できますが、Azure Marketplaceの不具合により希望の構成の仮想ネットワークを作成できないことがあります。 - JMeter client subnet
JMeterクライアントの仮想マシンを配置するサブネットを選択します。 - JMeter server subnet
JMeterサーバーの仮想マシンを配置するサブネットを選択します。
このサブネットにはほかのリソースがない空の必要があります。
- Virtual network
-
- File sharing storage account
JMeterクライアントとJMeterサーバーがマウントするAzure Filesのストレージを新規作成します。- 現時点では、既存のストレージアカウントを利用することはできません。
- 新規作成する場合、アカウントの種類で「Storage (汎用 v1)」を選択することができますが、これは無視され『StorageV2 (汎用 v2)』で作成されます。
- File sharing storage account
-
- JMeter client virtual machien name
JMeterクライアントとして作成される仮想マシン名 - Size
JMeterクライアント仮想マシンのインスタンスサイズ
多くのJMeterサーバーでテストを実施する場合、JMeterクライアントにも高いスペックが必要になります。 - OS disk type
JMeterクライアント仮想マシンのOSディスクのタイプを選択します。
Standard SSDをお薦めします。
※ 現時点では事情によりPremium SSDを選択することはできません。 - Public IP
JMeterクライアントに外部から接続するためのパブリックIPを、新規作成または既存のものから選択します。 - DNS name label
JMeterクライアントに外部からサーバー名指定で接続するには、この値を設定します。
この値には記憶しやすいものを設定することをお薦めします。
未指定の場合はIPアドレスを指定しての接続となります。
- JMeter client virtual machien name
-
-
Virtual machine scale set name
JMeterサーバー群として作成される仮想マシンスケールセット名 -
Instance count
JMeterサーバーの台数
多くのJMeterサーバーを作成する場合、サブスクリプションの制限(vCPU数、パブリックIPアドレス数など)に注意してください。 -
Size
JMeterサーバー仮想マシンのインスタンスサイズ -
OS disk type
JMeterサーバー仮想マシンのOSディスクのタイプを選択します。
Standard SSDをお薦めします。
※ 現時点では事情によりPremium SSDを選択することはできません。 -
Public IP address per instance
JMeterサーバーの仮想マシン個々にパブリックIPアドレスを持たせるか否かを選択します。
仮想マシン個々にパブリックIPアドレスを持たせる場合はTure、持たせない場合はFalseを選択します。この設定は、インターネット上のサーバーに対してテストをする際に有効です。
個々にパブリックIPアドレスを持たせることで、テスト対象では仮想マシンそれぞれのIPアドレスからリクエストを受信します。
個々に持たせない場合は、すべてのJMeterサーバーからのリクエストが、1つのIPアドレスからのリクエストとなります。
-
-
“確認および作成"タブ
設定内容を確認して「作成」をクリックします。
もしも検証に失敗してしまった場合は、エラーを確認してください。
この画像のエラーはJMeterサーバーの数が多すぎたためにサブスクリプションの制限を超えてしまったことによるものです。
このような場合は、JMeterサーバー数を減らすか、Azureサポートに連絡して対象のvCPU数を増やしてもらいます。 -
とても多くのJMeterサーバーを作る場合などに、すべての環境が出来上がるまでには時間がかかることもありますが、それはのんびり待ちましょう。
-
-
Apache JMeter™の起動確認
- 接続先サーバー名/IPアドレスの確認
- リモート デスクトップ接続を起動
- Windows
スタートメニューなどから「リモート デスクトップ接続」を起動します。
- macOS
Mac用Microsoftリモートデスクトップを利用します。
インストールしていない場合は、Mac App StoreまたはApp Centerからダウンロードしてください。
- Windows
スタートメニューなどから「リモート デスクトップ接続」を起動します。
- 接続先にJMeterクライアントを指定
「コンピューター」に先ほど確認したパブリックIPアドレスの『DNS名』または『IPアドレス』を指定して接続します。
- 証明書エラーを無視
証明書に問題がある旨のエラーが表示されますが、無視して接続します。 - ログイン
Load Testerの作成時に「基本タブ」で入力したusernameとpasswordでログインします。
- Apache JMeterの起動
デスクトップにある「JMeter」をダブルクリックして起動します。
- Apache JMeter™が起動する
メニューの[Run] > [Remote Start]から、JMeterサーバーが登録されていることが確認できます。
- 適当なテストシナリオを作成して、テスト実施してみてください。
-
セキュリティの向上
Load Testerのデプロイ直後の状態では、JMeterクライアントに対して、どこからでもsshとリモートデスクトップで接続できる状態です。
指定した特定のネットワーク以外からの接続はさせないように、Azure Network Security Group(NSG)の設定をしましょう。- Azure Portalにアクセス
https://portal.azure.com - ネットワーク セキュリティ グループの設定
- リソース グループの表示
Azure Portalで、Load Testerの作成時に「基本タブ」で作成したリソース グループを表示します。
- ネットワーク セキュリティ グループの詳細表示
種類が「ネットワーク セキュリティ グループ」のリソースをクリックし、NSGを表示します。
(上の画像では『jmeter-client-nsg』)
- ssh接続のアクセス元ネットワークを制限
「受信セキュリティ規則」の一覧にある「AllowSshInbound」をクリックしssh接続を許可するネットワークだけにソースを制限します。
インターネットからの1台のPCだけからの接続を許可する場合は、以下のように設定し、「保存」します。
- リモート デスクトップ接続のアクセス元ネットワークを制限 「受信セキュリティ規則」の一覧にある「AllowRdpInbound」も、先のsshと同様に設定します。
- 設定を確認
「受信セキュリティ規則」の一覧で、AllowSshInboundとAllowRdpInboundが設定した値になっていることを確認します。
- リソース グループの表示
- Azure Portalにアクセス
-
おまけ リモート デスクトップ接続をした場合、キーボードの配列が日本語対応していないかもしれません。
この対応方法はマニュアルをご確認ください。
今回はここまでです。
Load Tester (multiple remote servers) Powered by Apache JMeter™を利用することで、たくさんのApache JMeter™サーバーでテストする環境を、簡単に短時間の作業で作れることを紹介しました。