서버 설정 · 5 min read · Nov 08, 2025
CentOS 8에서 KeepAlived로 고가용성 NGINX 설정하는 방법

Nginx는 무료이며 오픈 소스인 세계에서 가장 인기 있는 웹 서버 중 하나입니다. 또한 리버스 프록시, 로드 밸런서 및 HTTP 캐시로도 사용될 수 있습니다. 고가용성은 애플리케이션이 실패 시 다른 시스템으로 작업을 재배치할 수 있게 해줍니다. 고가용성 시스템을 설정하기 위해 사용할 수 있는 다양한 기술이 있습니다.
Keepalived는 서비스나 시스템을 지속적으로 모니터링하고 실패 시 고가용성을 달성하는 시스템 데몬입니다. 하나의 노드가 다운되면 두 번째 노드가 리소스를 제공합니다.
이 튜토리얼에서는 CentOS 8에서 KeepAlived로 고가용성 Nginx 웹 서버를 설정하는 방법을 보여드리겠습니다.
전제 조건
- 마스터 노드용과 백업 노드용으로 CentOS 8을 실행하는 두 대의 서버.
- 서버에 루트 비밀번호가 설정되어 있어야 합니다.
두 노드에 Nginx 설치하기
먼저, 두 노드에 Nginx 패키지를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다:
dnf install nginx -y두 노드에 Nginx가 설치되면 Nginx 서비스를 시작하고 시스템 재부팅 시 자동으로 시작되도록 설정합니다:
systemctl start nginx
systemctl enable nginx작업이 완료되면 다음 단계로 진행할 수 있습니다.
두 노드에 index.html 파일 만들기
다음으로, 각 노드를 식별하기 위해 두 노드에 사용자 정의 index.html 파일을 만들어야 합니다.
첫 번째 노드에서 다음 명령어로 index.html 파일을 만듭니다:
echo "이것은 나의 첫 번째 NGINX 웹 서버 노드입니다.
" | tee /usr/share/nginx/html/index.html두 번째 노드에서 다음 명령어로 index.html 파일을 만듭니다:
echo "이것은 나의 두 번째 NGINX 웹 서버 노드입니다.
" | tee /usr/share/nginx/html/index.html작업이 완료되면 파일을 저장하고 닫습니다.
Keepalived 설치 및 구성
다음으로, 두 노드에 Keepalived를 설치해야 합니다. 기본적으로 Keepalived 패키지는 CentOS 8의 기본 리포지토리에 있습니다. 다음 명령어를 실행하여 설치할 수 있습니다:
dnf install keepalived -y두 노드에 keepalived 패키지가 설치되면 두 노드에서 keepalived 기본 구성 파일을 편집해야 합니다.
첫 번째 노드에서 keepalived.conf 파일을 편집합니다:
nano /etc/keepalived/keepalived.conf기본 내용을 제거하고 다음 내용을 추가합니다:
global_defs {
# Keepalived 프로세스 식별자
router_id nginx
}
# Nginx가 실행 중인지 확인하는 스크립트
vrrp_script check_nginx {
script "/bin/check_nginx.sh"
interval 2
weight 50
}
# 가상 인터페이스 - 우선 순위는 장애 조치 시 인수된 인터페이스가 인계받는 순서를 지정합니다.
vrrp_instance VI_01 {
state MASTER
interface eth0
virtual_router_id 151
priority 110
# 두 NGINX 웹 서버 간에 공유되는 가상 IP 주소
virtual_ipaddress {
192.168.1.10/24
}
track_script {
check_nginx
}
authentication {
auth_type AH
auth_pass secret
}
}
작업이 완료되면 파일을 저장하고 닫습니다.
두 번째 노드에서 keepalived.conf 파일을 편집합니다:
nano /etc/keepalived/keepalived.conf기본 내용을 제거하고 다음 내용을 추가합니다:
global_defs {
# Keepalived 프로세스 식별자
router_id nginx
}
# Nginx가 실행 중인지 확인하는 스크립트
vrrp_script check_nginx {
script "/bin/check_nginx.sh"
interval 2
weight 50
}
# 가상 인터페이스 - 우선 순위는 장애 조치 시 인수된 인터페이스가 인계받는 순서를 지정합니다.
vrrp_instance VI_01 {
state BACKUP
interface eth0
virtual_router_id 151
priority 100
# 두 NGINX 웹 서버 간에 공유되는 가상 IP 주소
virtual_ipaddress {
192.168.1.10/24
}
track_script {
check_nginx
}
authentication {
auth_type AH
auth_pass secret
}
}
작업이 완료되면 파일을 저장하고 닫은 후 Nginx 서비스가 실행 중인지 확인하는 스크립트를 만들어야 합니다. 다음 명령어를 사용하여 만들 수 있습니다:
참고: 위 구성 파일에서 MASTER를 BACKUP으로, 110을 100으로 교체했습니다.
nano /bin/check_nginx.sh다음 줄을 추가합니다:
#!/bin/sh
if [ -z "`pidof nginx`" ]; then
exit 1
fi
작업이 완료되면 파일을 저장하고 닫은 후 다음 명령어로 적절한 권한을 설정합니다:
chmod 755 /bin/check_nginx.sh마지막으로, keepalived 서비스를 시작하고 시스템 재부팅 시 자동으로 시작되도록 설정합니다:
systemctl start keepalived
systemctl enable keepalived다음 명령어를 사용하여 keepalived 서비스의 상태를 확인할 수도 있습니다:
systemctl status keepalived다음과 같은 출력을 받아야 합니다:
? keepalived.service - LVS 및 VRRP 고가용성 모니터
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-04-08 04:24:22 EDT; 5s ago
Process: 3141 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 3142 (keepalived)
Tasks: 2 (limit: 12524)
Memory: 2.1M
CGroup: /system.slice/keepalived.service
??3142 /usr/sbin/keepalived -D
??3143 /usr/sbin/keepalived -D
Apr 08 04:24:22 node1 Keepalived_vrrp[3143]: (VI_01) 효과적인 우선 순위를 110에서 160으로 변경
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) 광고 수신 시간 초과
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) MASTER STATE로 진입
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) VIP 설정 중.
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: eth0에서 192.168.1.10에 대한 무료 ARP 전송
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: (VI_01) eth0에서 192.168.1.10에 대한 무료 ARP 전송/대기 중
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: eth0에서 192.168.1.10에 대한 무료 ARP 전송
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: eth0에서 192.168.1.10에 대한 무료 ARP 전송
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: eth0에서 192.168.1.10에 대한 무료 ARP 전송
Apr 08 04:24:25 node1 Keepalived_vrrp[3143]: eth0에서 192.168.1.10에 대한 무료 ARP 전송
마스터 노드에서 다음 명령어를 사용하여 가상 IP 주소 상태를 확인할 수도 있습니다:
ip add show다음 출력에서 가상 IP 주소 192.168.1.10을 확인할 수 있어야 합니다:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:2d:3a:20:9b brd ff:ff:ff:ff:ff:ff
inet 45.58.32.155/24 brd 45.58.32.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.1.10/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::200:2dff:fe3a:209b/64 scope link
valid_lft forever preferred_lft forever
3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:0a:3a:20:9b brd ff:ff:ff:ff:ff:ff
inet6 fe80::200:aff:fe3a:209b/64 scope link
valid_lft forever preferred_lft forever
작업이 완료되면 다음 단계로 진행할 수 있습니다.
두 노드에서 방화벽 구성하기
다음으로, 두 노드에서 포트 80을 허용하고 VRRP를 허용해야 합니다. 다음 명령어를 사용하여 수행할 수 있습니다:
firebase-cmd --permanent --add-service=http
firebase-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent다음으로, 변경 사항을 적용하기 위해 firewalld를 다시 로드합니다:
firebase-cmd –reloadKeepalived 확인하기
이 시점에서 Nginx와 Keepalived가 설치되고 구성되었습니다. Nginx의 고가용성이 작동하는지 테스트할 시간입니다.
웹 브라우저를 열고 URL http://your-virtual-ip에 접속합니다. 다음 페이지가 표시되어야 합니다:

이제 마스터 노드에서 Nginx 서비스를 중지하고 가상 IP가 노드 1에서 노드 2로 전환되는지 테스트합니다.
마스터 노드에서 다음 명령어를 사용하여 Nginx 서비스를 중지합니다:
systemctl stop nginx다음으로, 노드 2에 로그인하고 다음 명령어를 사용하여 가상 IP를 확인합니다:
ip add show다음 출력에서 가상 IP를 확인할 수 있어야 합니다:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:2d:3a:26:37 brd ff:ff:ff:ff:ff:ff
inet 45.58.38.55/24 brd 45.58.38.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.1.10/24 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::200:2dff:fe3a:2637/64 scope link
valid_lft forever preferred_lft forever
3: eth1: mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:00:0a:3a:26:37 brd ff:ff:ff:ff:ff:ff
inet6 fe80::200:aff:fe3a:2637/64 scope link
valid_lft forever preferred_lft forever
이제 URL http://your-virtual-ip를 사용하여 Nginx 웹 서버에 접속합니다. 노드 2 페이지가 표시되어야 합니다:

결론
축하합니다! Keepalived로 고가용성 Nginx 서버를 성공적으로 설정했습니다. 이제 프로덕션 환경에서 고가용성 Nginx 서버를 설정할 수 있는 충분한 지식을 갖추었기를 바랍니다.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.