Keepalived와 HAProxy로 고가용성 설정하기

2–3분

이 튜토리얼에서는 KeepalivedHAProxy를 사용하여 애플리케이션의 고가용성과 로드 밸런싱을 설정하는 방법을 설명합니다. 이 설정을 통해 장애 조치 메커니즘을 구현하고 여러 서버에 걸쳐 들어오는 트래픽을 분산시킬 수 있습니다.

환경은 Rocky 9.4에서 진행 했습니다.

1단계: 방화벽 및 SELinux 비활성화

먼저 방화벽을 비활성화하고 SELinux를 허용 모드로 설정합니다:

systemctl disable firewalld --now
setenforce 0

2단계: Keepalived 설치

장애 조치 프로세스를 관리할 Keepalived를 설치합니다:

sudo dnf install keepalived -y

비로컬 바인딩을 활성화합니다:

echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.confsysctl -p

3단계: Keepalived 구성

마스터 서버 설정:

keepalived.conf 파일을 생성하고 구성합니다:

bash코드 복사
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

cat << EOF > /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy {
    script "pidof haproxy"   # HAProxy 프로세스 확인
    interval 2               # 체크 간격 (초)
    weight 2
}

vrrp_instance VI_1 {
    interface ens18          # 네트워크 인터페이스 이름
    state MASTER             # 이 서버를 MASTER로 설정
    virtual_router_id 51     # VRRP 그룹 ID (모든 노드에서 동일)
    priority 101             # 우선순위 (MASTER가 BACKUP보다 높아야 함)
    advert_int 1             # 광고 간격 (초)

    authentication {
        auth_type PASS
        auth_pass cloud1234  # 인증 암호
    }

    virtual_ipaddress {
        192.168.135.80       # 가상 IP 주소
    }

    track_script {
        chk_haproxy          # HAProxy 상태 체크 스크립트
    }

    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
EOF

백업 서버 설정:

백업 서버에도 동일한 설정 파일을 만드는데, statepriority만 다릅니다.

bash코드 복사
cat << EOF > /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy {
    script "pidof haproxy"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    interface ens18
    state BACKUP               # 이 서버를 BACKUP으로 설정
    virtual_router_id 51
    priority 100               # 우선순위 (MASTER보다 낮게 설정)
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass cloud1234
    }

    virtual_ipaddress {
        192.168.135.80
    }

    track_script {
        chk_haproxy
    }

    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}
EOF

4단계: 알림 스크립트 설정

장애 조치 시 실행될 알림 스크립트를 만듭니다:

bash코드 복사
cat <<EOF > /etc/keepalived/notify.sh
#!/bin/bash

TYPE="\$1"

case \$TYPE in
    master)
        systemctl restart haproxy
        ;;
    backup)
        systemctl restart haproxy
        ;;
    fault)
        systemctl stop haproxy
        ;;
    *)
        echo "Usage: \$0 {master|backup|fault}"
        exit 1
        ;;
esac
EOF

sudo chmod +x /etc/keepalived/notify.sh

keepalived 서비스를 활성화하고 시작합니다:

systemctl enable keepalived --no

5단계: HAProxy 설치 및 구성

HAProxy를 설치합니다:

sudo dnf install haproxy -y

기존 구성 파일을 백업하고 새 구성 파일을 생성합니다:

mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

cat << EOF > /etc/haproxy/haproxy.cfg
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s

defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend main
    bind 192.168.135.80:80
    default_backend app_servers

backend app_servers
    balance roundrobin
    server server1 192.168.135.81:80 check
    server server2 192.168.135.82:80 check
EOF

HAProxy 서비스를 활성화하고 시작합니다:

systemctl enable haproxy --now

이제 Keepalived와 HAProxy를 통해 고가용성 및 로드 밸런싱이 설정되었습니다. 각 서버의 상태를 지속적으로 모니터링하고 장애 발생 시 자동으로 전환됩니다.


이 글이 여러분의 시스템 설정에 도움이 되길 바랍니다!