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
}
}