[nGrinder] Rocky Linux(Cent OS)에 설치하기

dondonee·2024년 7월 13일
0

nGrinder 설치 in Rocky Linux

사용 배경

부하 테스트가 필요해지다

배포 프로젝트를 약 750 명의 커뮤니티에 공개할 예정이어서 그 전에 부하 테스트를 해 보기로 했다. 모든 사람이 동시에 접속하지는 않겠지만 1vCPU 1GB MEM의 귀여운 서버라 서버 다운의 가능성이 있기 때문에 어느 정도 감당할 수 있는지 알아보기로 했다.

처음에는 간단하게 Postman을 사용했는데, 무료 버전이라 그런지 최대 100 명까지의 VU(가상유저)만 설정이 가능했다. 10분 간 테스트를 해 보았는데 응답 속도가 2.0s 정도로 느려지기는 했지만 서버가 다운되지는 않았다.

더 큰 부하를 테스트하기 위해 nGrinder를 사용하기로 했다.
Jmeter도 있지만 웹 콘솔이 편리해 보이고 국내 사용자가 많은 nGrinder를 선택했다.


nGrinder에 대해

🔗 nGrinder는 NAVER에서 관리하는 오픈소스 스트레스 테스트 도구이다.

nGrinder는 Controller와 Agent라는 두 개의 주요 컴포넌트를 사용하는데, Controller는 테스트 스크립트를 만들고 실행하는 역할을 하고, Agent는 Controller의 명령을 받아 Target에 트래픽을 생성하는 역할을 한다.

Controller와 Agent는 전용 서버를 마련하는 것이 정확한 테스트에 좋다고 하고, 내 컴퓨터나 네트워크가 감당할 수도 없을 거 같아서 Vultr에서 Contoller 서버와 Agent 서버 인스턴스를 두 개 구매했다. 서버에 부담이 될 만큼 많은 가상유저를 돌려야 하기에 서버보다 좋은 스펙으로 마련했다.



Controller 설치

WAR 다운로드

nGrinder 실행 방법은 Docker 실행/WAR 자체 실행/Tomcat 실행 3가지 방법이 있다. 나는 자체 실행이 가장 간편해 보여서 WAR을 다운받았다.


wget https://github.com/naver/ngrinder/releases/download/ngrinder-3.5.9-20230227/ngrinder-controller-3.5.9.war

🔗 nGrinder의 다운로드 페이지에서 설치 링크를 복사하고 wget으로 파일을 다운로드 한다. 나는 최신 버전인 3.5.9 버전을 선택했다.


OpenJDK 설치

JVM 위에서 돌아가기 때문에 yum install java-11-openjdk 명령으로 OpenJDK를 설치해준다. JDK 버전은 1.8 또는 11만 가능하다고 한다.

나는 처음에 17 버전을 깔았다가 스크립트 작성에서 java.lang.IllegalArgumentException: Unsupported class file major version 61 오류를 마주했다.


Maven, Gradle 설치

실행 전에 환경변수 설정과 Maven, Gradle 설치가 필요하다.

Rocky Linux에서 Maven은 yum install maven으로 간단하게 설치 가능하다.

Gradle은 yum install gradle을 해 보면 정보가 없다고 나온다. 🔗 Gradle 홈페이지에 들어가서 수동으로 설치해주어야 한다. Linux 다운로드를 선택하고 wget을 통해 binary-only 파일을 다운받아 공식 매뉴얼을 따라 설치해준다.


환경변수 설정

이제 nGrinder가 사용할 환경변수를 설정해주어야 한다. ~/.bash_profile에 환경변수를 설정해 주었다.

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-3.el8.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin

export NGRINDER_HOME=/usr/local/ngrinder

export GRADLE_HOME=/opt/gradle/gradle-8.9
export PATH=${GRADLE_HOME}/bin:${PATH}
  • JAVE_HOME 경로는 다음 명령을 통해 추출할 수 있다.
$ which java
/usr/bin/java
$ readlink -f /usr/bin/java
/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-3.el8.x86_64/bin/java
  • NGRINDER_HOME은 nGrinder 실행 관련 파일이 생성되는 디렉토리다.
  • GRADLE_HOME : Gradle 경로이다. 나는 /opt/gradle에 설치했다.

source ~/.bash_profile을 통해 변경 내역을 저장하자. echo $JAVA_HOME을 통해 잘 설정이 되었는지 확인할 수 있다.


방화벽 열기

$ firewall-cmd --permanent --zone=public --add-port=16001/tcp
$ firewall-cmd --permanent --zone=public --add-port=12000/tcp
$ firewall-cmd --permanent --zone=public --add-port=8080/tcp
$ firewall-cmd --reload
$ firewall-cmd --list-ports

12000 포트는 테스트에 따라 더 많은 포트를 사용할 수도 있다. 나는 12000~12009 10개 포트를 열어주었다.

실행하기

$ java -Djava.io.tmpdir=${NGRINDER_HOME}/lib -jar ngrinder-controller-3.5.9.war

프로그램의 부팅이 잘 되면 로컬 브라우저의 URL에 http://[Controller 서버 IP]:8080을 입력해 콘솔에 접속하자. 기본적으로 8080 포트를 사용하는데 포트를 지정해주고 싶다면 실행 명령어에 -p 옵션을 사용해 다른 포트를 지정해줄 수 있다.


웹 콘솔이다. ID와 비밀번호 모두 admin이다. 로그인한 뒤 비밀번호를 변경해주자.



Agent 설치

파일 다운로드

로그인 후 우측 상단 메뉴에서 DownloadAgent에서 로컬로 Agent 파일을 다운받을 수 있다. wget을 사용하고 싶다면 Agent Management 메뉴에 들어가면 설치 URL을 복사할 수 있다.

나는 /usr/local/ngrinder를 만들고 파일을 다운로드 받았다. .tar파일이 다운로드 되는데 tar xvf ngrinder-agent-3.5.9-p1-localhost.tar를 통해 압축을 풀 수 있다. 설치가 완료되면 압축 파일은 삭제해주어도 된다.


설정

먼저 파일을 실행하기 위해 Agent에도 JDK가 필요하다. Controller와 마찬가지로 OpenJDK11을 설치해주고 JAVA_HOME도 설정해주자.


그 다음 설정 파일을 만들어주자. Agent는 기본적으로 localhost를 Controller로 사용하는데 나는 Controller 서버가 따로 있으므로 설정이 필요하다.

ngrinder-agent 디렉토리 내에 vi __agent.conf를 통해 설정 파일을 만들어주고 다음과 같이 입력한다. controller_port는 기본값이 16001이기는 하지만 그냥 명시적으로 적어주었다.

agent.controller_host=[Controller 서버 IP]
agent.controller_port=16001

실행하기

$ ./run_agent.sh 명령으로 파일을 실행할 수 있다.

파일을 실행한 뒤 웹 콘솔의 Agent Management를 보면 위와 같이 연결된 Agent를 확인할 수 있다. 최신 nGrinder 버전에서는 기본적으로 Approved 상태이지만 혹시 Disapproved 상태는 아닌지 체크하자.



nGrinder 연동 테스트

잘 동작하는지 간단히 테스트 해보자.

상단 메뉴에서 Script를 클릭하고 Create a script에서 간단한 스크립트를 만들어준다. 나는 GET 메소드로 게시글 목록을 불러와봤다.

만들어진 스크립트에서 Validate를 눌러 검증해 볼 수 있다. 문제가 없으면 저장한다.


상단 내비게이션에서 Performance Test를 클릭하고 Create Test를 누른다. 위의 스크린샷처럼 테스트를 상세하게 설정할 수 있는 페이지가 뜬다.

하나의 Agent를 설치했으므로 최대 Agent는 1개이다. (멀티 설정도 가능한 듯 하다.) 생성할 가상유저의 수, 아까 생성한 스크립트, 실행 기간 등을 설정하고 실행해보자.

초록불이 뜨고 모니터링 그래프가 잘 동작한다면 연동이 잘 된 것이다.



0개의 댓글