HAProxy Keepalived 이중화 구성 가이드
이 포스트에서는 HAProxy, Keepalived 를 활용하여 HAProxy 서버를 Master-Backup 방식으로 이중화 구성하는 방법에 관해 설명합니다. 하나의 HAProxy 서버에 장애가 발생해도, 이중화 구성한 서버로 자동으로 전환되어 서비스의 가용성을 유지할 수 있습니다.
이중화는 시스템의 신뢰성과 가용성을 높이는 중요한 방법입니다. 이를 통해 단일 장애점(SPOF, Single Point of Failure)을 제거하고, 서비스의 연속성을 보장할 수 있습니다.
이 포스트는 2개의 서버에 HAProxy가 설치 되었다는 전제 하에 진행됩니다.
HAProxy 설치 방법은 HAProxy OSS 설치 및 L7 Load Balancer, 모니터링 구성 가이드 포스트를 참고하세요.
목차
1. HAProxy Keepalived Master-Backup 구성이란?
2. 환경 구성
3. Keepalived 설치 및 구성
4. HAProxy Keepalived 이중화 구성 확인
5. 결론
1. HAProxy Keepalived Master-Backup 구성이란?
HAProxy Keepalived Master-Backup 구성은 서버의 고가용성(High Availability)을 유지하기 위한 이중화 구성입니다. 하나의 HAProxy 서버가 활성 상태(Master)로 동작하고, 다른 하나는 대기 상태(Backup)로 존재하며, Master 서버 혹은 서버의 HAProxy 프로세스에 문제가 생길 경우 Backup 서버가 활성화되는 구조입니다.
Keepalived는 VRRP(Virtual Router Redundancy Protocol) 패킷을 통해 서버의 상태를 확인합니다. Master 서버에서 주기적으로 VRRP 패킷을 전송하고, Backup 서버가 이를 모니터링합니다. 일정 시간 동안 패킷을 수신하지 못하면 Master 서버에 문제가 있다고 판단하고, Backup 서버가 Master 서버로 전환됩니다.
Keepalived 구성에는 VIP(Virtual IP)를 통해 이루어집니다. Master 서버의 네트워크 인터페이스에 VIP가 할당되어 해당 서버에 연결할 수 있고, Master 서버에 문제가 발생하면 Backup 서버의 네트워크 인터페이스에 VIP가 할당되어 기존 Master 서버의 장애와 무관하게 서비스를 이용할 수 있습니다.
2. 환경 구성
버전 정보
- Ubuntu 24.04
- HAProxy OSS 3.0.2
서버 IP
- HAProxy1(Master) 서버 IP : 192.168.200.138
- HAProxy2(Backup) 서버 IP : 192.168.200.63
- VIP : 192.168.200.155
3. Keepalived 설치 및 구성
HAProxy Keepalived 이중화 구성을 위해, 먼저 각 서버에 Keeaplived를 설치하고, 설정합니다.
1. 두 HAProxy 서버에 Keepalived를 설치합니다.
$ sudo apt install keepalived -y
2. Keepalived 설정 파일을 작성합니다.
Keepalived 설정 파일은 /etc/keepalived 경로에 keepalived.conf 파일로 작성합니다.
- Master 서버 설정
vrrp_script chk_haproxy { # HAProxy 프로세스의 실행 여부를 확인하는 스크립트
script "killall -0 haproxy" # HAProxy 프로세스의 실행 여부를 확인
interval 2 # 스크립트 실행 간격을 초 단위로 설정
weight 2 # 스크립트 성공 시 추가될 priority 값입니다
}
vrrp_instance VI_1 {
state MASTER # 서버를 MASTER로 설정
interface enp0s3 # VRRP 패킷을 송수신할 네트워크 인터페이스 설정
virtual_router_id 51 # VRRP 그룹 식별자 설정. Master, Backup 서버 모두 동일하게 설정
priority 101 # 서버의 우선 순위 값을 설정
advert_int 1 # VRRP 패킷을 전송할 간격을 초 단위로 설정
authentication {
auth_type PASS # 이중화 서버간 인증 방식을 패스워드 기반 인증으로 설정
auth_pass 1111 # 인증 패스워드를 설정. 두 서버 동일하게 구성합니다
}
virtual_ipaddress {
192.168.200.155 # 이중화 구성을 위한 VIP 설정
}
track_script {
chk_haproxy # 상단에 정의된 스크립트를 참조하여 노드의 상태를 조정
}
}
- Backup 서버 설정
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP # BACKUP 설정
interface enp0s3
virtual_router_id 51 # Master 서버와 동일하게 설정
priority 100 # Master 서버보다 낮게 설정
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.155 # VIP 설정
}
track_script {
chk_haproxy
}
}
위 설정에 따르면 기본적으로 Master 서버는 101, Backup 서버는 100의 priority 값을 가집니다. chk_haproxy 스크립트가 HAProxy 프로세스에 문제가 없음을 확인하여 성공하면 weight 설정에 따라 각 서버의 priority 값이 103, 101로 설정됩니다. 스크립트가 2초 간격으로 실행되면서 Master 서버의 HAProxy 프로세스의 문제를 감지하면 Master 서버의 priority 값이 101로 변경되어, Backup 서버의 priority 값인 102보다 낮아짐에 따라 Backup 서버가 Master 서버로 전환됩니다.
네트워크 인터페이스 설정은 실제 환경에 맞게 변경해서 구성합니다. ip a 명령어로 확인할 수 있습니다.
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:1c:d2:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.200.138/16 metric 100 brd 192.168.255.255 scope global dynamic enp0s3
valid_lft 161326sec preferred_lft 161326sec
3. 명령어를 통해 Keepalived를 재시작하여 설정을 적용합니다.
$ sudo systemctl restart keepalived
4. 설정 적용 후, Master 서버의 네트워크 인터페이스에 VIP가 추가됩니다.

4. HAProxy Keepalived 이중화 구성 확인

HAProxy Keepalived 이중화 구성 확인을 위해 Master HAProxy 서버로의 요청은 Server1 텍스트 응답을 반환하도록, Backup HAProxy 서버로의 요청은 Server2 텍스트 응답을 반환하도록 설정했습니다.
해당 구성은 테스트를 위해 Master 서버 장애 시 Backup 서버를 통한 응답을 확인하기 위한 구성으로, 실제 이중화 구성의 목적을 위해선 두 서버 모두 동일한 설정을 적용해야 합니다.
1. 명령어를 사용하여 VIP로 요청을 전송하고, 응답을 확인합니다.

Master 서버로 설정 된 HAProxy 서버에서 응답하는 것을 확인할 수 있습니다.
2. 명령어를 사용하여 Master 서버의 HAProxy 프로세스를 정지합니다.
$ sudo systemctl stop haproxy
$ sudo systemctl status haproxy
○ haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; preset: enabled)
Active: inactive (dead) since Wed 2024-07-24 08:04:16 UTC; 4s ago
...
3. Backup 설정된 서버의 네트워크 인터페이스에 VIP가 추가된 것을 확인합니다.

4. VIP로 다시 요청을 전송하고, 응답을 확인합니다.

Backup 서버에서 응답하여 Server2 텍스트를 반환하는 것을 확인할 수 있습니다. 이중화 구성이 완료되어, VIP를 통해 요청을 수신하고 Master 서버의 장애가 발생해도, Backup 서버가 Master 서버로 전환되어 응답합니다.
5. 결론
이번 포스트에서는 HAProxy, Keepalived 구성을 통해 HAProxy 서버를 Master-Backup 방식으로 이중화 구성하는 방법에 대해 알아봤습니다. Keepalived 구성을 통해 2개의 HAProxy 서버를 각각 Master/Backup 서버로 구성하고, Master 서버의 HAProxy 프로세스를 종료하면 Backup 서버가 Master 서버로 전환되어 응답하는것을 확인했습니다.
이러한 Master-Backup 구성을 통해 서비스의 단일 장애점(SPOF)을 제거하고, 연속성을 보장할 수 있습니다.
추가 질문, 궁금한 점이 있으시거나 HAProxy, Keepalived를 통한 소프트웨어 로드 밸런서를 고가용성 구성하고 싶으시다면 언제든지 NGINX STORE를 통해 문의해 보세요.
댓글을 달려면 로그인해야 합니다.