아틸러리로 스트레스 테스트와 부하 분산확인하기
아틸러리 테스트(부하 분산 확인)
부하 분산
: 한 가용영역 안에서 트래픽 분산을 위해 동일한 여러 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-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번째 백분위 값의 차이가 덜 난다.
+)
로그에서 균등하게 로드밸런싱이 되고 있는 것을 볼 수 있었다.