Nginx로 1대서버에서 HAProxy 적용하기

노문택·2022년 3월 30일
0
post-thumbnail
post-custom-banner

프록시의 이론을 공부했다면 바로바로바로바로 실습을 적용할때

사담

일단 저에게 주어진 조건이 1대의 서버이므로 1대의 서버로 하겠다..ㅠㅠ

다른 포스팅도 찾아봣는데

2대의 서버일경우 1대에서 nginx 설정하고 나머지 1대는 그냥 nohup이나 도커로 켜서 해주는거같다
만약 좀더 좋은 환경이라면 그 나머지 1대에서도 nginx설정하고 라우터에서 분기해주면 정말 베스트 짱짱이겟지만.. l3 스위치도 엄청 고가?? 라는 말도있고.. 구하기도 힘들뿐만아니라.. 이런걸 할바에 아마존 로드밸런스가 더 효율이 좋다고한다..ㅠㅠ..

서버 2개 키기

java -jar app1.jar \
--server.servlet.context-path=/api \
--server.address=127.0.0.1 \
--server.port=8080

java -jar app2.jar \
--server.servlet.context-path=/api \
--server.address=127.0.0.1 \
--server.port=8081

이렇게 두개를 켜준다 근데 외부 포스트맨이나 이런걸로 테스트하는데 막힌 문제가발생하면 server.address를 손봐주면된다.

Nginx 설정

nginx config를 수정해주어야한다.. 기존의 리버스 프록시기반이기때문에 리버스 프록시와 같이 설정하도록 한다

server 파트에

location /api {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Connection "";
include /etc/nginx/proxy_params;
}

하면 http://localhost/api 이렇게 들어오는건 바로 8080으로 바꿔준다..
이제 upstream을 해주자..

upstream backend {
server localhost:8080;
server localhost:8081;
}

아까 설정해준 프록시패스부분을 upstream 부분을적용해준다.

#proxy_pass http://localhost:8080;
proxy_pass http://backend;


저렇게 바꿔줌

그리고 nginx설정 바꿧으니 nginx 재시작 ㄱㄱ

sudo service nginx restart

성능비교

그리고 jmeter를 통해 부하테스트를 하여 before after 를 비교해보자!

jmeter를 통한 부하테스트 방법은

부하테스트 여기서 확인하기

진행하는 프로젝트의 컨셉이 스파크가 확티는 컨셉이기때문에
1900명이 10번 loop cnt 를 1초동안 시행했을때는 다음과 같이 나왔엇다..

초당 작동하는 트렌젝션수

작동하는 쓰레드수

딜레이타임

2100명이 10번 loop cnt 1초 호출시에는 작동하는 쓰레드수를 보면 다음과같이 2100에 머물러있다가 끝난다

이러면 사실상 2100명은 수용하기 어렵다고볼수있다..

이제 도입후 테스트 해보자

1900명이 10번 loop cnt 를 1초동안 시행했을때

할때마다 부하그래프가 각양각색으로 바뀌긴한다.. 아마존ec2 서버에서해서그런지 시간대의 영향을받음

초당 작동하는 트렌젝션수

request failed 가 생기긴했는데 아마 첫번째 분산으로 연결을 못하고 2번째로 연결해주는것같다.

작동하는 쓰레드수

1200에서 병목현상이있는데 이때 ec2서버가 아팟던것같다.

딜레이타임

아마 1초동안 테스트해서 그런지 마지막에 팍 튀는 경우가많은데

아까 ec2서버가 잠깐동안 아팟던 틈을타.. 쌓인게 튄것같다..

그래서 마지막은 가장중요한 최대 thread group인것같ㄷ가.

2500명이 10번 loop cnt 를 1초동안 시행했을때

2800명 일때

3000명일때 실패

2800명정도 수용이가능한걸로보인다.

도입전

도입후

사실상 1대에서 로드밸런스를 적용한거라 그렇게 높은 효율을 보지 못햇던것같다.

profile
노력하는 뚠뚠이
post-custom-banner

0개의 댓글