본문 바로가기
IT/Proxmox

[Proxmox] HA 클러스터 구축 및 트러블슈팅: 고가용성 완벽 가이드

by 수누다 2026. 5. 10.

서버 한 대가 죽어도 서비스는 살아있어야 한다

새벽 2시에 전화 받아본 적 있으신가요? "서비스가 안 된다"는 그 전화. 저는 인프라 엔지니어 생활 초반에 그 경험을 꽤 많이 했습니다. 물리 서버 한 대가 죽으면서 거기서 돌아가던 VM(가상 머신)들이 전부 같이 꺼져버리는 그 상황. 정말 식은땀 나거든요.

그때부터 고민하기 시작했습니다. "어떻게 하면 서버 한 대가 죽어도 서비스가 자동으로 다른 서버에서 살아날 수 있을까?" 그 답이 바로 Proxmox HA(High Availability, 고가용성) 클러스터입니다.

오늘은 제가 홈랩에서 직접 구축하면서 겪은 삽질들과 함께, Proxmox HA 클러스터를 처음부터 끝까지 완벽하게 셋업하는 방법을 공유해 드리려고 합니다. 트러블슈팅 경험도 솔직하게 담았으니 끝까지 읽어보시면 분명 도움이 될 거예요.

▲ Proxmox HA 클러스터의 전체 구성 아키텍처 — 3노드 구성과 쿼럼(Quorum), 공유 스토리지의 관계를 보여줍니다.

Proxmox HA가 뭔지 먼저 제대로 알고 가자

HA(고가용성)의 핵심 개념

쉽게 말해서, HA는 "어떤 노드(서버)가 죽어도 거기 있던 VM이나 컨테이너가 다른 노드에서 자동으로 다시 켜지는 것"입니다. 사람이 새벽에 일어나서 수동으로 VM을 다른 서버로 옮기지 않아도 되는 거죠.

Proxmox VE에서 HA를 구현하려면 크게 세 가지가 필요합니다.

  • 클러스터(Cluster): 여러 Proxmox 노드를 하나로 묶는 것. 최소 3개 노드 권장 (쿼럼 때문에 — 아래에서 설명)
  • 쿼럼(Quorum): 클러스터 내 다수결 투표 시스템. 과반수 노드가 살아있어야 클러스터가 정상 동작
  • 공유 스토리지(Shared Storage): 모든 노드가 같은 VM 디스크에 접근할 수 있어야 함 (Ceph, NFS, iSCSI 등)

왜 노드가 최소 3개여야 할까?

이게 처음엔 저도 이해가 안 됐었는데요. 노드 2개로 구성하면 한 노드가 죽었을 때 남은 노드가 "내가 살아있고 상대방이 죽은 건지, 아니면 네트워크가 끊겨서 서로 연결이 안 되는 건지" 판단을 못 합니다. 이걸 스플릿 브레인(Split-Brain) 상황이라고 하는데, 이 경우 양쪽 노드가 서로 자기가 주인이라고 착각해서 데이터 충돌이 생길 수 있거든요.

3개 노드면 2:1로 다수결이 가능하니까 "이 노드가 죽었다"는 판단을 명확하게 할 수 있습니다. 2노드로 구성할 수는 있지만 그러면 QDevice(외부 쿼럼 장치)가 추가로 필요해요.

구성 최소 생존 노드 장점 단점
2노드 2개 (QDevice 필요) 비용 절감 QDevice 추가 필요, 관리 복잡
3노드 2개 쿼럼 자체 해결, 안정적 서버 3대 필요
5노드 3개 최고 가용성 비용 높음

Proxmox HA 클러스터 구축 — 단계별 실전 가이드

사전 준비 사항

시작하기 전에 체크해야 할 것들이 있습니다. 저도 처음에 이 부분을 건너뛰었다가 나중에 다 뒤집어엎었던 기억이 있어서요. 꼭 확인하세요.

  • ✅ Proxmox VE가 설치된 서버 최소 3대
  • ✅ 모든 노드에서 시간 동기화(NTP) 설정 완료
  • ✅ 모든 노드 간 네트워크 통신 가능 (핑 테스트)
  • ✅ 각 노드의 호스트명이 고유하고 DNS/hosts 파일에 등록됨
  • ✅ 공유 스토리지 준비 (Ceph, NFS, iSCSI 중 선택)

Step 1: /etc/hosts 파일 설정

모든 노드에서 서로를 알아볼 수 있도록 hosts 파일을 설정합니다. DNS가 없는 환경이라면 특히 중요해요.

# 모든 노드에서 동일하게 설정 (/etc/hosts)
192.168.1.101  pve-node1  pve-node1.local
192.168.1.102  pve-node2  pve-node2.local
192.168.1.103  pve-node3  pve-node3.local

Step 2: 첫 번째 노드에서 클러스터 생성

pve-node1에서 클러스터를 만들어 줍니다. 클러스터 이름은 나중에 바꾸기 어려우니 신중하게 정하세요.

# pve-node1에서 실행
pvecm create my-ha-cluster

# 생성 확인
pvecm status

정상적으로 생성되면 이런 출력이 나옵니다.

Cluster information
------------------
Name:             my-ha-cluster
Config Version:   1
Transport:        knet
Secauth:          on

Quorum information
------------------
Date:             ...
Quorum provider:  corosync_votequorum
Nodes:            1
Node votes:       1
Expected votes:   1
Total votes:      1
Quorum:           1
Flags:            Quorate

Step 3: 나머지 노드를 클러스터에 참가시키기

pve-node2와 pve-node3에서 각각 실행합니다. 여기서 중요한 점은 기존 노드의 IP를 정확히 입력해야 한다는 거예요.

# pve-node2에서 실행
pvecm add 192.168.1.101

# 비밀번호 입력 후 참가 완료
# pve-node3에서도 동일하게 실행
pvecm add 192.168.1.101

참가 후 상태 확인:

pvecm status

# 출력 예시
Quorum information
------------------
Nodes:            3
Expected votes:   3
Total votes:      3
Quorum:           2  # 이 숫자가 핵심! 과반수

Step 4: 공유 스토리지 연결 (NFS 예시)

Proxmox HA가 동작하려면 VM 디스크가 공유 스토리지에 있어야 합니다. 여기서는 NFS를 예시로 들겠습니다. Ceph를 사용하신다면 별도 구성이 필요한데, 이건 나중에 별도 글로 다룰 예정이에요.

# 모든 노드에서 NFS 마운트 확인
showmount -e 192.168.1.200

# Proxmox Web UI에서도 추가 가능하지만 CLI로 하면:
# /etc/pve/storage.cfg에 추가됨 (클러스터 전체 공유)
pvesm add nfs shared-storage \
  --server 192.168.1.200 \
  --export /mnt/nfs/proxmox \
  --content images,iso,backup

▲ Proxmox Web UI의 HA 관리 화면 — HA 그룹 생성과 리소스 등록 과정을 보여줍니다.

Step 5: HA 그룹(HA Group) 생성

HA 그룹은 "이 VM들은 이 노드들에서만 돌아야 해"라는 규칙을 정의합니다. Web UI에서도 가능하지만 CLI가 더 직관적이더라고요.

# HA 그룹 생성
ha-manager groupadd production \
  --nodes pve-node1:2,pve-node2:1,pve-node3:1 \
  --restricted 0 \
  --nofailback 0

# 그룹 확인
ha-manager groupconfig production

여기서 숫자(2, 1, 1)는 우선순위(Priority)입니다. 숫자가 높을수록 해당 노드를 선호해요. 장애 복구 후 원래 노드로 돌아오는 Failback 기능도 설정 가능합니다.

Step 6: VM을 HA 리소스로 등록

이제 특정 VM을 HA 관리 대상으로 등록합니다. VM ID가 100번이라고 가정할게요.

# VM 100번을 HA 리소스로 추가
ha-manager add vm:100 \
  --group production \
  --max_restart 3 \
  --max_relocate 3

# 등록된 리소스 확인
ha-manager status
# 정상 등록 시 출력 예시
quorum OK
master pve-node1 (active, Wed Nov  1 10:00:00 2023)

Active HA resources:

  vm:100
           Status: started
           Node: pve-node1
           Managed: 1

🎉 여기까지 오면 기본 HA 설정은 완료입니다! 이제 테스트를 해볼 차례예요.

HA 동작 테스트 — 실제로 노드를 죽여보자

페일오버(Failover) 테스트

이 부분이 진짜 재미있습니다. 직접 노드를 강제로 다운시켜서 VM이 다른 노드로 이동하는지 확인해 보는 거거든요. 물론 프로덕션에서는 절대 이렇게 하시면 안 되고, 테스트 환경에서만요 ㅎㅎ

# 방법 1: 노드를 maintenance 모드로 전환 (안전한 방법)
ha-manager crm-command node-maintenance enable

# 방법 2: pve-node1에서 corosync 서비스 강제 중단 (더 극단적인 테스트)
systemctl stop corosync

# 다른 노드에서 HA 상태 확인
ha-manager status
watch -n 2 ha-manager status  # 2초마다 갱신하며 모니터링

정상적으로 동작한다면 약 1~2분 내에 VM이 다른 노드에서 기동되는 것을 확인할 수 있습니다. 처음에 드디어 이게 됐을 때 저 혼자 "오오..." 했던 기억이 나네요.

⚠️ 트러블슈팅: 제가 직접 겪은 문제들

문제 1: 클러스터 참가 후 쿼럼이 잡히지 않음

증상: pvecm status에서 Quorate: No가 표시되고, Web UI에서 "cluster not ready - no quorum" 오류가 나오는 경우입니다.

원인 대부분은 시간 동기화 문제이거나 방화벽이 포트를 막고 있는 경우였습니다.

# 시간 동기화 확인
timedatectl status

# NTP 서비스 재시작
systemctl restart chrony
# 또는
systemctl restart systemd-timesyncd

# Corosync가 사용하는 포트 확인 (UDP 5404, 5405)
ss -lunp | grep corosync

# 방화벽 규칙 확인 (Proxmox는 기본적으로 iptables 사용)
iptables -L -n | grep 5404

문제 2: HA 리소스가 계속 "error" 상태

이거 저도 한참 고생했습니다. VM이 HA로 등록됐는데 상태가 계속 error로 나오는 경우예요.

# HA Manager 로그 확인
journalctl -u pve-ha-lrm -f
journalctl -u pve-ha-crm -f

# VM 상태 강제 리셋
ha-manager set vm:100 --state started

# HA 서비스 재시작
systemctl restart pve-ha-crm
systemctl restart pve-ha-lrm

제 경우엔 VM 디스크가 공유 스토리지가 아닌 로컬 스토리지에 있어서 발생한 문제였습니다. HA는 반드시 공유 스토리지에 VM 디스크가 있어야 한다는 걸 다시 한번 강조하고 싶네요.

문제 3: Fencing(펜싱)이 동작하지 않아 VM 이동이 안 됨

Fencing이란 죽은 노드가 정말 죽었는지 확인하고, 확실하게 "격리"하는 메커니즘입니다. 이게 없으면 Proxmox HA는 안전을 위해 VM을 다른 노드로 이동시키지 않습니다.

# Fencing 설정 확인
cat /etc/pve/datacenter.cfg

# 소프트웨어 watchdog 기반 Fencing 설정 예시
# datacenter.cfg에 추가
fencing: watchdog-dbus

# watchdog 상태 확인
ls /dev/watchdog*

# pve-ha-crm이 watchdog을 사용하는지 확인
journalctl -u pve-ha-crm | grep watchdog

💡 : 홈랩 환경에서 IPMI 같은 하드웨어 펜싱 장치가 없다면, Proxmox의 소프트웨어 watchdog을 사용할 수 있습니다. 다만 프로덕션 환경에서는 하드웨어 펜싱(IPMI, iLO 등)을 강력히 권장합니다.

문제 4: 클러스터 노드 중 하나가 "UNKNOWN" 상태

# 클러스터 노드 상태 확인
pvecm nodes

# Corosync 링크 상태 확인
corosync-cfgtool -s

# Corosync 설정 파일 확인
cat /etc/corosync/corosync.conf

# 문제 노드에서 corosync 재시작
systemctl restart corosync pve-cluster

▲ HA 페일오버 테스트 결과 — 노드 장애 발생 후 VM이 다른 노드로 자동 이동된 것을 확인하는 화면입니다.

HA 클러스터 운영 시 꼭 알아야 할 설정들

HA 정책 세부 조정

# VM의 HA 설정 상세 조회
ha-manager config vm:100

# max_restart: 같은 노드에서 재시작 시도 횟수
# max_relocate: 다른 노드로 이동 시도 횟수
ha-manager set vm:100 --max_restart 3 --max_relocate 2

# 특정 VM을 HA에서 제거 (삭제가 아닌 관리 해제)
ha-manager remove vm:100

마이그레이션(Migration) 설정

HA 환경에서 노드 간 VM 이동 시 네트워크 대역폭 제한도 설정할 수 있습니다. 프로덕션에서는 이게 꽤 중요하더라고요.

# /etc/pve/datacenter.cfg에서 마이그레이션 설정
migration: secure
migration_unsecure: 0

# 또는 CLI로
pvesh set /cluster/options --migration type=secure

클러스터 전체 상태 모니터링

# 전체 클러스터 상태 한눈에 보기
pvecm status
ha-manager status
pct list  # 컨테이너 목록
qm list   # VM 목록

# 실시간 모니터링
watch -n 5 'pvecm status && echo "---" && ha-manager status'

Proxmox HA 구축 완료 — 최종 점검 체크리스트

설정을 모두 마쳤다면 아래 체크리스트로 최종 확인해 보세요.

▲ Proxmox HA 클러스터 구축 완료 체크리스트 — 운영 전 반드시 확인해야 할 항목들을 정리한 요약 인포그래픽입니다.

✅ 최종 확인 체크리스트

  1. pvecm status에서 Quorate: Yes 확인
  2. 모든 노드가 Web UI 좌측 트리에 표시됨
  3. 공유 스토리지가 모든 노드에서 접근 가능
  4. HA 그룹이 생성되고 VM이 리소스로 등록됨
  5. ha-manager status에서 VM 상태가 started
  6. Fencing 메커니즘 설정 완료
  7. 실제 페일오버 테스트 완료
  8. NTP 시간 동기화 모든 노드에서 정상

자주 묻는 질문 (FAQ)

Q. VM이 HA로 등록되면 항상 공유 스토리지에 있어야 하나요?
A. 네, 맞습니다. 로컬 스토리지에 있는 VM은 다른 노드로 이동할 수 없기 때문에 HA의 의미가 없습니다. 반드시 공유 스토리지(NFS, Ceph, iSCSI 등)에 VM 디스크를 두어야 합니다.

Q. Proxmox HA와 일반 Live Migration의 차이는 뭔가요?
A. Live Migration은 관리자가 수동으로 VM을 다른 노드로 옮기는 것이고, HA Failover는 노드 장애 시 자동으로 VM을 다른 노드에서 재시작하는 것입니다. 라이브 마이그레이션은 무중단이지만, HA 페일오버는 VM이 재시작되는 시간만큼의 다운타임이 발생합니다.

Q. 2노드 구성으로도 HA를 쓸 수 있나요?
A. 가능하지만 QDevice(쿼럼 장치)가 추가로 필요합니다. Raspberry Pi 같은 소형 장치에 corosync-qnetd를 설치해서 쿼럼 역할을 맡길 수 있습니다.

마무리: 서버실에서 배운 것

Proxmox HA 클러스터를 처음 구축했을 때, 노드 하나를 강제로 죽이고 VM이 다른 노드에서 자동으로 살아나는 걸 보면서 진짜 뿌듯했습니다. 13년 동안 인프라 일하면서 이런 순간들이 있거든요. 기술이 의도한 대로 딱 작동하는 그 순간.

물론 처음엔 쿼럼 개념도 헷갈리고, 펜싱 설정 때문에 VM이 안 옮겨가서 한참 삽질도 했습니다. 하지만 그 과정을 통해서 HA의 원리를 제대로 이해하게 된 것 같아요.

핵심을 정리하면:

  • 최소 3노드로 구성해서 쿼럼을 확보하세요
  • VM 디스크는 반드시 공유 스토리지에
  • Fencing 설정을 빠뜨리지 마세요 — 없으면 HA가 안전 때문에 동작을 안 합니다
  • 설정 후 반드시 실제 페일오버 테스트를 해보세요

다음 글에서는 Proxmox에서 Ceph 분산 스토리지를 구축하는 방법을 다룰 예정입니다. 공유 스토리지로 외부 NAS 없이 Proxmox 노드들 자체로 고가용성 스토리지를 만드는 내용인데요, HA와 함께 쓰면 정말 강력한 홈랩 환경이 만들어집니다. 기대해 주세요!

질문이나 다른 삽질 경험 있으신 분들은 댓글로 공유해 주세요. 저도 아직 배우는 중이라 같이 이야기 나눠보면 좋을 것 같습니다 😊