서버 설정 · 6 min read · Nov 29, 2025

Nginx 고가용성 설정하기: Pacemaker, Corosync, Crmsh를 사용한 Ubuntu 16.04에서의 단계별 가이드

이 튜토리얼에서는 Pacemaker, Corosync 및 Crmsh를 사용하여 고가용성 클러스터 Nginx 웹 서버를 만드는 방법을 단계별로 보여드리겠습니다. Ubuntu 16.04에서 Pacemaker를 사용하여 Active-Passive 클러스터 또는 Failover 클러스터 Nginx 웹 서버를 생성할 것입니다.

Pacemaker는 서비스의 최대 고가용성을 달성하는 오픈 소스 클러스터 관리 소프트웨어입니다. 2007년부터 ClusterLabs에 의해 개발된 고급 및 확장 가능한 HA 클러스터 관리자입니다.

Corosync 클러스터 엔진은 2008년 OpenAIS 프로젝트에서 파생된 오픈 소스 프로젝트로 BSD 라이선스 하에 배포됩니다. 이는 애플리케이션 내에서 고가용성을 구현하기 위한 추가 기능을 갖춘 그룹 통신 시스템입니다.

Pacemaker 인터페이스를 위한 여러 응용 프로그램이 있으며, Crmsh는 그 중 하나입니다. 이는 Pacemaker 고가용성 스택을 관리하기 위한 Pacemaker 명령줄 인터페이스입니다. Crmsh는 파이썬으로 작성되었습니다. Crmsh 명령줄 도구를 사용하여 Pacemaker HA 스택을 생성, 구성 및 문제 해결할 수 있습니다.

전제 조건

  • 세 대의 Ubuntu 16.04 서버 - web01 10.0.15.11
  • web02 10.0.15.12
  • web03 10.0.15.13
  • 플로팅 IP 주소 10.0.15.15
  • 루트 권한

우리가 할 일

  1. 호스트 파일 매핑.
  2. Nginx 설치 및 구성.
  3. Pacemaker, Corosync 및 Crmsh 설치.
  4. Corosync 키 구성.
  5. 모든 서비스 시작.
  6. 클러스터 생성 및 구성.
  7. 테스트.

1단계 - 호스트 파일 매핑

참고:
1단계 - 3단계를 모든 서버 ‘web01’, ‘web02’, ‘web03’에서 실행합니다.

이 튜토리얼에서는 3개의 Ubuntu 16.04 서버를 사용하며 각 서버는 고유한 호스트 이름을 가지고 있습니다: ‘web01’, ‘web02’ 및 ‘web03’. 각 서버는 다른 서버의 호스트 이름으로 서로 연결할 수 있습니다.

이를 달성하기 위해 모든 서버에서 vim을 사용하여 ‘/etc/hosts’ 파일을 편집합니다.

vim /etc/hosts

아래의 /etc/hosts 구성을 붙여넣습니다.

10.0.15.11      web01  
10.0.15.12      web02  
10.0.15.13      web03  
10.0.15.15      ha-web.co

파일을 저장하고 vim을 종료합니다.

다음으로, 각 호스트 이름을 통해 다른 서버에 ping을 보내 모든 서버를 테스트합니다.

ping -c 3 web01  
ping -c 3 web02  
ping -c 3 web03

모든 서버에 ping

2단계 - Nginx 설치 및 구성

이제 Pacemaker로 Failover 클러스터를 생성하여 Nginx 웹 서버의 고가용성 설정을 시작합니다. 먼저 각 서버 노드에 Nginx를 설치해야 합니다.

아래의 apt 명령어로 Nginx를 설치합니다.

apt install -y nginx

설치가 완료되면, 각 서버에서 고유한 페이지로 nginx의 기본 페이지를 교체하기 위해 아래의 명령어를 실행합니다.

# 'web01'에서 명령 실행  
echo '

web01 - hakase-labs

' > /var/www/html/index.html # 'web02'에서 명령 실행 echo '

web02 - hakase-labs

' > /var/www/html/index.html # 'web03'에서 명령 실행 echo '

web03 - hakase-labs

' > /var/www/html/index.html

이제 웹 서버를 중지합니다.

systemctl stop nginx

Nginx 설치 및 구성이 완료되었습니다.

Ubuntu 16.04에서 Nginx 설치 및 구성

3단계 - Pacemaker, Corosync 및 Crmsh 설치

Pacemaker는 오픈 소스 클러스터 관리 앱입니다. Corosync는 Pacemaker를 위한 클러스터 엔진이며, Crmsh는 Pacemaker 클러스터를 관리하기 위한 파이썬 기반 도구입니다. 이 모든 응용 프로그램은 Ubuntu 저장소에서 사용할 수 있습니다.

아래의 apt 명령어로 Pacemaker, Corosync 및 crmsh를 설치합니다.

apt install -y pacemaker corosync crmsh

설치 후, 이 모든 서비스는 시스템에서 자동으로 실행됩니다. 아래의 systemctl 명령어로 중지합니다.

systemctl stop corosync  
systemctl stop pacemaker

Nginx에 대한 고가용성을 제공하는 소프트웨어 스택이 설치되었습니다.

Ubuntu 16.04에서 Pacemaker, Corosync 및 Crmsh 설치

4단계 - Corosync 구성

참고:
4단계는 ‘web01’ 서버에서만 실행합니다.

우리는 Ubuntu에서 pcsd를 사용하지 않기 때문에 Corosync를 수동으로 구성해야 합니다. 클러스터 인증을 위한 Corosync 키를 생성하고 ‘web01’ 서버에 새로운 Corosync 구성 파일을 생성한 후, 키와 구성을 다른 서버 ‘web02’ 및 ‘web03’으로 복사합니다.

Corosync 키를 생성하기 전에, 새로운 패키지 ‘haveged’를 설치해야 합니다. 이는 Corosync 키 생성을 위한 더 나은 난수를 얻기 위해 사용됩니다.

apt 명령어로 저장소에서 haveged를 설치합니다.

apt install -y haveged

이제 아래의 명령어로 새로운 Corosync 키를 생성합니다.

corosync-keygen

키 생성이 완료되면, ‘/etc/corosync/‘ 디렉토리에서 새로운 키 ‘authkey’를 확인할 수 있습니다.

ls -lah /etc/corosync/

Corosync 키 생성

다음으로, ‘/etc/corosync’ 디렉토리로 이동하여 기본 구성 파일 ‘corosync.conf’를 백업합니다.

cd /etc/corosync/  
mv corosync.conf corosync.conf.bekup

그런 다음 vim을 사용하여 새로운 ‘corosync.conf’ 구성 파일을 생성합니다.

vim corosync.conf

아래의 구성을 파일에 붙여넣습니다.

# 토템 프로토콜 구성  
totem {  
  version: 2  
  cluster_name: hakase-cluster  
  transport: udpu  
   
# Corosync를 위한 인터페이스 구성  
  interface {  
    ringnumber: 0  
    bindnetaddr: 10.0.15.0  
    broadcast: yes  
    mcastport: 5407  
  }  
}  
   
# 노드 리스트 - 서버 리스트  
nodelist {  
  node {  
    ring0_addr: web01  
  }  
  node {  
    ring0_addr: web02  
  }  
  node {  
    ring0_addr: web03  
  }  
}  
   
# 쿼럼 구성  
quorum {  
  provider: corosync_votequorum  
}  
   
# Corosync 로그 구성  
logging {  
  to_logfile: yes  
  logfile: /var/log/corosync/corosync.log  
  to_syslog: yes  
  timestamp: on  
}  
   
service {  
  name: pacemaker  
  ver: 0  
}

파일을 저장하고 편집기를 종료합니다.

다음으로, ‘web01’ 서버에서 인증 키와 구성 파일을 ‘web02’ 및 ‘web03’ 서버로 복사합니다.

scp /etc/corosync/* root@web02:/etc/corosync/  
scp /etc/corosync/* root@web03:/etc/corosync/

web01 노드에서 다른 노드로 Corosync 구성 복사

모든 작업이 완료되면, ‘web02’ 및 ‘web03’ 서버로 이동하여 파일을 확인합니다.

ssh root@web02  
cd /etc/corosync/  
ls -lah

web02 노드의 Corosync 구성

Corosync 구성이 완료되었습니다.

5단계 - 모든 클러스터 서비스 시작

참고:
5단계는 모든 서버에서 실행합니다.

모든 서버에서 HA 클러스터 소프트웨어 스택인 pacemaker와 corosync를 시작합니다. 그런 다음 부팅 시 자동으로 시작되도록 설정합니다.

Corosync를 시작하고 부팅 시 자동으로 시작되도록 추가합니다.

systemctl start corosync  
systemctl enable corosync

이제 pacemaker를 시작하고 부팅 시 시작되도록 설정합니다.

systemctl start pacemaker  
update-rc.d pacemaker defaults 20 01  
systemctl enable pacemaker

모든 서비스가 시작되었으며, 모든 노드의 서버 상태가 ‘온라인’인지 확인합니다.

crm status

클러스터 노드 상태

또는 아래의 corosync-cmapctl 명령어로 Corosync 멤버의 상태를 확인할 수 있습니다.

corosync-cmapctl | grep members

모든 서버 IP 주소를 확인할 수 있습니다.

Corosync 멤버 목록

6단계 - 클러스터 생성 및 구성

참고:
6단계는 web01 서버에서만 실행합니다.

이 단계에서는 crmsh 명령줄 도구를 사용하여 Active-Passive Nginx 클러스터를 구성합니다. STONITH 장치를 사용하지 않기 때문에 STONITH를 비활성화하고 클러스터에서 쿼럼 정책을 무시하려고 합니다.

아래의 crm 명령어를 실행하여 ‘STONITH’를 비활성화하고 쿼럼 정책을 무시합니다.

crm configure property stonith-enabled=false  
crm configure property no-quorum-policy=ignore

이제 아래의 crm 명령어로 STONITH 상태와 쿼럼 정책을 확인합니다.

crm configure show

아래와 같은 결과를 볼 수 있습니다.

STONITH 비활성화 및 쿼럼 정책 무시

다음으로, 클러스터를 위한 새로운 리소스를 생성해야 합니다. Pacemaker는 다음과 같은 리소스 에이전트(RA) 유형을 지원합니다.

  • LSB (Linux Standard Based) - 리눅스 배포판에서 제공. 예: ‘/etc/init.d/service’ 스크립트.
  • OCF (Open Cluster Framework) - 클러스터 컴퓨팅을 위한 도구 세트. 이 프로젝트는 리눅스 재단의 일부입니다.

Nginx HA 웹 서버를 위해 플로팅 IP를 위한 ‘virtual_ip’와 nginx 서비스를 위한 ‘webserver’ 두 개의 OCF 리소스를 생성해야 합니다.

아래의 crm 명령어로 플로팅 IP 구성에 대한 새로운 ‘virtual_ip’ 리소스를 생성합니다.

sudo crm configure primitive virtual_ip \  
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \  
cidr_netmask="32" op monitor interval="10s" \  
meta migration-threshold="10"

nginx ‘webserver’에 대해서는 아래의 명령어로 리소스를 생성합니다.

sudo crm configure primitive webserver \  
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \  
op start timeout="40s" interval="0" \  
op stop timeout="60s" interval="0" \  
op monitor interval="10s" timeout="60s" \  
meta migration-threshold="10"

이 작업이 완료되면, 아래의 명령어로 새로운 리소스 ‘virtual_ip’와 ‘webserver’를 확인합니다. 모든 리소스의 상태가 ‘시작됨’인지 확인합니다.

crm resource status

클러스터에 새로운 Virtual_ip 및 Webserver 리소스 추가

마지막으로, Failover IP 서비스의 새로운 구성을 위한 그룹을 추가해야 합니다. ‘virtual_ip’ 리소스의 플로팅 IP와 ‘webserver’ 리소스의 ‘Nginx’ 서비스를 마이그레이션하려고 합니다.

우리는 이미 플로팅 IP와 서비스를 생성했으므로, 아래의 명령어로 이 리소스들을 ‘hakase_balancing’이라는 새로운 그룹에 추가합니다. 물론 여기서 자신의 그룹 이름을 선택할 수 있으며, 사용되는 곳마다 이름을 바꾸는 것을 잊지 마세요.

sudo crm configure group hakase_balancing virtual_ip webserver

‘hakase_balancing’이라는 이름의 새로운 리소스 그룹이 정의되었습니다. 아래의 명령어로 확인할 수 있습니다.

crm resource show

‘hakase_balancing’이라는 그룹과 ‘virtual_ip’ 및 ‘webserver’ 리소스가 포함된 것을 확인할 수 있습니다.

클러스터를 위한 새로운 그룹 리소스 추가

클러스터 구성이 완료되었습니다.

7단계 - 테스트

노드 상태와 클러스터 상태를 테스트합니다.

crm status

클러스터 노드 상태 및 리소스 상태

우리는 ‘온라인’ 상태의 3개의 노드를 가지고 있습니다.

‘hakase_balancing’이라는 리소스 그룹이 있으며, 현재 ‘web01’ 노드에서 실행되고 있습니다.

웹 브라우저에서 Nginx 웹 서버를 테스트합니다. 플로팅 IP 주소를 방문합니다. 내 테스트 서버의 이름은 - ha-web.co입니다. 여기서 선택한 서버 이름을 사용하세요.

모든 리소스가 ‘web01’ 노드에 있습니다.

Active-Passive 클러스터 또는 Failover 테스트

‘web01’ 서버에서 아래의 명령어를 실행하여 클러스터를 중지합니다.

crm cluster stop

INFO: 클러스터 서비스가 중지되었습니다 ‘라는 결과를 얻을 수 있습니다.

이제 ‘web02’ 노드에 로그인하여 클러스터 상태를 확인합니다.

crm status

Ubuntu 16.04에서 Nginx 고가용성 클러스터

이제 ‘web01’ 노드가 ‘오프라인’ 상태이며, virtual_ip 및 webserver 리소스가 ‘web02’ 노드로 전환된 결과를 얻을 수 있습니다.

플로팅 IP ‘ ha-web.co ‘를 다시 방문하면 web02 페이지를 확인할 수 있습니다.

Ubuntu 16.04에서 Pacemaker, Corosync 및 Crmsh를 사용한 Nginx 고가용성이 성공적으로 설치되고 테스트되었습니다.

참고

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.