[Redundancy] 05. HAProxy?
카테고리: REDUNDANCY
태그: redundancy linux
05-1. HAProxy?
High Availbility Proxy의 약자로, 기존의 하드웨어 로드 밸런서를 대체하는 소프트웨어 로드 밸런서로, 여러 서버로 들어오는 요청을 분산시키는 TCP(L4) 및 HTTP 기반 애플리케이션(L7)들을 위한 고가용성 로드 밸런서와 리버스 프록시(Reverse Proxy) 기능을 제공하는 자유-오픈 소스 소프트웨어입니다.
| 용어 | 설명 |
|---|---|
| 포워드 프록시(Forward Proxy) | 클라이언트가 서버로 요청할 때 프록시 서버를 거쳐서 요청하는 방식으로, 클라이언트와 인터넷 사이에 프록시 서버가 위치함으로써 서버로 하여금 클라이언트로부터 온 요청이 정확히 누구에게서 온건지 알 수 없게 합니다. |
| 리버스 프록시(Reverse Proxy) | 클라이언트가 서버에 접속할 때 리버스 프록시를 호출하게 되고, 프록시 서버가 서버에 요청하여 받은 응답을 클라이언트에게 전달하는 방식으로 인터넷과 서버 사이에 프록시가 위치함으로써 클라이언트가 실제로 어떤 서버와 통신하는지 알 수 없게 하는 프록시를 의미합니다. |
■ 로드 밸런서를 사용해야 하는 이유
로드밸런싱(Load Balancing) 이란 부하 분산을 위해 가상 IP를 통해 여러 대의 서버에 접속을 분배하는 기술을 말하며, 클라이언트의 수가 많아짐에 따라 요청이 증가하면 서버에는 부하가 걸리게 되는데 이를 해결하기 위해서는 크게 “Scale-up(서버의 사양을 높여 하나의 서버가 한 번에 더 많은 요청을 처리할 수 있도록 하는 것)”, “Scale-out(서버의 수를 늘려 요청을 여러 대의 서버에 분산시키는 것)” 두 가지 방법을 고려할 수 있는데 로드 밸런싱은 Scale-out에 속하며, 여러 대의 서버를 활용하여 안정적이고 고성능의 서비스를 제공하는 데 중요한 역할을 합니다.
■ 동작 방식
| 순서 | 설명 |
|---|---|
| ① | 최초 접근시 서버에 요청 전달 |
| ② | 응답시 쿠키 (Cookie) 에 서버 정보 추가 후 반환 |
| ③ | 재 요청시 Proxy에서 쿠키 정보 확인 후 최초 요청 서버로 전달 |
| ④ | 다시 접근 시 쿠키를 추가할 필요없이 서버에 전달 (클라이언트에 쿠키 정보가 계속 존재하여 재사용) |
05-2. HAProxy 고가용성 구성
HAProxy는 자체적으로 VRRP(Virtual Router Redundancy Protocol, 가상 라우터 중복 프로토콜)을 지원하여 여러 대의 HAProxy 인스턴스를 구성하여 클러스터를 형성할 수 있다.
가상 IP 주소를 공유하는 Active HAProxy 서버와 Standby HAProxy 서버가 heartbeat을 주고 받으면서 서로 정상적으로 작동하는지 확인하는데, 이때 Active 상태의 서버에 문제가 발생하면 Standby 서버가 Active 상태로 변경되면서 기존 Active HAProxy의 가상 IP를 가져오면서 서비스를 정지 없이 유지할 수 있다.
또한, 표준 VRRP 데몬인 keepalived와 함께 사용하여 가상 IP 주소를 공유하고 Active-Standby 구성을 통해 장애 복구 기능을 구현할 수 있습니다.
05-3. HAProxy SSL
SSL(Secure Sockets Layer)은 TCP(전송계층) 위에서 작동하며, End-to-End간 전송하는 데이터를 암호화하여 네트워크 구간에서 데이터를 보호한다. HAProxy에서는 2가지 방법으로 SSL을 사용할 수 있다.
| 종류 | 설명 |
|---|---|
| SSL Passthrough | 특별한 액션없이 그대로 흘려보내는 방식으로 SSL의 기본 기능인 End-to-End간 전송하는 데이터를 보호 가능하다. |
| SSL Termination | SSL을 전담해서 처리하고 뒤로 흘려보내는 방식으로 SSL 핸드쉐이크와 암호화 데이터를 Client <-> HAProxy 간 교환하고 일반 데이터를 HAProxy <-> Server 간 교환, 즉 도착 전 구간까지는 데이터가 보호되지만 내부 구간에서는 데이터를 볼 수 있다. |
【SSL Passthrough】은 기본 설정만으로도 충분하며, 내부망에서도 암호화가 필요한 경우에 사용할 수 있다. 반면, 【SSL Termination】 의 경우, L7 스위치 또는 HAProxy 등에서 할 수 있으며 SSL 인증서를 설치해야 한다. (자세한 내용은 해당 링크 참고)
05-4. HAProxy 모니터링
05-5. HAProxy 로깅
[root@dlp ~]# halog -srv -H < haproxy.log | column -t
190000 lines in, 10 lines out, 0 parsing errors
#srv_name 1xx 2xx 3xx 4xx 5xx other tot_req req_ok pct_ok avg_ct avg_rt
api/web5 0 12969 163 851 0 1 13984 13983 100.0 0 60
api/web6 0 12976 149 854 5 0 13984 13979 100.0 1 150
httpd/<NOSRV> 0 0 8 0 0 0 8 0 0.0 0 0
httpd/web1 84 534 0 6 2 0 626 626 100.0 0 342
httpd/web2 72 3096 0 9 10 0 3187 3183 99.9 1 1509
static/static1 0 74491 171 17 1 0 74680 74679 100.0 0 2
static/static2 0 72989 155 11 0 0 73155 73155 100.0 1 4
stats/<STATS> 0 465 0 0 0 0 465 458 98.5 0 0
댓글 남기기