JMeterを使用して分散テストを行う必要があります。目的は、1つのローカルサーバーによって制御されるAWSの複数のリモートサーバーが、AWSの別のサーバーにファイルダウンロードリクエストを送信することです。
AWSで異なるサーバーを設定するにはどうすればよいですか?
どのようにリモートで接続できますか?
誰かがそれを行う方法に関するステップバイステップの指示を提供できますか?
いくつかのことを試しましたが、ネットワーク間で接続の問題が発生し続けています。
同様のタスクがあり、多くの問題にも遭遇しました。ここに、プロセス全体の詳細と、発生した問題を解決するために行ったことを示します。それが役に立てば幸い。
世界のさまざまな地域にある5つのサーバーからリクエストを送信する必要がありました。そのため、AWSでそれぞれ異なるリージョンに5つのマイクロインスタンスを起動しました。地域をできるだけ地理的に離れるように選択しました。
各インスタンスの設定方法は次のとおりです。
インストール済みのJava:
$ Sudo apt-get update
$ Sudo apt-get install default-jre
インストールされたJMeter:
$ mkdir jmeter
$ cd jmeter;
$ wget ftp://Apache.mirrors.pair.com//jmeter/binaries/Apache-jmeter-2.9.tgz
$ gunzip Apache-jmeter-2.9.tgz;tar xvf Apache-jmeter-2.9.tar
JMeterインストールのjmeter.properties
フォルダーの/bin
ファイルを編集し、server.rmi.localport
設定を含む行のコメントを解除しました。ポートを50000に変更しました。
server.rmi.localport=50000
JMeterサーバーを開始しました。サーバーがリッスンしていると報告するアドレスとポートが正しいことを確認してください。
$ cd ~/jmeter/Apache-jmeter-2.9/bin
$ vi jmeter-server
次に、ローカルクライアントマシン上のこれらのインスタンスでテストをリモートで実行するようにJMeterを設定します。
bin
フォルダーにあるjmeter.properties
ファイルを編集して、リモートテストを有効にしました。パラメーターremote_hosts
は、接続先のリモートサーバーのパブリックDNSで設定する必要がありました。remote_hosts=54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x
これで、指定したリモートサーバーの一部またはすべてでテストを実行するようにクライアントJMeterインスタンスに指示することができました。
発生した問題とその解決方法は次のとおりです。
クライアントは次のエラーで失敗しました。
エラー-jmeter.engine.ClientJMeterEngine:Java.rmi.ConnectException:接続-ホストへの拒否:127.0.0.1
これは、サーバーのホストがAmazon NATのためにプライベートIPアドレスをアドレスとして返すためでした。サーバーの起動時にRMI_Host_DEF
スクリプトに含まれるパラメーター/usr/local/jmeter/bin/jmeter-server
を設定することにより、これを修正しました。
RMI_Host_DEF=-Djava.rmi.server.hostname=54.xx.xx.xx
これで、AWSインスタンスがサーバーの外部IPを返し、テストを開始できました。
サーバーノードが結果を返そうとしてクライアントに接続しようとすると、サーバーはローカルマシンの外部IPアドレスに接続しようとしました。しかし、接続拒否エラーを投げました:
2013/05/16 12:23:37エラー-jmeter.samplers.RemoteListenerWrapper:testStarted(Host)Java.rmi.ConnectException:ホストへの接続が拒否されました:xxx.xxx.xxx.xx;
クライアント側でリバーストンネルを設定することにより、この問題を解決しました。
最初に、JMeterインストールのjmeter.properties
フォルダーにある/bin
ファイルを編集し、client.rmi.localport
設定を含む行のコメントを外しました。ポートを60000に変更しました。
client.rmi.localport=60000
次に、SSHを使用して各サーバーに接続し、クライアントのポート60000へのリバーストンネルをセットアップしました。
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -R 60000:localhost:60000 [email protected]
JMeterサーバーはテスト結果をクライアントに配信できる必要があるため、これらの各セッションを開いたままにしました。
次に、JVM_ARGS
フォルダーのjmeter.sh
ファイルで、クライアントの/bin
環境変数を設定します。
export JVM_ARGS="-Djava.rmi.server.hostname=localhost"
これにより、JMeterは結果を配信するためにlocalhost:60000
に接続するようサーバーに指示します。これは最終的にクライアントにトンネリングされます。
サーバーへのSSH接続は、少しの間アイドル状態になった後もドロップし続けました。それを防ぐために、接続を維持するためにサーバーにヌルパケットを送信する前に60秒待機するようにクライアントに指示する各SSHトンネル設定にパラメーターを追加しました。
$ ssh -i ~/.ssh/54-x-x-x.us-east.pem -o ServerAliveInterval=60 -R 60000:localhost:60000 [email protected]
(.ssh/config
必要なすべてのSSH設定のバージョン:
Host 54.x.x.x
HostName 54.x.x.x
Port 22
User ubuntu
ServerAliveInterval 60
RemoteForward 127.0.0.1:60000 127.0.0.1:60000
IdentityFile ~/.ssh/54-x-x-x.us-east.pem
IdentitiesOnly yes
これを設定したら、ssh 54.x.x.x
を使用してください。 )
私はこれをopenstackで試しましたが、同じ問題が見つかりました... jmeterリモーティングドキュメントが必要な手順の半分しかカバーしていない理由はわかりません。あなたはそれを行うことができますトンネルなしでまたはプロパティファイルに触れる。
あなたが必要
クライアントとしてワークステーションを使用している場合、おそらくトンネルが必要です。上記 Archana Aggarwal にはトンネルに関する良いヒントがあります。
セットする Java.rmi.server.hostname
およびserver.rmi.localport
インラインまたはプロパティファイル。
jmeter-server -Djava.rmi.server.hostname=publicip -Dserver.rmi.localport=4000
クライアントと同じマシンで実行することもできます。わかりやすくするために、Java.rmi.server.hostname
が左server.rmi.localport
動的として
jmeter-server -Djava.rmi.server.hostname=localip
セットする Java.rmi.server.hostname
およびclient.rmi.localport
インラインまたはプロパティファイル。使用する -R
などのように:
jmeter -n -t Test.jmx -Rremotepublicip1,remotepublicip2 -Djava.rmi.server.hostname=clientpublicip -Dclient.rmi.localport=4001 -GmypropA=1 -GmypropB=2 -lresults.jtl
AWSでJMeterを使用した分散テストに行くときは、dockerを使用することをお勧めします。これは、jmeterテストインフラストラクチャを非常に迅速にサポートするのに役立ちます。これにより、同じバージョンのJavaとjmeterがJMeter分散テストで非常に重要なAmazonのすべてのインスタンスにインストールされていることを確認できます。
以下を確認してください-以下のプロパティを設定し、ポートがjmeter-serverに対して開いていること。 [正確に1099,50000である必要はありません]
server.rmi.localport=50000
server_port=1099
Java.rmi.server.hostname=SERVER_IP
クライアント用
client.rmi.localport=60000
Java.rmi.server.hostname = SERVER_IP-awsインスタンスのコンテナはdockerネットワークで独自のIPアドレスを持つため、このステップは非常に重要です-したがって、マスターとスレーブは通信します。したがって、このプロパティを明示的に設定します
詳細:
http://www.testautomationguru.com/jmeter-distributed-load-testing-using-docker-in-aws/