docker swarm으로 확장 가능한 nGrinder 환경 구축하기

구경회·2021년 7월 27일
1
post-thumbnail

부하테스트란

서비스 개발 이후, 일반적으로 실제 요구 부하를 서버가 견뎌낼 수 있는지 확인하는 작업 중 하나이다. 유저의 활동을 시뮬레이션하는 작업으로 앱이 상용 단계로 나아갈 수 있는지, 동시 사용자는 얼마나 견딜 수 있는지를 알아낼 수 있다.

nGrinder

nGrinder는 스크립트 생성, 테스트, 모니터링과 결과 생성까지 이어질 수 있는 도구로, 네이버에서 만들었다. GroovyJython으로 스크립트를 작성할 수 있다. Groovy의 경우 익숙한 JUnit기반 문법으로 익숙한 형태로 테스트를 작성할 수 있다.

구축하기

구조


대략 위 그림과 같은 구조로 GUI 환경의 Controller를 이용해 테스트 스크립트를 조정하고 여러 Agent를 이용해 실제 요청을 날린다.

Docker Swarm Setting

여러 agent를 쉽게 추가하고 제거하기 위해 agent는 도커 스웜에서 레플리카 값을 주는 형식으로 만들 것이다. nGrinder의 공식 이미지 저장소는 다음과 같다. https://hub.docker.com/r/ngrinder/controller/
우선 도커 스웜 모드로 시작하기 위해 다음과 같이 입력하자.

docker swarm init

결과로 다음과 같은 문구가 나올 것이다.

Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \
    192.168.99.100:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

말 그대로이다. 이제 해당 노드는 매니저 노드로서 도커 스웜을 관리하는 역할을 맡게 된다.

이제 다른 agent 역할을 할 서버에서 다음과 같이 입력하자.

docker swarm join \
  --token <docker-swarm-join-token> \
  <hostname>

정상적으로 워커로 등록되었다면 다음과 같은 문구가 나온다.

This node joined a swarm as a worker.

이제 다시 마스터 노드로 돌아와 (처음 docker swarm init을 했던 노드) 다음 명령어로 노드들을 확인하자.

$ docker node ls

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
46aqrk4e473hjbt745z53cr3t    node-5    Ready   Active        Reachable
61pi3d91s0w3b90ijw3deeb2q    node-4    Ready   Active        Reachable
a5b2m3oghd48m8eu391pefq5u    node-3    Ready   Active
e7p8btxeu3ioshyuj6lxiv6g0    node-2    Ready   Active
ehkv3bcimagdese79dn78otj5 *  node-1    Ready   Active        Leader

위와 같이 여러 노드가 준비된 것이 보일 것이다.

네트워크 연결

다음과 같이 입력해 overlay 모드로 새로운 네트워크를 만들자. 이 네트워크 레이어를 agent를 설치할 여러 노드가 공유할 것이다.

docker network create -d overlay --attachable <network_name>

이번에는 네트워크 이름을 momos로 지었다고 하자. 다음과 같이 입력하면 된다.

docker network create -d overlay --attachable momos![](https://velog.velcdn.com/images%2Fheka1024%2Fpost%2Fb450ca63-bab0-4747-8fac-e775038164a7%2F%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%2C%202021-07-27%2017-13-42.png)

overlay 옵션을 주면 여러 호스트 사이에서 해당 네트워크를 이용할 수 있게된다. --attachable은 컨테이너에 명시적으로 네트워크를 붙이는 걸 허용하게 만든다. 이제 ControllerAgent들을 momos에 연결하면 된다.

docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller \
    --name controller \
    -p 8000:80 \
    --network momos \
    ngrinder/controller

이제 localhost의 8000번 포트로 들어가면 된다. 초기 아이디 / 비밀번호는 admin이다.

이제 agent를 도커 서비스로 만들어보자.

docker service create \
        --name agent \
        --network momos \
        --replicas 2 \
        ngrinder/agent 

--replicas 옵션 뒤에 준 개수만큼 컨테이너를 생성한다. 컨테이너는 등록된 worker들 사이에 분포한다. 원하는 개수만큼 레플리카 개수를 설정하자. 다시 앞선 컨트롤러로 들어가서 agent가 잘 등록되었는지 보자.


두 개의 agent가 잘 등록된 것을 확인할 수 있다. 이제 확장 가능한 테스팅 환경이 구축되었다. 더 많은 부하가 필요하다면 언제든 swarm에 조인한 후 replica의 개수를 늘려주면 된다.

참고문헌

profile
즐기는 거야

0개의 댓글