接続の問題があるAWSでの分散テスト用のJMeterのセットアップ
JMeterを使用して分散テストを行う必要があります。目的は、1つのローカルサーバーによって制御されるAWSの複数のリモートサーバーが、AWSの別のサーバーにファイルダウンロードリクエストを送信することです。
AWSで異なるサーバーを設定するにはどうすればよいですか?
どのようにリモートで接続できますか?
誰かがそれを行う方法に関するステップバイステップの指示を提供できますか?
いくつかのことを試しましたが、ネットワーク間で接続の問題が発生し続けています。
同様のタスクがあり、多くの問題にも遭遇しました。ここに、プロセス全体の詳細と、発生した問題を解決するために行ったことを示します。それが役に立てば幸い。
世界のさまざまな地域にある5つのサーバーからリクエストを送信する必要がありました。そのため、AWSでそれぞれ異なるリージョンに5つのマイクロインスタンスを起動しました。地域をできるだけ地理的に離れるように選択しました。
リモート(サーバー)JMeters構成
各インスタンスの設定方法は次のとおりです。
インストール済みの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設定
次に、ローカルクライアントマシン上のこれらのインスタンスでテストをリモートで実行するようにJMeterを設定します。
- サーバーで実行されていたのと同じバージョンのJMeterを使用するようにしました。インストール済みJavaおよび上記のJMeter。
- 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 ubuntu@54.x.x.x
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 ubuntu@54.x.x.x
(.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リモーティングドキュメントが必要な手順の半分しかカバーしていない理由はわかりません。あなたはそれを行うことができますトンネルなしでまたはプロパティファイルに触れる。
あなたが必要
- パブリックIPをアドバタイズするすべてのノード-AWS/OSでは、これはデフォルトでプライベートIPになります
- デフォルトで1099に設定されているRMIポートの入力ルール-これを使用します
- RMI "local"ポートの入力規則で、デフォルトは動的です。以下では、クライアントに4001、サーバーに4000を使用します。ポートは同じでもかまいませんが、プロパティが異なることに注意してください。
クライアントとしてワークステーションを使用している場合、おそらくトンネルが必要です。上記 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/