본문 바로가기
한화시스템 Beyond SW Camp/기반기술

[리눅스] HAProxy (부하 분산) 설치

by taeh00n 2024. 11. 24.

※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다.

 

트래픽이 몰려서 서버가 느려지거나 멈춘 경험이 있는가?

티켓팅이나 수강신청 등 사람이 많이 몰리는 서비스를 이용하면서 한 번쯤은 경험이 있을 것이다.

이런 문제를 해결하기 위해 서버 간의 부하를 분산시키는 기술이 중요하다.

HAProxy가 그런 기술 중 하나이다.

 

예를 들자면 인기식당에 식사를 하러 갔는데 한 명의 직원이 여러사람의 주문을 받으면 어떻게 될까?

당연히 혼란스러울것이고 이런 상황을 방지하기 위해선 여러 명의 직원을 미리 고용하여 효율적으로 분담해야한다.

서버도 똑같다. HAProxy가 웹 서버 트래픽을 효율적으로 분산하는 기술이다.

 

  1. IP 설정
  2. HAProxy 설치
  3. HAProxy 실행
  4. HAProxy 설정
  5. HAProxy 설정 적용
  6. HAProxy 실행 확인
  7. HAProxy에 웹 서버 부하분산 설정 추가
  8. HAProxy 설정 적용
  9. HAProxy 실행 확인

위의 과정으로 HAProxy 실습을 해보겠다.

 

1. IP 설정

https://taeh00n.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4%EA%B8%B0%EC%B4%88-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EC%B4%88-IP%EC%A3%BC%EC%86%8C-%EC%84%A4%EC%A0%95

 

리눅스_기초 : 네트워크 기초, IP주소 설정

※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다. 네트워크 기초 네트워크 : 데이터를 주

taeh00n.tistory.com

 

IP 설정은 위의 링크에서 따라하면 된다.

 

2. HAProxy 설치

apt install haproxy

 

위의 명령어로 haproxy를 설치한다. (관리자 권한으로)

3. HAProxy 실행

systemctl restart haproxy

 

위의 명령어로 haproxy를 실행시킨다.

HAProxy 상태 확인

HAProxy가 실행되고 있는지 확인하고 싶으면 systemctl status haproxy 명령어로 확인하면 된다.

확인을 하고 빠져나오고 싶다면 q를 누르면 된다.

4. HAProxy 설정

/etc/haproxy/haproxy.cfg 설정 파일에 설정 추가

/etc/haproxy/haproxy.cfg 설정 파일 맨 밑에 위와 같은 줄을 추가한다. (맨 아래줄로 이동하려면 명령 모드에서 Shift + g)

설정 관련해서 더 궁금한 점은 구글링 해보는 것을 추천한다.

listen stats
    bind *:9000
    mode  http
    option dontlog-normal
    stats enable
    stats realm Haproxy\ Statistics
    stats uri /stats

 

5. HAProxy 설정 적용

HAProxy 재시작

HAProxy의 설정을 적용했다.

 

6. HAProxy 실행 확인

HAProxy는 active 중

HAProxy가 active(실행중)인 것을 확인할 수 있다. (마찬가지로 빠져나오려면 q를 누르면 된다.)

 

HAProxy가 9000번 포트로 네트워크와 통신할 준비가 됨

HAProxy가 왜 9000번 포트를 사용할까? 이것은 4번 과정에서 haproxy.cfg 파일에서 설정을 9000번 포트로 한거지 HAProxy가 무조건적으로 9000번 포트를 사용하는 것은 아니다.

 

HAProxy 통계 페이지

HAProxy는 부하 분산 및 트래픽 관리 상태를 모니터링하기 위해 Stats Page라는 기능을 제공하는데 설정파일에서 9000번 포트를 쓴다고 설정하였으므로 9000번 포트로 가야한다. 그러면 맨 뒤에 /stats는 어디서 나온걸까? 이 부분도 4번 과정에서 haproxy.cfg 설정 파일에 적은 것을 확인할 수 있다.

 

7. HAProxy에 웹 서버 부하분산 설정 추가

frontend webserver
  bind *:80
  mode http
  default_backend nginx-server
  
backend nginx-server
  mode http
  balance roundrobin 
  option httpchk GET /
  server nginx1 192.168.189.101:80 check 
  server nginx2 192.168.189.102:80 check

 

마찬가지로 haproxy.cfg 맨 마지막 줄에 추가로 적어서 부하분산을 설정한다.

여기서 잘 봐야할 부분은 맨 마지막 두 줄이다.

저 두개의 nginx 서버 즉 웹 서버로 부하 분산이 된다는 것이다.

 

두 개의 nginx 서버를 만드는 것은 아래 링크로 들어가서 하는 것을 추천한다.

https://taeh00n.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-nginx-%EC%84%A4%EC%B9%98

 

리눅스 : nginx 설치

※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다.  nginx● nginx : 빠르고 효율적인 웹 서버

taeh00n.tistory.com

 

8. HAProxy 설정 적용

systemctl restart haproxy

 

위의 명령어로 수정된 파일을 설정 적용한다.

 

9. HAProxy 실행 확인

각 nginx 서버에 담긴 html 내용

HAProxy를 사용해 부하 분산이 잘 되어 번갈아가며 nginx 서버에 접속하는지 테스트하기 위해 접속하는 파일은 cth.html로 통일하고 내용은 server1, server2로 각각 다르게 해보았다.

F5(새로고침)을 할 때 마다 바뀌는 서버

HAProxy 서버의 IP에 80번 포트의 파일로 접속을 해보았다.

F5(새로고침)을 할 때 마다 내용이 바뀌는 것을 볼 수 있다.

이 뜻은 새로고침 할 떄 마다 nginx 서버를 왔다갔다 한다는 것이고 부하 분산이 잘 되었다는 뜻으로 확인하면 된다.

 

실습하던 HAProxy서버의 IP가 바꼈다고 생각할 수도 있는데 이건 그냥 내가 nginx 서버를 새로 만들기 귀찮아서 기존에 있던 HAProxy를 사용한거니 무시해도 된다.

 

6번 과정에서 나왔던 부하 분산 모니터링 하는 페이지로 이동해보겠다.

부하 분산 모니터링

모니터링 사이트로 이동해보니 추가한 nginx 서버가 잘 나타나고 실행중인 것을 볼 수 있다.

 

nginx1 서버 꺼보기

nginx1 서버를 systemctl stop nginx 명령어를 통해 꺼보았다.

서버가 죽은 것을 확인할 수 있고 다시 키려면 systemctl restart nginx 명령어를 통해 키면 된다.

모니터링 사이트는 실시간으로 변경이 되지 않으므로 새로고침으로 확인해야한다.