2 분 소요

단일 서버는 하드웨어 장애, 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가 VIP를 관리하는 이중화 구성

설정 적용 및 확인

# 설정 검증
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 등의 로드 밸런서와 함께 사용하면 완전한 고가용성 인프라를 구축할 수 있습니다.

댓글남기기