서버 관리 · 4 min read · Nov 12, 2025
Ubuntu 14.04에서 HAProxy를 이용한 웹 서버 로드 밸런싱
HAProxy란?
HAProxy(고가용성 프록시)는 모든 TCP 서비스를 로드 밸런싱할 수 있는 오픈 소스 로드 밸런서입니다. HAProxy는 로드 밸런싱, 고가용성 및 TCP 및 HTTP 기반 애플리케이션을 위한 프록시 기능을 제공하는 무료이며 매우 빠르고 신뢰할 수 있는 솔루션입니다. 특히 매우 높은 트래픽 웹사이트에 적합하며, 세계에서 가장 많이 방문하는 웹사이트 중 많은 수를 지원합니다.
그 존재 이후로, HAProxy는 사실상 표준 오픈 소스 로드 밸런서가 되었습니다. 스스로 광고하지 않지만 널리 사용되고 있습니다. 아래는 설정이 어떻게 보이는지에 대한 기본 다이어그램입니다: 
HAProxy 설치하기
저는 Ubuntu 14.04를 사용하고 있으며 다음과 같이 설치합니다:
apt-get install haproxy버전을 확인하려면:
haproxy -vHAProxy가 init 스크립트 /etc/default/haproxy에 의해 시작되도록 활성화해야 합니다. ENABLED 옵션을 1로 설정합니다:
ENABLED=1이 변경이 제대로 이루어졌는지 확인하려면 HAProxy의 init 스크립트를 매개변수 없이 실행합니다. 다음과 같은 결과를 볼 수 있어야 합니다:
$ service haproxy
reload restart start status stop 이제 HAProxy가 설치되었습니다. 이제 2개의 Apache 웹 서버 인스턴스와 1개의 HAProxy 인스턴스가 있는 설정을 만들어 보겠습니다. 아래는 설정 정보입니다:
우리는 VirtualBox를 통해 가상으로 생성된 세 개의 시스템을 사용할 것입니다:
인스턴스 1 - 로드 밸런서
호스트 이름: haproxy
운영 체제: Ubuntu
사설 IP: 192.168.205.15
인스턴스 2 - 웹 서버 1
호스트 이름: webser01
운영 체제: LAMP가 설치된 Ubuntu
사설 IP: 192.168.205.16
인스턴스 2 - 웹 서버 2
호스트 이름: webserver02
운영 체제: LAMP가 설치된 Ubuntu
사설 IP: 192.168.205.17
아래는 설정이 어떻게 보이는지에 대한 다이어그램입니다: 
이제 HAProxy를 구성해 보겠습니다.
HAProxy 구성하기
원본 파일을 이름을 바꿔 백업합니다:
mv /etc/haproxy/haproxy.cfg{,.original}자신의 haproxy.cfg 파일을 생성합니다. 좋아하는 텍스트 편집기를 사용하여 /etc/haproxy/haproxy.cfg 파일을 다음과 같이 만듭니다:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 check설명:
global
log /dev/log local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon로그 지시문은 로그 메시지가 전송될 syslog 서버를 언급합니다.
maxconn 지시문은 프론트 엔드에서의 동시 연결 수를 지정합니다. 기본값은 2000이며 시스템 구성에 따라 조정해야 합니다.
user 및 group 지시문은 HAProxy 프로세스를 지정된 사용자/그룹으로 변경합니다. 이 값은 변경하지 않아야 합니다.
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000위 섹션은 기본값을 포함합니다. option redispatch는 연결 실패 시 세션 재분배를 활성화합니다. 따라서 웹 서버 인스턴스가 다운되면 세션 고정성이 무시됩니다.
retries 지시문은 연결 실패 후 웹 서버 인스턴스에서 수행할 재시도 횟수를 설정합니다.
수정해야 할 값은 다양한 타임아웃 지시문입니다. contimeout 옵션은 웹 서버 인스턴스에 대한 연결 시도가 성공할 때까지 기다리는 최대 시간을 지정합니다.
clitimeout 및 srvtimeout은 클라이언트 또는 서버가 TCP 프로세스 중에 데이터를 인식하거나 전송할 것으로 예상될 때 적용됩니다. HAProxy는 클라이언트 및 서버 타임아웃을 동일한 값으로 설정할 것을 권장합니다.
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin
option httpclose
option forwardfor
server webserver01 192.168.205.16:80 check
server webserver02 192.168.205.17:80 check위 블록은 프론트엔드와 백엔드 모두에 대한 구성을 포함합니다. HAProxy가 웹팜을 식별하기 위한 이름으로 포트 80에서 수신 대기하도록 구성하고 있습니다.
stats 지시문은 연결 통계 페이지를 활성화합니다. 이 페이지는 stats uri에 언급된 URL로 볼 수 있으며, 이 경우 http://192.168.205.15/haproxy?stats에서 이 페이지의 데모를 볼 수 있습니다.
balance 지시문은 사용할 로드 밸런싱 알고리즘을 지정합니다. 사용 가능한 알고리즘 옵션은 다음과 같습니다:
- 라운드 로빈 (roundrobin),
- 정적 라운드 로빈 (static-rr),
- 최소 연결 (leastconn),
- 출처 (source),
- URI (uri) 및
- URL 매개변수 (url_param).
각 알고리즘에 대한 정보는 공식 문서에서 확인할 수 있습니다.
server 지시문은 백엔드 서버를 선언하며, 구문은 다음과 같습니다:
server [:port] [param*] 여기서 언급한 이름은 로그 및 경고에 나타납니다. 이 지시문에서 지원되는 추가 매개변수가 있으며, 이 기사에서는 check 매개변수를 사용할 것입니다. check 옵션은 웹 서버 인스턴스에 대한 상태 검사를 활성화하며, 그렇지 않으면 웹 서버 인스턴스는 항상 사용 가능한 것으로 간주됩니다.
구성이 완료되면 HAProxy 서비스를 시작합니다:
sudo service haproxy start로드 밸런싱 및 장애 조치 테스트
기본적으로 /var/www/index.html에 위치한 기본 index.html 파일에 서버 이름을 추가합니다.
인스턴스 2 - 웹 서버 1 (IP- 192.168.205.16인 webserver01)에서 아래 줄을 추가합니다:
sudo sh -c "echo Hostname: webserver01 (192.168.205.16)
>> /var/www/index.html"인스턴스 3 - 웹 서버 2 (IP- 192.168.205.17인 webserver02)에서 아래 줄을 추가합니다:
sudo sh -c "echo Hostname: webserver02 (192.168.205.17)
>> /var/www/index.html"이제 로컬 머신에서 웹 브라우저를 열고 HAProxy IP인 http://192.168.205.15로 이동합니다.
탭을 새로 고칠 때마다 각 웹 서버에 로드가 분산되는 것을 볼 수 있습니다. 아래는 제 브라우저의 스크린샷입니다:
처음 http://192.168.205.15를 방문했을 때: 
두 번째로 페이지를 새로 고쳤을 때: 
또한 http://192.168.205.15/haproxy?stats를 방문하여 HAProxy 통계를 확인할 수 있습니다.
이 설정으로 할 수 있는 더 많은 작업이 있습니다. 몇 가지 아이디어는 다음과 같습니다:
- HAProxy에 접근할 때 어떤 일이 발생하는지 테스트하기 위해 하나 또는 두 개의 웹 서버를 오프라인으로 전환하기
- HAProxy가 사용자 정의 유지 보수 페이지를 제공하도록 구성하기
- HAProxy 통계를 시각적으로 모니터링할 수 있도록 웹 인터페이스 구성하기
- 라운드 로빈 이외의 스케줄러로 변경하기
- 특정 서버에 대한 우선 순위/가중치 구성하기
그게 전부입니다!
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.