Ubuntu에서 Keepalived와 Nginx를 활용한 고가용성 구성 - Keepalived 설정

1. 시스템 환경

Ubuntu 22.04 운영체제에 Keepalived 버전 2.2.4를 설치하며, 미리 구성된 Nginx 로드 밸런싱 클러스터 및 애플리케이션 서비스 클러스터를 기반으로 합니다. 이전 단계에서 이미 클러스터가 구축되어 있다면 해당 서버들 위에 Keepalived만 추가로 설치하면 됩니다. 관련 배포 가이드는 다음 링크를 참고하세요: 링크.

사용할 두 대의 서버 정보:

  • 10.53.207.11 (호스트명: ubuntu-two)
  • 10.53.207.12 (호스트명: ubuntu-three)

2. Keepalived 설치 및 기본 설정

각각의 서버에서 아래 명령어로 패키지를 설치합니다.

sudo apt install keepalived

시스템 부팅 시 자동 실행되도록 설정하려면 /etc/rc.local 파일(존재하지 않으면 생성)에 다음 내용을 추가합니다.

#!/bin/sh -e
service keepalived start &
exit 0

네트워크 인터페이스 이름 확인을 위해 다음 명령어를 실행합니다.

ifconfig

Keepalived 설정 파일을 편집하여 가상 IP 주소와 서비스 상태 점검 스크립트를 등록합니다. 가상 IP 주소는 10.53.207.20으로 지정합니다.

sudo nano /etc/keepalived/keepalived.conf

ubuntu-two (마스터 노드) 설정

global_defs {
   router_id 10.53.207.11
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx_status.sh"
    interval 2
}

vrrp_instance MAIN_ROUTER {
    state MASTER
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1369
    }
    virtual_ipaddress {
        10.53.207.20
    }
    track_script {
        check_nginx
    }
}

ubuntu-three (백업 노드) 설정

global_defs {
   router_id 10.53.207.12
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx_status.sh"
    interval 2
}

vrrp_instance MAIN_ROUTER {
    state BACKUP
    interface ens33
    virtual_router_id 100
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1369
    }
    virtual_ipaddress {
        10.53.207.20
    }
    track_script {
        check_nginx
    }
}

3. Nginx 상태 점검 스크립트 작성

두 서버 모두에서 다음 경로에 스크립트 파일을 생성합니다.

sudo nano /etc/keepalived/check_nginx_status.sh

스크립트 내용은 다음과 같습니다.

#!/bin/bash
PROCESS_COUNT=$(ps -C nginx --no-header | wc -l)

if [ $PROCESS_COUNT -eq 0 ]; then
    systemctl restart nginx
    sleep 2
    
    PROCESS_COUNT=$(ps -C nginx --no-header | wc -l)
    if [ $PROCESS_COUNT -eq 0 ]; then
        systemctl stop keepalived
    fi
fi

실행 권한을 부여합니다.

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

스크립트 동작 여부를 확인합니다.

cd /etc/keepalived
./check_nginx_status.sh

4. Keepalived 동작 검증

서비스를 재시작하고 상태를 확인합니다.

sudo systemctl restart keepalived
systemctl status keepalived

ubuntu-two 서버에서 IP 주소 목록을 확인하여 가상 IP가 정상적으로 할당되었는지 검사합니다.

ip addr show

웹 브라우저를 통해 가상 IP 주소(10.53.207.20)로 접속해보면 정상적으로 응답해야 합니다.

다음으로 ubuntu-two 서버의 Keepalived 서비스를 중지하고 각 서버의 IP 주소 목록을 다시 확인합니다.

sudo systemctl stop keepalived
ip addr show

결과는 다음과 같아야 합니다:

  • ubuntu-two: 가상 IP 주소가 사라짐
  • ubuntu-three: 이전에는 없던 가상 IP 주소가 나타남

브라우저를 통해 다시 가상 IP 주소로 접근하면 여전히 정상적으로 서비스가 제공되어야 합니다. 이는 가상 IP 주소의 성공적인 이전(Failover)을 의미하며, 고가용성 클러스터 구성이 완료되었음을 보여줍니다.

부록: Keepalived 설정 항목 설명

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id 192.168.229.128
   vrrp_skip_check_adv_addr 
   vrrp_iptables
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx_status.sh"
    interval 2
}

vrrp_instance MAIN_ROUTER {
    state MASTER
    interface ens33
    virtual_router_id 100
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.229.130
    }
    track_script {
        check_nginx
    }
}

태그: Keepalived nginx ubuntu high-availability vrrp

6월 21일 22:11에 게시됨