Keepalived로 구현하는 서버 고가용성(HA) 구성
단일 서버는 하드웨어 장애, OS 문제 등으로 언제든 다운될 수 있습니다. Keepalived는 VRRP(Virtual Router Redundancy Protocol)를 구현하여 장애 발생 시 트래픽을 자동으로 다른 서버로 전환하는 고가용성 솔루션입니다.
구성 개요
[클라이언트]
|
v
[Virtual IP: 192.168.1.100]
|
+---+---+
| |
[Master] [Backup]
192.168.1.10 192.168.1.11
- Master: 평상 시 VIP(가상 IP)를 보유하고 트래픽 처리
- Backup: Master 장애 시 VIP를 인계받아 서비스 계속
Keepalived 설치
# RHEL/Rocky Linux
dnf install keepalived -y
# Ubuntu/Debian
apt install keepalived -y
# 서비스 활성화
systemctl enable keepalived
Master 서버 설정
# /etc/keepalived/keepalived.conf (Master: 192.168.1.10)
global_defs {
router_id LVS_MASTER
# VRRP 스크립트 실행 간격
vrrp_garp_interval 0
vrrp_gna_interval 0
}
# Nginx 헬스체크 스크립트
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx"
interval 2 # 2초마다 확인
weight -20 # 실패 시 우선순위 20 감소
fall 2 # 2번 연속 실패 시 다운으로 판단
rise 2 # 2번 연속 성공 시 복구로 판단
}
vrrp_instance VI_1 {
state MASTER # 초기 상태
interface ens3 # 감시할 네트워크 인터페이스
virtual_router_id 51 # VRRP 그룹 ID (0~255, Master/Backup 동일)
priority 100 # 우선순위 (Backup보다 높게)
advert_int 1 # VRRP 광고 간격 (초)
nopreempt # 복구 후 자동 Master 복귀 방지 (선택)
authentication {
auth_type PASS
auth_pass StrongPass123
}
virtual_ipaddress {
192.168.1.100/24 dev ens3 # 가상 IP
}
track_script {
chk_nginx
}
# 상태 변경 시 실행할 알림 스크립트
notify_master "/etc/keepalived/notify.sh MASTER"
notify_backup "/etc/keepalived/notify.sh BACKUP"
notify_fault "/etc/keepalived/notify.sh FAULT"
}
Backup 서버 설정
# /etc/keepalived/keepalived.conf (Backup: 192.168.1.11)
global_defs {
router_id LVS_BACKUP
}
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx"
interval 2
weight -20
fall 2
rise 2
}
vrrp_instance VI_1 {
state BACKUP # Backup 상태로 시작
interface ens3
virtual_router_id 51 # Master와 동일
priority 90 # Master보다 낮은 우선순위
advert_int 1
authentication {
auth_type PASS
auth_pass StrongPass123
}
virtual_ipaddress {
192.168.1.100/24 dev ens3
}
track_script {
chk_nginx
}
}
알림 스크립트
# /etc/keepalived/notify.sh
#!/bin/bash
STATE=$1
DATE=$(date +"%Y-%m-%d %H:%M:%S")
case $STATE in
MASTER)
echo "[$DATE] 이 서버가 MASTER가 되었습니다." >> /var/log/keepalived-notify.log
# 슬랙/이메일 알림 추가 가능
;;
BACKUP)
echo "[$DATE] 이 서버가 BACKUP 상태입니다." >> /var/log/keepalived-notify.log
;;
FAULT)
echo "[$DATE] FAULT 상태 감지!" >> /var/log/keepalived-notify.log
;;
esac
chmod +x /etc/keepalived/notify.sh
설정 적용 및 확인
# 설정 검증
keepalived --config-test
# 서비스 시작
systemctl start keepalived
# 상태 확인
systemctl status keepalived
# VIP 할당 확인 (Master 서버에서)
ip addr show ens3 | grep 192.168.1.100
# VRRP 패킷 모니터링
tcpdump -i ens3 vrrp
장애 조치 테스트
# Master에서 Nginx 중지 → Backup이 VIP 인계받는지 확인
systemctl stop nginx
# Backup 서버에서 VIP 확인
ip addr show ens3
# 클라이언트에서 VIP 지속 접근 테스트
ping 192.168.1.100
로그 확인
# 시스템 로그에서 VRRP 이벤트 확인
journalctl -u keepalived -f
# 또는
grep keepalived /var/log/messages
Keepalived는 간단한 설정만으로 서버 이중화를 구현할 수 있어 진입 장벽이 낮습니다. Nginx, HAProxy 등의 로드 밸런서와 함께 사용하면 완전한 고가용성 인프라를 구축할 수 있습니다.
댓글남기기