35

JMeter を使用して分散テストを行う必要があります。目的は、1 つのローカル サーバーによって制御される AWS 内の複数のリモート サーバーが、AWS 内の別のサーバーにファイル ダウンロード リクエストを送信するようにすることです。

AWS でさまざまなサーバーをセットアップするにはどうすればよいですか?
それらにリモートで接続するにはどうすればよいですか?

誰かがそれを行う方法について段階的な指示を提供できますか?
いくつかのことを試しましたが、ネットワーク全体で接続の問題が発生し続けています。

4

3 に答える 3

62

同様のタスクがあり、多くの問題にも遭遇しました。プロセス全体の詳細と、発生した問題を解決するために行ったことを以下に示します。それが役に立てば幸い。

世界のさまざまな地域にある 5 つのサーバーからリクエストを送信する必要がありました。そのため、AWS で 5 つのマイクロ インスタンスをそれぞれ異なるリージョンで起動しました。可能な限り地理的に離れた地域を選択しました。

リモート (サーバー) JMeters 構成

各インスタンスの設定方法は次のとおりです。

  1. インストールされた Java:

    $ sudo apt-get update
    $ sudo apt-get install default-jre 
    
  2. インストール済みの 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
    
  3. JMeter インストールjmeter.propertiesのフォルダー内のファイルを編集し、設定を含む行のコメントを外します。ポートを 50000 に変更しました。/binserver.rmi.localport

    server.rmi.localport=50000
    
  4. JMeter サーバーを開始しました。サーバーがリッスンしていると報告するアドレスとポートが正しいことを確認してください。

    $ cd ~/jmeter/apache-jmeter-2.9/bin
    $ vi jmeter-server
    

ローカル (クライアント) JMeter 構成

次に、JMeter をセットアップして、ローカル クライアント マシン上のこれらのインスタンスでテストをリモートで実行します。

  • サーバーで実行されていたのと同じバージョンの JMeter を使用するようにしました。上記のように Java と JMeter をインストールしました。
  • JMeter インストールjmeter.propertiesのフォルダーにあるファイルを編集して、リモート テストを有効にしました。binパラメータ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 インスタンスに、指定したリモート サーバーの一部またはすべてでテストを実行するように指示できるようになりました。

問題と解決策

発生した問題とその解決方法は次のとおりです。

  1. クライアントは次のエラーで失敗しました:

    エラー - 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 を返し、テストを開始できるようになりました。

  2. サーバー ノードが結果を返し、クライアントに接続しようとすると、サーバーはローカル マシンの外部 IP アドレスに接続しようとしました。しかし、接続拒否エラーがスローされました:

    2013/05/16 12:23:37 エラー - jmeter.samplers.RemoteListenerWrapper: testStarted(host) java.rmi.ConnectException: ホストへの接続が拒否されました: xxx.xxx.xxx.xx;

    クライアント側でリバース トンネルを設定することで、この問題を解決しました。

    • まず、JMeter インストールjmeter.propertiesのフォルダー内のファイルを編集し、設定を含む行のコメントを外しました。ポートを 60000 に変更しました。/binclient.rmi.localport

      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、結果を配信するためにサーバーに接続するように指示します。これは、最終的にクライアントにトンネリングされます。

  3. サーバーへの SSH 接続は、少しの間アイドル状態になった後もドロップし続けました。これを防ぐために、各 SSH トンネル設定にパラメーターを追加して、クライアントが 60 秒間待機してからサーバーに null パケットを送信して接続を維持するように指示しました。

    $ 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これを設定してから使用してください。)

于 2013-05-17T23:09:26.740 に答える
1

AWS で JMeter を使用して分散テストを行う場合は、docker を使用することをお勧めします。これは、jmeter テスト インフラストラクチャを非常に迅速に使用するのに役立ちます。このようにして、同じバージョンの Java と jmeter が amazon のすべてのインスタンスにインストールされていることを確認できます。これは、JMeter 分散テストにとって非常に重要です。

以下のプロパティを設定し、ポートが 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/

于 2016-11-16T02:44:46.600 に答える