본문 바로가기
IT/Proxmox

[Proxmox] Proxmox HA 클러스터: 고가용성 구축 및 장애 복구 전략

by 수누다 2026. 5. 9.

13년차 인프라 엔지니어의 Proxmox HA 클러스터 구축 삽질기

안녕하세요, 13년차 서버실 지킴이입니다. 오늘은 Proxmox HA 클러스터(High Availability Cluster, 고가용성 클러스터) 구축 경험담을 풀어보려고 합니다. 인프라 엔지니어에게 고가용성(HA)은 마치 공기와도 같죠. 서비스가 멈추지 않고 항상 돌아가도록 하는 것, 그게 바로 저희의 숙명이잖아요?

저도 처음에는 단순히 서버 한 대에 가상 머신(VM) 몇 개 돌리는 것으로 시작했습니다. 그런데 어느 날 갑자기 서버가 뻗는 경험을 몇 번 하고 나니, '아, 이러면 안 되겠다!' 싶더라고요. 특히 홈랩(Homelab)에서 이것저것 실험하다 보면 예기치 않은 장애가 자주 발생하거든요. 그래서 장애 복구(Disaster Recovery)는 물론이고, 장애 발생 시에도 서비스가 멈추지 않도록 자동으로 복구(Automatic Failover)되는 시스템이 절실해졌습니다. 그때 제 눈에 들어온 것이 바로 Proxmox HA 클러스터였습니다.

Proxmox VE(Virtual Environment)는 오픈소스 가상화 플랫폼으로, 클러스터(Cluster) 기능을 제공해서 여러 대의 서버를 하나로 묶을 수 있어요. 여기에 HA(High Availability) 기능을 추가하면, 특정 노드(Node)에 문제가 생겨도 그 위에서 돌아가던 가상 머신이나 컨테이너(LXC)가 다른 살아있는 노드로 자동으로 이동해서 계속 서비스를 이어나갈 수 있습니다. 이거 정말 매력적이지 않나요? 덕분에 저도 밤에 편안하게 잘 수 있게 됐습니다. 🥳

Proxmox HA 클러스터의 기본적인 아키텍처를 보여주는 다이어그램입니다. 여러 노드가 Corosync 네트워크로 연결되어 있고, 공유 스토리지에서 VM 디스크를 사용하며, HA 매니저가 가상 머신들을 관리하는 모습을 나타냅니다.

Proxmox HA, 그게 뭔데요? (핵심 개념 설명)

Proxmox HA 클러스터를 이해하기 위해 몇 가지 핵심 개념을 짚고 넘어가야 합니다. 제가 처음 접했을 때 헷갈렸던 부분들이거든요.

  • Proxmox VE (PVE): Debian 기반의 오픈소스 가상화 플랫폼입니다. KVM(Kernel-based Virtual Machine)과 LXC(Linux Containers)를 지원하죠.
  • 클러스터(Cluster): 여러 대의 Proxmox 서버(노드)를 하나의 그룹으로 묶어주는 기능이거든요. 이렇게 하면 중앙 집중식으로 관리할 수 있고, 자원도 공유하며 HA 구성의 기반이 돼요.
  • HA (High Availability, 고가용성): 이게 오늘의 주인공이죠! 클러스터 내의 특정 노드에 하드웨어 장애나 소프트웨어 문제가 발생했을 때, 해당 노드에서 실행 중이던 VM이나 LXC를 자동으로 다른 정상 노드로 옮겨서 서비스 중단을 최소화하는 기능입니다.
  • Corosync (코로싱크): 클러스터 노드들이 서로 통신하게 해주는 핵심 메커니즘이거든요. 클러스터 노드 간의 상태 정보를 주고받고, 노드 실패를 감지하며, 쿼럼(Quorum)을 관리하는 역할을 합니다. 클러스터 노드들이 서로 살아있는지 확인하는 '심장 박동(Heartbeat)' 같은 거죠.
  • 쿼럼(Quorum): 클러스터가 의사결정하는 방식이에요. 스플릿 브레인(Split-Brain) 현상을 방지하기 위해, 클러스터 노드 중 과반수 이상이 정상적으로 통신해야만 클러스터가 정상 작동한다고 판단합니다. 예를 들어 3노드 클러스터에서는 최소 2노드가 살아있어야 쿼럼이 유지됩니다. 💡 팁: 그래서 노드 개수는 3개, 5개처럼 홀수(Odd Number)로 구성하는 것이 일반적입니다.

쉽게 말해, Proxmox HA는 여러 대의 Proxmox 서버를 끈끈하게 엮어서, 한 대가 쓰러져도 나머지 서버들이 재빨리 그 업무를 이어받아 서비스가 끊기지 않도록 하는 마법 같은 기능이라고 할 수 있습니다. 물론 마법을 부리려면 몇 가지 준비물이 필요하죠!

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

자, 이제 저와 함께 Proxmox HA 클러스터를 직접 구축해봅시다. 제가 홈랩에서 삽질하며 얻은 노하우를 아낌없이 풀어드릴게요!

1단계: Proxmox VE 노드 준비

클러스터를 구성하려면 최소 2대 이상의 Proxmox VE가 설치된 서버가 필요합니다. 하지만 위에서 말씀드렸듯이, 안정적인 HA를 위해서는 3대 이상의 노드를 준비하는 것을 강력히 추천합니다. 모든 노드는 동일한 Proxmox VE 버전으로 설치하는 것이 좋습니다.

  • 네트워크 설정: 각 노드에는 안정적인 네트워크 연결이 필수입니다. 가능하면 Corosync 통신을 위한 별도의 네트워크 인터페이스(NIC)를 구성하는 것이 좋습니다.
  • SSH 연결: 각 노드에 SSH로 접근할 수 있는지 미리 확인해주세요.

2단계: 클러스터 생성 및 노드 추가

가장 먼저 클러스터를 생성하고, 다른 노드들을 여기에 추가해야 합니다. 저는 주로 CLI(Command Line Interface)를 선호하는데, 웹 UI에서도 가능합니다.

    1. 첫 번째 노드에서 클러스터 생성:
pvecm create <클러스터_이름>
# 예시: pvecm create my-ha-cluster

이 명령어를 실행하면 첫 번째 노드가 클러스터의 리더가 됩니다.

    1. 두 번째 노드부터 클러스터에 추가:

각 추가할 노드에서 다음 명령어를 실행합니다. `<첫_번째_노드_IP>`는 클러스터를 생성한 첫 번째 노드의 IP 주소입니다.

pvecm add <첫_번째_노드_IP>
# 예시: pvecm add 192.168.1.100

이때 첫 번째 노드의 root 비밀번호를 입력하라고 나옵니다. 성공적으로 추가되면 모든 노드가 동일한 클러스터에 속하게 됩니다.

    1. 클러스터 상태 확인:

어떤 노드에서든 다음 명령어를 실행하여 클러스터 상태를 확인합니다.

pvecm status

모든 노드가 'Online' 상태이고, 'Quorum'이 'active'로 표시되면 성공입니다! 🎉

Proxmox 웹 UI에서 클러스터 노드와 쿼럼 상태를 확인하는 화면

Proxmox 웹 UI에서 클러스터 노드들의 목록과 상태를 보여주는 화면입니다. 각 노드의 'Status'가 'online'으로 표시되어 있고, 'Quorum'이 정상적으로 작동하는 것을 확인할 수 있습니다.

3단계: 공유 스토리지 설정 (NFS 또는 Ceph)

HA를 제대로 활용하려면 공유 스토리지(Shared Storage)가 필수입니다. 왜냐하면 노드에 장애가 발생했을 때, 다른 노드에서 장애가 난 VM의 디스크 이미지를 바로 이어서 사용할 수 있어야 하거든요. NFS(Network File System)나 Ceph(분산 스토리지)가 대표적인데요, 저는 홈랩에서 NFS를 많이 썼고, 규모가 커지면 Ceph를 고려해보는 편입니다.

여기서는 간단하게 NFS 스토리지를 추가하는 방법을 예시로 들어볼게요. (NFS 서버는 별도로 구축되어 있다고 가정합니다.)

    1. Proxmox 웹 UI 접속:

Datacenter -> Storage -> Add -> NFS 선택.

    1. NFS 설정 정보 입력:
      • ID: 스토리지 이름 (예: nfs-share)
      • Server: NFS 서버 IP 주소
      • Export: NFS 서버의 공유 경로 (예: /mnt/nfs_data)
      • Content: Disk image, Container template 등을 선택

이렇게 설정하면 클러스터의 모든 노드가 이 NFS 스토리지를 공유하게 됩니다. 이제 VM을 생성할 때 이 공유 스토리지를 선택하면 HA 구성 준비가 거의 끝난 겁니다!

4단계: HA 그룹 및 자원 설정

이제 어떤 VM이나 LXC를 HA의 보호 아래 둘지 결정하고 설정해야 합니다.

    1. HA 그룹 생성 (선택 사항):

Datacenter -> HA -> Groups 탭에서 HA 그룹을 만들 수 있습니다. 특정 노드에만 VM이 배치되도록 하거나, 특정 순서로 배치되도록 하는 등의 정책을 설정할 수 있어요. 저는 보통 기본 그룹을 사용하지만, 복잡한 환경에서는 유용합니다.

    1. VM/LXC에 HA 정책 적용:

HA를 적용할 VM 또는 LXC를 선택하고, 왼쪽 메뉴에서 HA 탭을 클릭합니다. 여기서 Add 버튼을 눌러 HA 자원으로 추가합니다.

      • Policy (정책):
        • started: 노드가 다운되면 다른 노드에서 자동으로 시작합니다. (가장 일반적)
        • stopped: 노드가 다운되어도 자동으로 시작하지 않습니다.
        • relocatable: 수동으로 다른 노드로 옮길 수 있습니다.

저는 대부분 started 정책을 사용합니다. 이게 바로 HA의 핵심이거든요!

웹 UI로도 쉽게 설정할 수 있으며, Datacenter -> HA -> Resources 탭에서 현재 HA 자원들의 상태를 확인할 수 있습니다.

⚠️ 삽질 경험담: 쿼럼, 네트워크, 그리고 스플릿 브레인

제가 Proxmox HA를 구축하면서 가장 많이 겪었던 문제들은 바로 쿼럼, 네트워크, 그리고 스플릿 브레인이었습니다. 독자분들은 저처럼 삽질하지 않으시길 바라며 제 경험을 공유합니다.

쿼럼(Quorum) 깨짐 문제

가장 흔한 문제 중 하나입니다. 예를 들어 3노드 클러스터에서 2대가 동시에 다운되면 쿼럼이 깨집니다. 쿼럼이 깨지면 클러스터는 더 이상 의사결정을 할 수 없게 되고, HA 기능도 작동하지 않습니다. VM들이 제자리에 멈춰버리는 거죠. 😱

  • 해결책:
    • 항상 노드 개수를 홀수로 유지하세요. (최소 3개, 이상적으로는 5개)
    • 노드 복구 후 pvecm status로 쿼럼 상태를 확인합니다.
    • 만약 한 노드만 영구적으로 손상되어 제거해야 한다면, pvecm delnode <노드_이름> 명령어를 사용하여 클러스터에서 안전하게 제거해야 합니다.
    • 2노드 클러스터의 경우 QDevice (큐디바이스)를 설정하여 쿼럼 안정성을 높일 수 있습니다. QDevice는 클러스터 외부에 있는 경량 프로세스로, 쿼럼 투표권을 하나 더 제공해서 2노드 클러스터에서 한 노드가 죽어도 쿼럼이 깨지지 않도록 도와줍니다.

네트워크 이중화의 중요성

Corosync는 네트워크를 통해 통신합니다. 만약 Corosync 네트워크에 문제가 생기면, 노드들은 서로 통신할 수 없게 되고, 살아있는 노드도 죽은 노드로 오인할 수 있습니다. 제가 실제로 겪었던 일인데, 네트워크 케이블 하나가 불량이라 클러스터가 오락가락했던 적이 있었죠... 하하.

  • 해결책:
    • 가능하다면 Corosync 통신을 위한 별도의 네트워크 인터페이스(NIC)를 구성하거나, 링크 어그리게이션(Link Aggregation, 본딩)을 통해 네트워크 이중화를 구성하는 것이 좋습니다.
    • /etc/pve/corosync.conf 파일을 수정하여 두 개의 링(Ring)을 구성할 수도 있습니다.

스플릿 브레인(Split-Brain) 방지

스플릿 브레인은 클러스터가 두 개 이상의 독립적인 그룹으로 나뉘어 서로 자신이 진짜라고 생각하고 동작하는 심각한 상황입니다. 예를 들어, 네트워크 문제로 노드 1과 노드 2, 3이 분리되었을 때, 노드 1이 VM을 시작하고 동시에 노드 2, 3이 또 다른 VM을 시작하려고 시도하면 데이터 손상이 발생할 수 있습니다.

  • 해결책:
    • 쿼럼 규칙이 스플릿 브레인을 방지하는 기본적인 메커니즘이지만, 완벽하지 않을 수 있습니다.
    • STONITH (Shoot The Other Node In The Head) 또는 펜싱(Fencing)이라는 개념이 있습니다. 문제가 생긴 노드의 전원을 강제로 차단하여, 해당 노드가 더 이상 클러스터 자원을 사용하지 못하게 하는 방법입니다. Proxmox 자체적으로는 QDevice를 통해 쿼럼을 강화하거나, 외부 펜싱 장비(예: IPMI를 이용한 전원 제어)를 통합하여 사용할 수 있습니다. 홈랩에서는 복잡할 수 있지만, 프로덕션 환경에서는 필수적인 요소입니다.

제대로 동작하는지 확인해봐야죠! (장애 복구 검증)

수고해서 클러스터를 구축했으니, 이제 정말 잘 작동하는지 확인해봐야겠죠? 저는 이 순간이 제일 두근거리더라고요. 제가 직접 해보니 가장 확실한 방법은 강제로 노드를 종료시켜보는 겁니다.

    1. HA가 설정된 VM 또는 LXC 확인:

HA 정책이 'started'로 설정된 VM이나 LXC가 특정 노드에서 실행 중인지 확인합니다.

    1. 해당 노드 강제 종료:

해당 노드의 전원 버튼을 길게 누르거나, SSH로 접속하여 poweroff -f 명령어로 강제 종료합니다. (경고: 운영 중인 중요한 서비스에서는 절대 이렇게 하지 마세요! 테스트 환경에서만 시도해야 합니다.)

    1. HA 동작 확인:

다른 Proxmox 노드의 웹 UI나 pve-ha-manager status 명령어를 통해 해당 VM/LXC가 자동으로 다른 노드로 마이그레이션(Migration)되어 시작되는지 확인합니다. 몇 초에서 몇 분 정도 걸릴 수 있습니다.

pve-ha-manager status

성공적으로 다른 노드에서 VM이 'running' 상태로 바뀌면 드디어 성공입니다! 🎉 이 순간의 쾌감은 이루 말할 수 없죠. 제가 밤새 삽질했던 보람을 느끼는 순간입니다.

Proxmox HA 장애 복구 후 가상 머신이 다른 노드에서 정상 작동하는 대시보드 화면

Proxmox 웹 UI 대시보드에서 장애가 발생했던 노드의 VM이 다른 노드로 성공적으로 마이그레이션되어 정상 작동 중인 상태를 보여주는 스크린샷입니다. VM의 'Status'가 'running'으로 표시됩니다.

Proxmox HA 클러스터, 현명하게 사용하는 팁

HA 클러스터를 구축했다고 해서 모든 것이 끝나는 건 아닙니다. 더 안정적이고 효율적으로 사용하기 위한 몇 가지 팁을 드릴게요.

  • 백업 전략 수립: HA는 장애 시 서비스를 유지하는 것이지, 데이터 손실을 막아주지는 않습니다. Proxmox Backup Server (PBS)를 이용하거나, 다른 백업 솔루션을 반드시 함께 운영해야 합니다. 제가 예전에 백업을 소홀히 했다가 피눈물을 흘린 적이 있거든요... 😭
  • 모니터링 시스템 구축: 클러스터의 상태, 각 노드의 자원 사용량, VM의 상태 등을 실시간으로 모니터링해야 합니다. Prometheus + Grafana 조합은 홈랩에서도 충분히 활용할 수 있는 강력한 모니터링 툴입니다.
  • 공유 스토리지의 중요성: HA의 성능과 안정성은 공유 스토리지에 크게 의존합니다. NFS 서버의 성능이 떨어지거나 네트워크 대역폭이 부족하면, VM 마이그레이션 시 병목 현상이 발생할 수 있습니다. Ceph와 같은 분산 스토리지는 더 높은 성능과 안정성을 제공하지만, 그만큼 구축과 관리가 복잡하다는 점을 염두에 두세요.
  • 정기적인 테스트: '설마' 하는 마음으로 테스트를 미루다가 실제 장애가 발생했을 때 제대로 작동하지 않는 경우가 있습니다. 주기적으로 HA 기능을 테스트하여 항상 준비된 상태를 유지해야 합니다.
Proxmox HA 클러스터의 장점과 단점을 비교한 인포그래픽

Proxmox HA 클러스터의 주요 장점과 고려해야 할 단점들을 시각적으로 비교 정리한 인포그래픽입니다. 고가용성, 중앙 관리 등의 장점과 복잡성, 공유 스토리지 의존성 등의 단점을 간략하게 보여줍니다.

마무리하며: 안정적인 인프라의 시작

오늘은 Proxmox HA 클러스터 구축부터 제가 겪었던 삽질 경험, 그리고 검증 방법까지 자세히 이야기해봤습니다. 처음에는 쿼럼이니 스플릿 브레인이니 하는 개념들이 어렵게 느껴졌지만, 직접 부딪혀보고 해결하는 과정을 통해 정말 많은 것을 배웠습니다.

Proxmox HA는 홈랩 사용자부터 중소기업 환경까지, 안정적인 인프라를 구축하고자 하는 분들에게 정말 좋은 솔루션이라고 생각합니다. 물론 완벽한 시스템은 없지만, HA를 통해 서비스 중단 시간을 최소화하고, 장애 발생 시에도 빠르게 복구할 수 있는 기반을 마련할 수 있습니다.

여러분의 소중한 서비스, Proxmox HA 클러스터로 든든하게 지켜보시는 건 어떨까요? 이 글이 여러분의 인프라 구축 여정에 작은 도움이 되었기를 바랍니다. 다음번에는 Proxmox Backup Server나 Ceph 스토리지 구축에 대한 이야기를 들고 오겠습니다. 그때까지 모두 안정적인 서버실 되시길! 감사합니다. 👋