네트워크 캠퍼스/2차 프로젝트

아틸러리로 스트레스 테스트와 부하 분산확인하기

gayeon_ 2024. 7. 18. 18:18

아틸러리 테스트(부하 분산 확인)

부하 분산

: 한 가용영역 안에서 트래픽 분산을 위해 동일한 여러 app or 두 서버를 사용하는 것

 

 

서버 이중화

: 한 서버에 장애가 발생해도 다른 서버로 서비스를 유지할 수 있도록 두 서버를 두는 것

 

현재 가용영역 a에서는 app01이 배포가 된 상태이다.

아틸러리 테스트, 도커 배포 등등 여러 단계를 모두 완료한 후에 문서 참고해서 가용영역 b도 그대로 완성시킬 예정이다. (가용영역 b에는 젠킨스 설치, 크리덴셜 설정까지 완료했다.)

 

 

 

부하분산을 위해 app01을 가용영역 a 안에 하나만 복제할 것이다. 

 

 

 

복제하기 위해 app01로 이미지를 만들고 인스턴스를 생성했다.

 

 

upstream cpu-bound-app {
          server app01의 ip:8080 weight=100 max_fails=3 fail_timeout=3s;
          server app01-1의 ip:8080 weight=100 max_fails=3 fail_timeout=3s;
        }

 

그리고 복제한 인스턴스의 private ip를 nginx 설정 파일에 넣어야 한다.

 

 

 

설정파일 재입력

 

 

app01, app01-1 배포 완료

 

젠킨스 대시보드의 시스템 탭에서도 app01-1를 등록하면 스트레스 테스트 준비 끝!

 

 

스트레스 테스트를 할 때는 vscode를 관리자 권한으로 실행해야 한다.

부하를 조절할 때는 웹 애플리케이션에 대한 동시 요청 수인 arrivalRate 값을 변경하면 된다.

 

config:
  target: "http://ip" // nginx01의 공개 ip
  phases:
    - duration: 30
      arrivalRate: 100
      name: "warm up"
    - duration: 60
      arrivalRate: 1500
      name: "actual"
scenarios:
    - flow:
        - get:
            url: "/products-temp/thymeleaf/ex01"

 

스트레스 테스트 vscode

 

 

artillery run --output report.json script.yaml

 

부하테스트 실행 명령어

 

 

artillery.cmd report .\report.json

 

리포트 생성 명령어

 

 

1) app01 하나일 때(수직 스케일링)

 

 

2) app01, app01-1일 때(수평 스케일링)

 

중앙값과 95번째 백분위 값이 큰 차이가 나지 않으면 안정적인 서버이다.

수직 스케일링 방법을 사용했을 때보다 중앙값과 95번째 백분위 값의 차이가 덜 난다.

 

 

+) 

 

로그에서 균등하게 로드밸런싱이 되고 있는 것을 볼 수 있었다.