클라우드 엔지니어/클라우드 캠프과정

부하테스트

해아's 2022. 10. 31. 21:51
  1) 부하테스트란?
	우리가 만든 웹 서비스가 목표 응답시간 기준으로 얼마만큼의 동시 접속자 수를 견딜수 있는가를 테스트하기 위한 목적
	동시접속자 수를 TPS로 환산하여 자원적인 관점으로 사용자 대비 용량 산정
	즉, 사용자의 추이에 따라 적절한 자원을 배분하는 것, 더 나아가 병목구간을 찾아 제거하는 것
	출시 전 대부분의 어플리케이션이 성능 저하를 일으키는 병목구간을 가지고 있다. 
	출시 전에 얼마나 이 부분을 많이 해결하느냐가 매우 중요
	즉 부하를 발생시키는 것도 중요하지만, 병목구간이 무엇인지 찾아내는 것이 필요
	APM (Application Performance Monitoring)과 인프라 모니터링(Infrastructure Monitoring)의 지표들을 읽어내고, 
	병목 구간의 문제가 코드의 잘못인지, 자원의 부족인지, 세팅값의 잘못인지 찾아내어 개발자 레벨로 설명을 해주는 능력이 필요
  2) 부하테스트의 종류
    (1) 부하 테스트 (Load Test) 
	특정한 부하를 제한된 시간을 두어서 웹 어플리케이션에 이상이 없는지 파악하는 테스트
    (2) 지속성 테스트 (Endurance Test)
	Load Test와 유사하나 오랜 기간 부하를 줘서 하는 테스트
    (3) 스트레스 테스트 (Stress Test)
	부하의 임계점을 찾기 위해 점진적으로 부하를 올리면서 진행하는 테스트
    (4) 최고 부하 테스트 (Peak Test)
	일순간 감당할 수 없을 만큼 부하를 주고, 웹 어플리케이션이 죽지 않고 제대로 동작하고 회복하는지 보는 테스트
	수강신청이나 이벤트 등 대규모 상황을 대비하기 위해 진행
  3) 부하테스트 프로그램의 종류
	JMeter, Load Runner, nGrinder, Gatling
  4) APM의 종류
	부하를 발생시킨 후, 웹 어플리케이션의 주요 병목지점을 찾아내는 것이 중요
	웹 어플리케이션의 병목을 찾아주는 MRI같은 장치가 APM
	APM의 가장 대표적인 솔루션은 제니퍼소프트
	네이버에서 개발한 pinpoint나 jaeger와 같은 도구도 있음

우리는 JMeter를 이용하여 테스트를 한다

실습환경
openjdk 11.0.2 (https://jdk.java.net/archive/)  #환경변수에 추가해준다
apache-jmeter-5.5 (https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.5.zip)

 

시스템변수에 변수명은 JAVA_HOME > 자바 홈디렉토리(bin빼고)

 

시스템변수네 패스에 자바홈의 bin을 저장 > %JAVA_HOME%\bin

사진에는 \ << 빠짐

설정되면 cmd에서 java -version을 실행해서 자바버전이 나오면 정상설치된것이다.

그후 다운받은 apache-jmeter-5.5\bin\jmeter.bat 를 실행하여 정상적으로 실행되면 성공

jmeter 사용법
	Test Plan 우클릭 -> Add -> Thread(Users) -> Thread Group
		Name : Thread Group의 이름 입력
		Action to be taken after a sampler error : 테스트 수행 중 에러가 발생될 때의 상황 설정
		Thread Properties
			Number of Threads : 이 Thread Group에 생성될 Thread의 개수를 지정
			Ramp-up Period : 한 Thread가 시작한 후 다음 Thread가 시작될 때까지의 대기 시간을 지정
			Loop Count : 각 Thread가 Thread Group에 속한 작업의 반복 횟수를 지정
			Scheduler : Thread Group의 시작 및 종료 스케줄을 설정할 것인지 체크 

	Thread Group 우클릭 -> Add -> Sampler -> Http Request
		Name : 요청의 이름 입력
		Server Name or IP : 서버에 접속할 수 있는 주소를 입력, 도메인 주소 or IP주소
		Port Number : 서버에 접속할 때 사용할 서버의 포트번호 입력
		Protocol : 사용할 프로토콜 입력
		Method : 메소드 입력
		Content encoding : 인코딩 방식 입력
		Path : 접속할 URL 입력
		Parameters : 서버에 전송할 데이터 입력

	Thread Group 우클릭 -> Add -> Listener -> View Results in Table
	Thread Group 우클릭 -> Add -> Listener -> View Results Tree
	Thread Group 우클릭 -> Add -> Listener -> View Results Tree

 

 

대용량 클러스터를 위하여 옆사람컴퓨터를 클러스터로 만들어서 접속한다.

다만들어지면 젠킨스에 테스트시스템 구축하여 실행한다

6) 젠킨스 + jmeter 
    1) 젠킨스에 플러그인 추가
	대시보드 -> Jenkins 관리 -> 플러그인 관리 -> 설치 가능 -> performance 앞에 체크박스 체크
	 -> Download now and install after restart -> 설치가 끝나고 실행중인 작업이 없으면 Jenkins 재시작

 

 2) 테스트용 파이프라인 추가
	새로운 Item -> 이름 loadtest -> Freestyle -> OK -> Build Steps에서 Add build step 클릭 후 Execute shell클릭 다음 내용 입력
		/usr/local/jmeter-5.5/bin/jmeter -n -t /var/lib/jenkins/workspace/loadtest/test.jmx -j jmeter.save.saveservice.output_format=xml -l /var/lib/jenkins/workspace/loadtest/report.log

	-> 빌드 후 조치 에서 빌드 후 조치 추가 -> Publish Performance test result report -> Source data files (autodetects format): 에 /var/lib/jenkins/workspace/loadtest/report.log
	-> 저장

 

 

 

 

 

참고자료

더보기

https://jmeter.apache.org/download_jmeter.cgi

 

Apache JMeter - Download Apache JMeter

Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava

jmeter.apache.org

 

https://velog.io/@makengi/K8s-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EA%B5%AC%EC%84%B1%EC%8B%9C-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%97%90%EB%9F%AC

 

[K8s] 클러스터 구성시 네트워크 에러

runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 아래 명령

velog.io

 

https://gihyun.com/153

 

[Kubernetes] k8s HA control-plane node 추가하기 (Add control-plane node)

Single Master로 k8s cluster를 구성했으나 추후 HA 구성을 위해 contorl-plane node를 추가 해야 할 경우 1. kubeadm-config.yaml update HA 구성을 위해 추가해야 할 node의 정보를 기존 kubeadm-config.yaml에..

gihyun.com

 

 

 

https://velog.io/@koo8624/Kubernetes-Calico-Error-caliconode-is-not-ready-BIRD-is-not-ready-BGP-not-established

 

[Kubernetes] Calico: calico/node is not ready: BIRD is not ready: BGP not established

새롭게 운영하는 쿠버네티스 클러스터에서 CNI로 calico를 사용하였습니다. 그러나, calico-node의 readiness-probe가 실패하여 노드가 정상적으로 실행되지 않는 문제를 겪게 되었습니다. 이번 포스팅에

velog.io

 

 

https://kubernetes.io/ko/docs/reference/ports-and-protocols/

 

포트와 프로토콜

물리적 네트워크 방화벽이 있는 온프레미스 데이터 센터 또는 퍼블릭 클라우드의 가상 네트워크와 같이 네트워크 경계가 엄격한 환경에서 쿠버네티스를 실행할 때, 쿠버네티스 구성 요소에서

kubernetes.io

 

728x90
반응형