AWSでJMeterを使った負荷テスト環境を構築する手順(WindowsありのMaster/Slave構成)
はじめに
JMeterで負荷テストをする際に1台の端末から負荷をかけていても負荷が足りない場合があります。そのような場合はJMeterをMaster/Slave構成にし複数台用意する必要があります。今回はAWSでこのような負荷テスト環境を構築する手順をまとめたいと思います。 AWSを使う場合は以下のリンクのページのようにCloudFormationでやる方法が早いのですがAMIやインスタンスタイプ、Java、JMeterのバージョンが古くなるのと、上手く動かなくなった場合にCloudFormationに慣れてないと原因調査に時間をとられることもあるので今回は手作業でやってみたいと思います。
お手軽JMeterクラスター 〜 フルボッコ編|アドカレ2013 : CFn #1
前提条件
今回は以下の前提で構築しています。
- Master上でテストシナリオを作成したいのでMasterのOSはWindowsを使います。
- SlaveはAmazon Linuxで構築しています。
- 2台の仮想マシンは同じVPCの同じサブネット内に構築しました。
- VPC内の通信はすべて許可しています。
- Master(Windows)にはリモートデスクトップのポートを自分のIPアドレスから許可しています。
- Slave(Linux)にはSSHのポートを自分のIPアドレスから許可しています。
Slave側の構築
まずはSlaveから構築します。私はt2.microで構築しました。Amazon LinuxでEC2を起動しSSHでログインします。後は以下のコマンドを実行するだけです。 Slaveは複数台になると思うので1台作ってAuto Scalingでスケールアウトするという手もあります。
#アップデート sudo yum update -y #JMeterのダウンロード、解凍 sudo wget http://archive.apache.org/dist/jmeter/binaries/apache-jmeter-3.1.tgz -P /opt/ sudo tar zxvf /opt/apache-jmeter-3.1.tgz -C /opt/ #各種設定 sudo echo "`curl -s curl http://169.254.169.254/latest/meta-data/local-ipv4` `hostname`" | sudo tee -a /etc/hosts sudo sed -i -e "s/^#RMI_HOST_DEF=-Djava.rmi.server.hostname=.*$/RMI_HOST_DEF=-Djava.rmi.server.hostname=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname)/" /opt/apache-jmeter-3.1/bin/jmeter-server sudo sed -i -e ' /^java/i JVM_ARGS="$JVM_ARGS -Dsun.net.inetaddr.ttl=0"' /opt/apache-jmeter-3.1/bin/jmeter #サービスの起動 sudo echo "/opt/apache-jmeter-3.1/bin/jmeter-server | logger -p daemon.info &" | sudo tee -a /etc/rc.local sudo /opt/apache-jmeter-3.1/bin/jmeter-server | logger -p daemon.info &
Master側の構築
今回はWindows Server2012 R2を使います。私はt2.mediumで構築しました。 EC2を構築したらリモートデスクトップで接続し以下の作業を行います。
Javaのインストール
JMeterはJavaの実行環境が必要なのでJavaをインストールします。JREをOracleのサイトからダウンロードしインストールします。今回は1.8を使いました。
JMeterのダウンロード
JMeterを以下からダウンロードします。今回は3.1を使いました。MasterとSlaveのJMeterは同じバージョンにして下さい。
jmeter.properties
以下の場所にあるjmeter.propertiesという名前の設定ファイルを修正します。
apache-jmeter-3.1/bin/jmeter.properties
remote_hostsという箇所にSlaveのプライベートIPアドレスを指定します。複数ある場合はカンマ区切りで指定します。
#--------------------------------------------------------------------------- # Remote hosts and RMI configuration #--------------------------------------------------------------------------- # Remote Hosts - comma delimited remote_hosts=172.31.1.224 #remote_hosts=localhost:1099,localhost:2010
ファイアウォールを無効にする
コントロールパネルからファイアウォールを無効にします。赤枠の部分から無効にできます。
実行する
準備ができたらテストシナリオを作成し実行してみましょう。赤枠の部分か青枠の部分をクリックしてスレッドが実行されれば成功です。
最後に
構築手順は以上になります。Slaveの台数はCloudWatchでCPU使用率やネットワーク入出力などの項目を見て決定します。レスポンスのサイズが大きいとEC2のネットワークが詰まって性能が出ないことがあります。Slaveの台数を増やしても性能が上がらないところまで台数を増やすかスペックを上げましょう。因みにEC2はスペックを上げるとネットワークの性能もよくなります。