NGINX HA (High Availability) 구성하기

웹 사이트와 애플리케이션이 항상 온라인 상태이어야 한다는 것은 오늘날 항상 연결된 사회에서 누구나 알고 있는 사실입니다. NGINX와 NGINX Plus가 항상 도움이 되었습니다. 애플리케이션 서버의 리버스 프록시 및 로드 밸런서로 NGINX Plus를 배포하는 주요 장점 중 하나는 애플리케이션 가용성과 신뢰성이 높아진다는 것이며, NGINX Plus 자체에 고가용성(HA)을 추가함으로써 애플리케이션과 웹 사이트 성능을 더욱 개선할 수 있습니다.

NGINX Plus 릴리스 6(R6)에서부터 새로운 솔루션을 소개했습니다. 이 솔루션은 NGINX Plus 인스턴스를 active-passive HA(고가용성) 구성으로 빠르고 쉽게 배포할 수 있게 해줍니다. 이 솔루션은 오픈 소스 keepalived 프로젝트를 기반으로 하며, Linux 시스템에 대한 HA 솔루션을 제공하기 위해 세 가지 구성 요소를 결합합니다. 그 구성 요소는 keepalived 데몬, HA 쌍에 대한 가상 IP 주소 할당을 관리하는 가상 라우터 장애 조치 프로토콜(VRRP)의 구현, 그리고 서비스(예: 웹 서버, PHP 백엔드, NGINX Plus 등)가 작동하는지 확인하는 health check 기능입니다.

목차

1. NGINX HA(High Availability)는 어떻게 작동하나요?
2. HA용 NGINX Plus 구성
3. keepalived 구성 스크립트
4. NGINX HA 관련 자료

1. NGINX HA(High Availability)는 어떻게 작동하나요?

기본 설정을 기반으로 하면(아래의 HA용 NGINX Plus 구성하는 방법 참조), keepalived는 하나의 NGINX Plus 노드를 (active) 주 노드로 지정하고 다른 하나를 (passive) 백업으로 지정합니다. 각 노드는 고유한 IP 주소를 갖고, 주 노드는 가상 IP 주소를 할당받습니다. 이 가상 IP 주소는 Domain Name System(DNS)에서 클라이언트에게 공개됩니다. 운영 중에 VRRP와 health check 기능은 노드와 NGINX Plus의 동작을 모니터링하여, 주 노드에 장애가 발생하면 가상 IP 주소를 백업으로 재할당할 수 있도록 합니다:

  • 백업 노드의 VRRP 인스턴스는 기본 노드의 피어에서 광고 패킷을 수신합니다. 설정된 광고 간격의 3배 이상 광고 패킷을 수신하지 않으면 기본으로 인계하고 가상 IP 주소를 자신에게 할당합니다.
  • 기본 노드에서 NGINX Plus의 health check이 구성된 횟수만큼 실패하면 keepalived는 가상 IP 주소를 기본 노드에서 백업 노드로 재할당합니다.

2. HA용 NGINX Plus 구성

HA용 NGINX Plus 노드의 active-passive 쌍을 구성하려면 두 노드에서 다음 단계를 수행하십시오.

1. NGINX Plus 리포지토리에서 운영체제에 대한 지침에 따라 NGINX Plus R6 기본 패키지(nginx-plus)를 설치하거나 업그레이드합니다.
2. 운영체제의 NGINX Plus 리포지토리에 지정된 설치 명령을 사용하여 Ubuntu에 대한 다음 예제와 같이 nginx-plusnginx-ha-keepalived로 대체하여 nginx-ha-keepalived 패키지를 설치합니다.

root# apt-get install nginx-ha-keepalived

3. 다음 단계에서 실행할 nginx-ha-setup 스크립트에서 메시지가 표시되면 제공할 다음 정보를 수집합니다.

  • 두 노드의 물리적 IP 주소.
  • 초기에 기본 노드에 할당되는 가상 IP 주소입니다. 스크립트는 이를 “클러스터 IP 주소(또는 엔드포인트)”라고 합니다. 두 노드의 실제 IP 주소가 아니어야 합니다.

4. nginx-ha-setup 스크립트를 실행합니다(nginx-ha-keepalived 패키지에서 /usr/bin으로 설치됨).

root# nginx-ha-setup

병렬 터미널 창에서 동시에 두 노드에서 스크립트를 실행하여 다음 단계로 진행하기 전에 두 노드에서 각 단계를 수행하는 것이 좋습니다. 또한 세션 연결이 끊어져도 설치를 계속할 수 있도록 Linux screen(1) 명령을 사용하여 터미널 창을 시작하는 것이 좋습니다.

3. keepalived 구성 스크립트

각 노드에서 nginx-ha-setup 스크립트가 실행되면 지역적인 keepalived 구성 파일인 /etc/keepalived/keepalived.conf가 생성됩니다. 이 파일은 Step 3에서 제공한 값들을 포함하고 있습니다. 다음은 IP 주소가 192.168.100.100인 노드에서 생성된 예시입니다(다른 노드의 주소는 192.168.100.101이며 가상 IP 주소는 192.168.100.150입니다). 주의할 점은 이 구성이 NGINX Plus 구성과 유사해 보이지만 실제로는 다른 점이 있습니다. 예를 들어 디렉티브를 구분하는 데 세미콜론을 사용하지 않습니다.

vrrp_script chk_nginx_service {
    script "/usr/libexec/keepalived/nginx-ha-check"
    interval 3
    weight 50
}
 
vrrp_instance VI_1 {
    interface eth0
    state BACKUP
    priority 101
    virtual_router_id 51
    advert_int 1
    unicast_src_ip 192.168.100.100
    unicast_peer {
        192.168.100.101
    }
    authentication {
        auth_type PASS
        auth_pass f8f0e5114cbe031a3e1e622daf18f82a
    }
    virtual_ipaddress {
        192.168.100.150
    }
    track_script {
        chk_nginx_service
    }
    notify "/usr/libexec/keepalived/nginx-ha-notify"
}

모든 디렉티브의 목적을 설명하는 것은 이 포스트의 범위를 벗어나지만 몇 가지 유의할 사항이 있습니다.

  • 파일에는 두 가지 기본 구성 블록이 있습니다.
    • vrrp_script 블록은 NGINX Plus가 작동하는지 여부를 확인하는 스크립트를 실행하도록 health check 기능을 구성합니다.

      nginx-ha-check 스크립트는 nginx-ha-keepalived 패키지에서 표시된 디렉토리에 자동으로 설치되며 운영체제에 따라 다릅니다.

      interval 지시문은 스크립트가 실행되는 빈도를 초 단위로 설정합니다.
    • vrrp_instance 블록은 이 노드에서 VRRP 인스턴스를 구성합니다.

      제공하는 IP 주소는 unicast_src_ip(로컬 노드), unicast_peer(다른 노드) 및 virtual_ipaddress(기본 노드에 할당된 가상 IP 주소)의 세 가지 지시문 값으로 기록됩니다.

      advert_int 지시문은 기본 노드의 VRRP 인스턴스가 백업 노드의 피어에 광고를 보내는 빈도(초)를 제어합니다.

      virtual_router_id 지시문의 값 51은 샘플 값입니다. 필요에 따라 환경에서 고유하도록 변경합니다(VRRP를 사용하여 여러 서비스에 HA를 제공하는 경우 관련이 있음).
  • vrrp_script 블록의 가중치 지시어와 vrrp_instance 블록의 우선 순위 지시어는 함께 어떤 노드가 기본 노드가 될지 결정하는 데 사용됩니다. 자세한 내용은 NGINX Plus 관리자 가이드 문서에서 health check 스크립트를 사용하여 기본 노드 제어를 참조하십시오.
  • 로컬 네트워크에서 여러 쌍의 keepalived 인스턴스(또는 다른 VRRP 인스턴스)가 실행 중인 경우 고유한 이름(예: 예의 VI_1) 및 virtual_router_id 번호를 사용하여 각 쌍에 대해 vrrp_instance 블록을 만듭니다.

    마찬가지로 keepalived를 사용하여 다른 서비스에 HA를 제공하는 경우 각 서비스에 대해 별도의 health check 스크립트와 vrrp_script 블록을 생성해야 합니다.

4. NGINX HA 관련 자료

HA 솔루션에 대한 자세한 내용은 NGINX Plus 관리자 가이드를 참조하세요. 어떤 노드가 기본인지 확인하고, 역할을 강제로 변경하고, 가상 IP 주소를 수동으로 재할당하고, 연결 유지 및 VRRP 문제를 해결하고, 더 많은 가상 IP 주소를 추가하는 방법을 설명합니다. 또한 보다 복잡한 HA 설정을 위한 샘플 구성 파일을 알려줍니다.

NGINX Plus를 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 문의하십시오.

아래 뉴스레터를 구독하고 NGINX의 최신 정보들을 빠르게 전달받아보세요.