
프로젝트때 처음 사용해본 HAProxy는 따라하는데로 사용하며 뭔지 몰랐지만 지금이라도 정확히 한번 알아볼려고 한다.
HAProxy 단어에서 답을 찾을 수 있듯이 High Availability Proxy의 약자로 TCP(L4)/HTTP(L7) 로드 밸런서 및 플록시 서버를 제공하는 오픈 소스 SW이다. 주로 대규모 웹 서비스에서 서버 부하를 분산하고 고가용성을 제공하기 위해 널리 사용된다.
성능적으로는 다음과 같은 특징을 가지고 있다.
먼저 랩을 진행하기 전에 대략적인 아키텍처를 소개하겠다.

사용자는 107 IP로 http 요청을 보내면 HAproxy에서는 로드 밸런서의 역할인 부하 분산을 통해 서버에게 전달후 요청을 응답하게 된다.

각 VM(웹서버) 에서 IP와 curl 명령어를 통해 웹서버가 잘 작동하는지 확인함.
이제 HAProxy를 설치하여 /etc/haproxy/haproxy.cfg 설정파일을 설정해준다.
처음에는 다른 설정은 신경쓰지 않고 맨밑에 backend app 이라는 항목에 웹서버를 추가 해줬다.

이렇게 설정을 하고 보니 문제가 발생했다.

계속 server static/static 가 down 됬다고 로그가 남고 웹서버에는 접속이 안되는 문제가 발생해 설정 파일을 다시 설정하러 갔다.
그래서 다시 설정 파일을 유심히 관찰했는데 backend static 이라는 항목을 발견했다. 그럼 app 이랑 static 차이가 뭔지 확인해봤다.
HAProxy backend static / backend app 차이
backend static 은 html,css,js 등 정적 파일을 제공하는 서버 그룹
backend app 은 API를 처리하는 서버 그룹 (예를 들면 DB에 데이터를 넣거나 확인)
아무튼 그래서 static에 다시 웹서버를 추가함

이러고 다시 확인했지만...

503 에러가 발생했다. 이때 로그도 확인했지만 별다른 로그도 없었고 뭐가 문제인지 한참 찾았다.
설정파일에서 default_backend 항목에 app이라고 되어있는 것을 확인했다. 기본적으로 backend app으로 트래픽을 분배해주는 옵션인거 같아 static으로 변경했다.


다시 curl 명령어를 통해 잘 호출 되는지 확인했는데 잘되는것을 확인했다.

또한 haproxy를 웹으로 모니터링도 가능하는다는 것을 알았음
listen stats
bind *:9000
stats enable
stats uri /haproxy_stats
stats realm "HAProxy Statistics"
stats auth admin:password
해당 구문을 추가하고 haproxy IP:9000/haproxy_stats 으로 들어가면 다음과 같이 확인할 수 있다.

이렇게 다 확인을하고 마지막으로 헬스체크 부분도 확인을 해보는데 헬스체크가 제대로 되지 않는것을 확인해서 몇가지 옵션들을 추가했다.
backend static
balance roundrobin
option httpchk GET /
server web1 192.168.0.104:80 check
server web2 192.168.0.105:80 check
server web3 192.168.0.106:80 check
backend static 부분에 option 을 추가해 다음과 같이 헬스체크를 하도록 만듬

2초마다 체크를 하는것 같았다. 물론 간격도 조절할 수 있음
마지막으로 웹에서도 작동하는것을 확인했다.
