SMALL
전체 구성 요약
| 구분 | 서버 | 역할 | IP |
| MASTER | seo0lee1 | HAProxy + Keepalived (active) | 192.168.0.18 |
| BACKUP | seo0lee2 | HAProxy + Keepalived (standby) | 192.168.3.65 |
| WEB1 | seo0lee3 | Nginx | 192.168.0.234 |
| WEB2 | seo0lee4 | Nginx | 192.168.1.231 |
| VIP | - | Virtual IP | 192.168.200.16 |
1단계. NGINX 웹 서버 설치 (seo0lee3, seo0lee4)
목적
- 실제 서비스 페이지를 제공할 웹 서버
- HAProxy는 이 두 대를 backend로 load balancing
1️⃣ Nginx 설치
sudo dnf install -y nginx
오류 시:
- dnf: Failed to download metadata → 외부 통신 안됨 → ping 8.8.8.8으로 네트워크 확인
- systemctl status network로 네트워크 활성화 확인
2️⃣ Nginx 서비스 시작 및 부팅 시 자동 실행
sudo systemctl enable --now nginx
sudo systemctl status nginx
정상 시 출력:
Active: active (running)
3️⃣ 테스트 페이지 수정
echo "<h1>WEB1 (192.168.0.234)</h1>" | sudo tee /usr/share/nginx/html/index.html
(두 번째 서버는 IP만 다르게)
echo "<h1>WEB2 (192.168.1.231)</h1>" | sudo tee /usr/share/nginx/html/index.html
4️⃣ 브라우저 테스트
- http://192.168.0.234 → "WEB1"
- http://192.168.1.231 → "WEB2"
안 뜰 경우:
- sudo firewall-cmd --permanent --add-service=http
- sudo systemctl restart firewalld
- sudo firewall-cmd --reload
2단계. HAProxy 설치 (seo0lee1, seo0lee2)
1️⃣ 설치
sudo dnf install -y haproxy
2️⃣ 설정 파일 수정
경로: /etc/haproxy/haproxy.cfg
sudo nano /etc/haproxy/haproxy.cfg
아래 내용으로 변경 (기본 내용 삭제 후 교체):
global
log /dev/log local0
log /dev/log local1 notice
daemon
maxconn 4000
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin
server web1 192.168.0.234:80 check
server web2 192.168.1.231:80 check
listen stats
bind *:9000
stats enable
stats uri /stats
stats refresh 5s
3️⃣ 구문 오류 확인
sudo haproxy -f /etc/haproxy/haproxy.cfg -c
정상 시:
Configuration file is valid
4️⃣ 실행 및 부팅 등록
sudo systemctl enable --now haproxy
sudo systemctl status haproxy
5️⃣ 테스트
브라우저에서 → http://192.168.0.18 (또는 seo0lee2 IP)
- 새로고침 시 WEB1 / WEB2 번갈아 표시되면 정상
안될 때 확인:
- sudo ss -tulnp | grep 80 → HAProxy가 80포트 LISTEN 중인지
- sudo tail -f /var/log/haproxy.log → 백엔드 연결 실패 로그 확인
- firewall-cmd --list-all 에서 http 서비스 추가 여부 확인
3단계. Keepalived 설치 및 VIP 설정
이제 두 대의 HAProxy 서버를 이중화합니다.
1️⃣ 설치
(두 서버 모두)
sudo dnf install -y keepalived
2️⃣ 설정 파일 경로
sudo nano /etc/keepalived/keepalived.conf
MASTER 서버 설정 (seo0lee1)
vrrp_instance VI_1 {
state MASTER
interface enX0 # 실제 네트워크 인터페이스명
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16/22 dev enX0 label enX0:1
}
}
BACKUP 서버 설정 (seo0lee2)
vrrp_instance VI_1 {
state BACKUP
interface enX0 # 실제 네트워크 인터페이스명
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.200.16/22 dev enX0 label enX0:1
}
}
3️⃣ 서비스 시작
sudo systemctl enable --now keepalived
sudo systemctl status keepalived
4️⃣ VIP 확인 (MASTER)
ip addr | grep 192.168.200
정상 시:
inet 192.168.200.16/22 scope global enX0:1
BACKUP에서는 아무것도 안나와야 정상.
5️⃣ 장애 전환 테스트
MASTER에서 Keepalived 중지:
sudo systemctl stop keepalived
이제 BACKUP에서 확인:
ip addr | grep 192.168.200
→ VIP가 BACKUP으로 옮겨오면 성공 🎉
MASTER를 다시 시작하면 VIP가 돌아감.
4단계. 최종 테스트
1️⃣ 클라이언트에서 VIP로 접속
curl -i <http://192.168.200.16>

- nginx가 번갈아서 나오며 성공 🎉
2️⃣ 장애 전환 테스트
MASTER에서 Keepalived 중지:
sudo systemctl stop keepalived

이제 BACKUP에서 확인:
ip addr | grep 192.168.200

→ VIP가 BACKUP으로 옮겨오면 성공 🎉
MASTER를 다시 시작하면 VIP가 돌아감.
'로드밸런싱' 카테고리의 다른 글
| Keepalived 이중화 실습 (RHEL 기준, 서버 1대) (0) | 2025.10.28 |
|---|---|
| Keepalived를 이용한 이중화 이론 (0) | 2025.10.28 |
| HAProxy를 활용한 Load Balancing 이론 정리 (0) | 2025.10.27 |
| HAProxy (0) | 2025.10.24 |