웹사이트 검색

웹 서버 부하 테스트를 위한 JMeter 클러스터 설정


이 페이지에서

  1. 1. 작동 방식
  2. 2. 설치 단계
  3. 3. 구성 단계
  4. 4. 테스트 단계

이 자습서에서는 부하 테스트를 위해 JMeter 클러스터를 설정하는 방법을 보여줍니다. 아직 모르는 사람과 마찬가지로 Apache JMeter 애플리케이션은 기능 동작을 테스트하고 성능을 측정하도록 설계된 100% 순수 Java 애플리케이션인 오픈 소스 소프트웨어입니다. 원래 웹 애플리케이션 테스트용으로 개발되었지만 이후 다른 테스트 기능으로 확장되었습니다. 서버, 서버 그룹, 네트워크 또는 개체의 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용할 수 있습니다.

그러나 각 비즈니스 접근 방식이 점점 더 커짐에 따라 엔지니어와 테스터는 각 확장 모듈이 일일 생산 작업을 손상시키지 않고 더 큰 소비자에게 서비스를 제공할 수 있는지 확인하기 위해 더 많은 테스트를 수행해야 합니다. 이를 보장하기 위해 JMeter는 클러스터링 프로세스로 수행하여 더 큰 환경에서 성능 테스트를 테스트할 수 있도록 자체 서비스를 도입했습니다.

JMeter 클라이언트 컴퓨터가 서버를 로드하기에 충분한 사용자를 시뮬레이트할 수 없거나 네트워크 수준에서 제한된 경우 단일 JMeter 클라이언트에서 여러 원격 JMeter 엔진을 제어할 수 있습니다. JMeter를 원격으로 실행하면 많은 저사양 컴퓨터에서 테스트를 복제하고 서버에서 더 큰 부하를 시뮬레이트할 수 있습니다. JMeter 클라이언트의 인스턴스는 여러 원격 JMeter 인스턴스를 제어하고 여기에서 모든 데이터를 수집할 수 있습니다.

분산 테스트는 여러 시스템을 사용하여 스트레스 테스트를 수행하는 테스트 유형입니다. 분산 테스트는 여러 클라이언트와 동시에 작업할 때 웹 사이트 및 서버 응용 프로그램을 테스트하는 데 사용됩니다.

1. 작동 원리

단일 JMeter 애플리케이션으로 로컬에서 부하 테스트를 실행하는 경우 컴퓨터에 CPU와 메모리가 충분하더라도 실행할 수 있는 사용자 수에 특정 제한이 있습니다. 그로 인해 JMeter를 사용하여 1000명 이상의 동시 사용자가 있는 시나리오를 어떻게 만들 수 있습니까? 이 시나리오로 인해 분산 모드의 JMeter에 대한 아이디어가 떠오릅니다.

JMeter 배포에 대해 이야기할 때 JMeter가 Java RMI[원격 메서드 호출]를 사용하여 분산 네트워크의 개체와 상호 작용하는 마스터-슬레이브 아키텍처를 참조합니다. 아래 그림은 작업 흐름을 요약한 것입니다.

클러스터 설계에서 JMeter를 사용하면 대상 서버에 요청을 보낼 여러 원격 JMeter 인스턴스(슬레이브)와 함께 테스트 실행을 처리하는 로컬 JMeter(마스터)를 테스트할 수 있습니다.

다음을 통해 JMeter 클러스터/JMeter 서비스에 연결할 수 있습니다.

  1. JMeter 데스크톱 애플리케이션\n
  2. SSH/터미널
  3. VNC
  4. API 서비스 엔드포인트(WIP)



2. 설치 단계

설치 단계에서는 먼저 각 서버의 인벤토리를 잘 나열합니다. 세부 사항은 다음과 같습니다.

System Inventory
IP Hostname OS Function Status
172.20.0.111 jmeter01 CentOS 7 x64 bit JMeter server 01 (master/slave) Ready
172.20.0.112 jmeter02 CentOS 7 x64 bit JMeter server 02 (slave) Ready
172.20.0.113 jmeter03 CentOS 7 x64 bit JMeter server 03 (slave) Ready
172.20.0.114 jmeter04 CentOS 7 x64 bit JMeter server 04 (slave) Ready

이제 손을 더럽히자. 각 서버가 최소 서버 구성에 있다고 가정하고 전제 조건으로 서버를 설정하는 것으로 시작하겠습니다. 다음은 단계입니다.

 [ /]# yum install -y wget initscripts net-tools 

위의 작업은 설치 및 검토가 원활하게 진행되도록 하기 위한 선택 사항입니다. 설치가 완료되면 아래와 같은 스크린샷이 표시됩니다.

다음으로 JMeter를 서비스로 설정하기 위해 Java 패키지를 필수로 설치해야 합니다. 다음은 단계입니다.

 [ /]# yum localinstall -y jdk-8u131-linux-x64.rpm 

프로세스는 아래와 같습니다.

다음으로 JMeter 패키지를 설치합니다. 이 튜토리얼에서는 JMeter 설치를 위해 현재 안정적인 버전을 사용합니다. 단계는 아래와 같습니다.

 [ /]# curl -L https://repo1.maven.org/maven2/kg/apc/cmdrunner/2.2/cmdrunner-2.2.jar > $HOME/jmeter/lib/cmdrunner-2.2.jar 

모든 작업이 완료되면 아래와 같이 진행 상황이 표시됩니다.



다음으로 플러그인 관리자를 사용하여 JMeter가 원활하게 실행되는 데 필요한 여러 Java 패키지를 설치하는 데 도움을 줍니다. 다음은 단계입니다.

 [ /]# /root/jmeter/bin/PluginsManagerCMD.sh install jpgc-autostop,jpgc-casutg,jpgc-csl,jpgc-dummy,jpgc-ffw,jpgc-filterresults,jpgc-functions,jpgc-json,jpgc-mergeresults,jpgc-prmctl,jpgc-sense,jpgc-tst,jpgc-wsc 

진행이 원활하게 실행되면 아래 스크린샷과 같이 표시됩니다.

이제 설치 부분에서 모든 작업이 완료되었으므로 JMeter를 슬레이브로 시작하기 전에 키 저장소를 만들어야 합니다. 이를 위해 create-rmi-keystore.sh 라는 Apache JMeter 패키지와 함께 제공되는 스크립트를 사용할 수 있습니다. 다음은 단계입니다.

 [ ~]# $HOME/jmeter/bin/create-rmi-keystore.sh

아래는 스크린샷

이제 JMeter 설치가 거의 완료되었으므로 배포 프로세스를 위해 JMeter 서비스에서 구성을 진행할 수 있습니다. 이 서버에 대해 수행한 것과 동일한 설치로 나머지 JMeter 서버 설정을 계속할 수 있습니다.

3. 구성 단계

이제 분산 JMeter로 만들기 위한 구성은 JMeter /bin 폴더 내의 jmeter.properties를 아래와 같이 편집하면 됩니다.

 [ ~]# vim /root/jmeter/bin/jmeter.properties remote_hosts=172.20.0.111 ,172.20.0.112 ,172.20.0.113 ,172.20.0.114 

모든 JMeter 서버를 JMeter 구성 파일에 추가했습니다. 기본적으로 구성은 remote_hosts=127.0.0.1 로 지정됩니다. 이 구성의 경우 마스터로 할당하는 JMeter 서버에서 구성하기만 하면 됩니다.

4. 테스트 단계

모든 작업이 완료되면 테스트를 수행하고 단일 JMeter 부하 테스트 및 분산 JMeter 부하에 대한 결과를 비교합니다.

테스트를 시작하기 전에 최종 결과 예상을 가정해 보겠습니다. 이 테스트에서는 사이트에서 호출한 데이터베이스 쿼리를 실행하려고 합니다. URL을 사용하여 사이트에 액세스하고 JMeter 서비스에서 실행할 JMX 파일에 URL을 포함합니다. 이 자습서에서는 JMX 파일을 만드는 방법에 대한 단계를 포함하지 않습니다.

다음은 웹 URL을 통해 데이터베이스에서 실행을 잘 사용하는 간단한 쿼리입니다.

 [') LIMIT 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

참고로 이 튜토리얼에서 원하는 쿼리를 사용할 수 있습니다. 이 쿼리는 조정되지 않았기 때문에 JMeter 서비스를 사용하여 예약할 여러 세션에서 실행될 때 CPU 리소스를 높일 것으로 예상됩니다.

이제 모든 것이 준비되고 이해되었으므로 모든 JMeter 서버를 시작하겠습니다. 다음은 명령입니다.

 [ ~]# $HOME/jmeter/bin/jmeter-server & 
[1] 6149

테스트를 진행하려면 아래와 같이 단일 JMeter 서버에서 위의 쿼리를 트리거하는 JMX 파일을 실행하십시오.

 [ /]# /root/jmeter/bin/jmeter -n -t /opt/jmeter/shahril_loadtest/testing.jmx 

위의 "testing.jmx"는 실행 스레드를 포함하는 JMX 파일입니다. 위의 내용을 실행하면 아래 스크린샷과 같은 결과가 표시됩니다.

다음으로 분산 환경에서 JMeter에 대해 동일한 JMX 파일을 실행해 보겠습니다. 다음은 단계입니다.

 [ /]# /root/jmeter/bin/jmeter -n -t /opt/jmeter/shahril_loadtest/testing.jmx -R 172.20.0.111,172.20.0.112,172.20.0.113,172.20.0.114 

이 명령은 단일 단계에서 실행하는 것과 상당히 동일하며 -R 플래그를 추가하고 실행을 위해 포함할 다른 JMeter 서버를 추가하기만 하면 됩니다. 아래와 같이 JMeter 명령에서 제공하는 나열된 플래그의 세부 정보를 볼 수 있습니다.

 [ /]# /root/jmeter/bin/jmeter --help 
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) |
/ ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 5.1.1 r1855137

Copyright (c) 1999-2019 The Apache Software Foundation


To list all command line options, open a command prompt and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -?

--------------------------------------------------

To run Apache JMeter in GUI mode, open a command prompt and type:

jmeter.bat(Windows)/jmeter.sh(Linux) [-p property-file]

--------------------------------------------------

To run Apache JMeter in NON_GUI mode:
Open a command prompt (or Unix shell) and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file]

--------------------------------------------------

To run Apache JMeter in NON_GUI mode and generate a report at end :
Open a command prompt (or Unix shell) and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -n -t test-file [-p property-file] [-l results-file] [-j log-file] -e -o [Path to output folder]

--------------------------------------------------
To generate a Report from existing CSV file:
Open a command prompt (or Unix shell) and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -g [csv results file] -o [path to output folder (empty or not existing)]

--------------------------------------------------

To tell Apache JMeter to use a proxy server:
Open a command prompt and type:

jmeter.bat(Windows)/jmeter.sh(Linux) -H [your.proxy.server] -P [your proxy server port]

---------------------------------------------------

To run Apache JMeter in server mode:
Open a command prompt and type:

jmeter-server.bat(Windows)/jmeter-server(Linux)

---------------------------------------------------

계속해서 JMX 파일이 분산 환경에서 실행되면 아래 스크린샷과 같은 결과가 표시됩니다.

좋습니다. 이제 두 환경 단계에서 테스트를 성공적으로 실행했습니다. 비교 차이점을 보기 위해 grafana로 구동되는 모니터링 대시보드를 설정했습니다. 결과 차이를 보여주기 위한 것이므로 Grafana를 모니터링 대시보드로 설정하는 방법은 다루지 않습니다.

당사 웹 사이트를 호스팅하는 대상 서버에서 가져온 CPU 사용량을 기준으로 단일 JMeter 스레드에서의 결과는 다음과 같습니다.

아래 이미지는 분산 JMeter 스레드의 결과입니다.

위의 비교에서 명확하게 우리는 응용 프로그램이 수용할 수 있는 한계를 확인하기 위해 대상 서버에 실행할 더 많은 스레드를 도입할 수 있음을 알 수 있습니다.