HAProxy 완벽 가이드
1. HAProxy란?
HAProxy(High Availability Proxy)는 오픈소스 로드 밸런서 및 프록시 서버로, 웹 서버의 부하를 분산하고 가용성을 높이기 위해 사용된다. 높은 성능과 안정성을 제공하며, 특히 대규모 트래픽을 처리하는 웹 애플리케이션에서 널리 활용된다.
주요 특징
• TCP 및 HTTP 로드 밸런싱 지원
• 다중 로드 밸런싱 알고리즘 제공
• 리버스 프록시 기능
• SSL/TLS 종료 및 패스스루 지원
• 고성능, 고가용성 (Active-Passive 또는 Active-Active 설정 가능)
• 헬스 체크 및 장애 감지 기능
• HTTP 압축 및 캐싱 지원
2. HAProxy의 주요 기능
2.1 로드 밸런싱
HAProxy는 여러 서버에 트래픽을 분산시켜 부하를 줄이고 서비스의 가용성을 향상시킨다.
라운드 로빈 방식 (기본값)
서버에 순차적으로 요청을 보내는 방식.
frontend http_front
bind *:80
default_backend web_servers
backend web_servers
balance roundrobin
server web1 192.168.1.101:80 check
server web2 192.168.1.102:80 check
가중치 부여 방식
서버의 성능에 따라 가중치를 다르게 설정 가능.
backend web_servers
balance roundrobin
server web1 192.168.1.101:80 weight 3 check
server web2 192.168.1.102:80 weight 1 check
최소 연결(Least Connections) 방식
현재 연결 수가 가장 적은 서버로 요청을 보내는 방식.
backend web_servers
balance leastconn
server web1 192.168.1.101:80 check
server web2 192.168.1.102:80 check
2.2 리버스 프록시
클라이언트 요청을 백엔드 서버로 전달하여 웹 서버를 보호하고 최적화할 수 있다.
frontend http_front
bind *:80
default_backend web_servers
backend web_servers
balance roundrobin
server app1 192.168.1.101:8080 check
server app2 192.168.1.102:8080 check
2.3 헬스 체크 (Health Check)
서버의 상태를 자동으로 감지하여 문제가 있는 서버를 트래픽 분배에서 제외할 수 있다.
backend web_servers
balance roundrobin
server web1 192.168.1.101:80 check inter 2000 rise 2 fall 3
server web2 192.168.1.102:80 check inter 2000 rise 2 fall 3
• inter 2000: 2초마다 헬스 체크 수행
• rise 2: 2회 연속 정상일 때 다시 활성화
• fall 3: 3회 연속 실패 시 해당 서버를 제거
2.4 SSL/TLS 종료 (HTTPS 지원)
HAProxy가 클라이언트의 SSL 요청을 해독하여 백엔드 서버로 전달할 수 있다.
1) SSL 인증서 생성 (Let’s Encrypt)
sudo certbot certonly --standalone -d example.com
2) HAProxy SSL 설정
frontend https_front
bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
default_backend web_servers
backend web_servers
balance roundrobin
server web1 192.168.1.101:80 check
server web2 192.168.1.102:80 check
2.5 고가용성 (HA 설정)
서버 장애 시 자동으로 대체 서버로 전환하는 Active-Passive 또는 Active-Active 설정이 가능하다.
Keepalived를 이용한 Active-Passive 설정
sudo apt install keepalived
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
virtual_ipaddress {
192.168.1.100
}
}
• 두 개의 HAProxy 인스턴스를 설정하여 한 서버가 다운되면 자동으로 다른 서버가 트래픽을 처리함.
3. HAProxy vs Nginx vs AWS ELB 비교
비교 항목 |
HAProxy |
Nginx |
AWS ELB |
---|---|---|---|
주요 기능 |
로드 밸런싱, 리버스 프록시 |
웹 서버, 리버스 프록시 |
클라우드 로드 밸런싱 |
성능 |
매우 빠름 |
빠름 |
클라우드 최적화 |
로드 밸런싱 알고리즘 |
다양함 |
제한적 |
자동 관리 |
SSL 종료 |
지원 |
지원 |
지원 |
헬스 체크 |
지원 |
지원 |
자동 |
운영 방식 |
온프레미스, 클라우드 |
온프레미스, 클라우드 |
클라우드 전용 |
비용 |
무료 |
무료 |
유료 |
HAProxy는 고성능 로드 밸런서로, 대규모 트래픽을 처리하는 데 최적화되어 있다.
Nginx는 로드 밸런싱뿐만 아니라 정적 콘텐츠 제공에도 강점이 있다.
AWS ELB는 관리형 서비스로, AWS 환경에서 자동 확장이 필요할 때 유용하다.
4. 주요 명령어
# HAProxy 설치
sudo apt update && sudo apt install haproxy -y
# 설정 파일 검증
haproxy -c -f /etc/haproxy/haproxy.cfg
# 서비스 시작, 중지, 재시작
sudo systemctl start haproxy
sudo systemctl stop haproxy
sudo systemctl restart haproxy
# 로그 확인
sudo tail -f /var/log/haproxy.log
5. HAProxy를 사용하는 이유
1. 높은 성능
• 비동기 이벤트 기반 처리 방식으로 수천만 개의 요청을 빠르게 처리할 수 있음.
2. 다양한 로드 밸런싱 알고리즘 지원
• 라운드 로빈, 최소 연결, IP 해시, 가중치 기반 등 다양한 방법 제공.
3. SSL/TLS 지원
• HTTPS 트래픽을 처리하여 보안을 강화할 수 있음.
4. 헬스 체크 기능 제공
• 백엔드 서버의 상태를 자동으로 감지하여 가용성을 높일 수 있음.
5. 고가용성(HA) 설정 가능
• Keepalived와 함께 설정하여 서버 장애 시 자동으로 다른 서버로 전환 가능.
6. 오픈소스 및 무료
• 기업에서도 자유롭게 사용할 수 있으며, 설정이 유연함.