뒤로

고가용성(HA) 기능

고가용성(HA) 기능은 물리적 호스트가 실패했을 때 가상 머신을 자동으로 다른 정상적으로 작동하는 호스트에서 “재시작”하는(이를 장애 조치, failover라고 함) 기능입니다. 따라서 가상 머신의 게스트 OS 내에서 시스템이 자동으로 복구될 수 있도록 사전에 준비를 해둘 필요가 있습니다.

HA를 사용하기 위한 조건은 무엇인가요?

HRPC KVM 버전에서 HA를 사용하려면 다음 조건을 충족해야 합니다:

  1. 동일하게 구성된 3개 이상의 노드로 이루어진 가상 데이터 센터.
  2. 공유 스토리지(Ceph, ES와 함께 ESF)가 필요하므로 HCI 타입 또는 3-tier 타입이어야 합니다.
  3. 장비에 충분한 여유 용량(특히 메모리)이 있어야 합니다. 최소한 한 노드 분량의 메모리가 전체적으로 비어 있어야 하는 것이 중요합니다.
    *예를 들어, 3개 노드로 구성된 가상 데이터 센터의 경우, 총 메모리 사용량은 2개 노드 분량만 사용해야 합니다.
  4. 가상 머신의 백업을 확보하세요.
    백업 스토리지 또는 유사한 서비스와 계약을 체결하고 가상 머신의 정기 백업을 설정하는 것을 강력히 권장합니다.

HA 기능을 어떻게 활성화하나요?

HA 기능을 활성화하려면 먼저 왼쪽 창에서 데이터 센터를 선택하고, 중앙 창에서 HA를 열어 “그룹”을 클릭하세요.

오른쪽 창에서 “생성” 버튼을 클릭하여 HA 그룹 ID를 만들고, HA와 관련된 호스트를 체크하세요. HA와 관련된 호스트에서 가상 머신을 생성할 때는 최소한 한 대의 물리적 호스트 분량의 여유 메모리를 준비해야 합니다. 총 4대의 768GB 메모리를 장착한 HRPC로 HA에 참여하는 경우, 한 대의 HRPC에 물리적 장애가 발생하더라도 다른 장치가 계속 작동할 수 있도록 나머지 3대에 768GB의 여유 메모리가 필요합니다. HA 그룹을 체크하지 않으면 같은 데이터 센터에 있더라도 HA 대상으로 무시됩니다.

호스트가 HA 그룹에서 의도적으로 제거되고 HA 그룹 설정에서 “제한”이 체크된 경우, 해당 HA 그룹에 속한 가상 머신은 제거된 호스트에서 시작할 수 없습니다.

“nofailback”을 체크하면 실패했던 물리적 노드가 재부팅되어 복귀할 때 가상 머신이 복원되지 않고 이동 대상에서 계속 실행됩니다. “nofailback”을 체크하지 않으면 라이브 마이그레이션을 통해 원래 노드로 복귀하며, 노드 호스트와 가상 머신의 배치를 엄격히 관리할 수 있습니다. 그러나 물리적 노드가 불안정해져 반복적으로 재부팅되면 HA가 다시 활성화되어 가상 머신이 반복적으로 재시작됩니다. 이러한 이유로 “nofailback”을 체크하는 것을 권장합니다.

또한, 라이브 마이그레이션은 실패가 드문 기능이지만, 순간적인 내부 중단이 발생하여 실시간 소프트웨어에 문제를 일으킬 수 있습니다.

가상 머신에 HA를 어떻게 활성화하나요?

가상 머신이 HA 관리 하에 있지 않으면 Proxmox HA가 적용되지 않습니다.

가상 머신을 HA 관리 하에 두려면, 가상 머신을 선택하고 오른쪽 상단의 “더보기▼” 풀다운 메뉴에서 “HA 관리”를 선택하세요. 위에서 구성한 HA 그룹의 ID를 그룹에서 선택하고, 원하는 상태를 “시작됨”으로 설정한 후 “추가” 버튼을 클릭하세요.

이제 이 가상 머신은 HA 제어 하에 있습니다.

HA 작동 범위는 하이퍼바이저에 따라 다릅니다. VMware에서는 가상 데이터 센터에서 HA를 활성화하면 가상 데이터 센터 내 모든 가상 머신에 영향을 미치지만, XenOrchestra에서는 HA가 활성화되고 “재시작”이 설정된 풀 내의 가상 머신에만 영향을 미칩니다.

HA 그룹 내 노드(호스트)의 유지보수 재시작과 가상 머신 간의 관계

HA 그룹에 속한 노드가 유지보수(예상치 못한 실패가 아닌)를 위해 재부팅될 때, 가상 머신의 동작은 HA 관리 여부에 따라 달라집니다.

HA 관리 하의 가상 머신다른 머신으로 라이브 마이그레이션
HA로 관리되지 않는 가상 머신자동으로 종료되고 재부팅 후에도 종료 상태로 유지됨

칼럼

HA 기능의 한계

HA 기능에는 한계가 있으며, HA를 사용할 때 발생할 수 있는 문제가 있습니다.

  1. 가상 머신의 예기치 않은 재시작
  2. 가상 머신 데이터 손상

간단히 말해, HA는 노드가 실패했을 때 다른 노드에서 가상 머신을 시작할 수 있는 능력이지만, 이는 신의 시점에서 본 작동 방식이며, 실제 소프트웨어 로직은 완전히 다르게 구현되어야 합니다.

먼저, 3개 노드(즉, 노드 A, 노드 B, 노드 C) 중 특정 노드에서 “실패”를 엄격히 정의하는 것은 불가능합니다. HA는 각 노드가 서로 협력하여 이루어집니다.

노드 A가 노드 B와 통신을 잃으면, 노드 B에서 실패가 발생했는지, 아니면 노드 A와 노드 B 간의 통신만 끊어졌는지 명확하지 않습니다. 노드 A가 자신의 관점에서 노드 C와 통신할 수 있다면, 노드 B에서 실패가 발생했을 가능성이 있다고 생각할 수 있습니다.

그러나 노드 B에서 호스팅되는 가상 머신의 데이터가 공유 스토리지에서 지속적으로 업데이트되고 있다면, 노드 B가 완전히 고립된 것일 수 있습니다.

위의 예에서, 노드 A와 노드 C가 통신 중이라면 노드 B가 실패했을 가능성이 높습니다. 따라서 노드 A와 노드 C는 노드 B에서 호스팅되던 가상 머신을 스스로 부팅하려고 시도할 것입니다.

그러나 노드 B가 실패한 것이 아니라 단지 고립된 것일 수도 있습니다. 노드가 자신이 고립되었다고 판단하면, 노드 A와 노드 C가 시작할 수 있도록 준비하기 위해 자신이 호스팅하는 VM을 즉시 종료하며, 이것이 위에서 언급한 예기치 않은 재부팅을 유발합니다.

그렇다면 노드 B가 종료되지 않으면 어떻게 될까요?

동일한 가상 머신이 노드 B와 다른 노드 두 곳에서 실행되면 가상 머신의 가상 디스크가 순식간에 손상되어 위에서 언급한 가상 머신 데이터의 파괴로 이어질 것입니다.

따라서 선택은 재부팅하거나 데이터를 파괴하는 것 중 하나입니다.

HA는 각 노드 간의 조정을 통해 노드가 다운되었는지, 통신이 끊어졌는지, 또는 느려졌는지 판단해야 합니다.

위의 두 가지 실패가 상호 배타적이라면, 피하고 싶은 것은 데이터 손상이므로 즉시 종료해야 합니다.

이 결정은 일정 간격으로 이루어지며, Proxmox는 이를 2분마다 수행합니다. 2분 동안 응답이 없으면 “호스트가 실패했다”고 판단합니다. 따라서 최소한 다운타임은 2분 + 가상 머신이 부팅되는 데 걸리는 시간이며(실제로는 더 길어질 수 있음),

그러나 노드 속도가 느려지거나, 메모리가 스왑 아웃되거나, 벌루닝 드라이버에 의한 메모리 회수가 일시적인 느려짐을 유발하거나, 스토리지 쓰기 속도가 느려지면 2분이 빠르게 지나갈 수 있으며, 제때 종료하지 못할 수도 있습니다. 데이터를 보호해야 하므로 시스템은 자동으로 WatchDog Timer 또는 유사한 것을 사용하며, 프라이빗 클라우드는 호스트 커널이 응답을 멈추더라도 커널을 자동으로 재시작할 수 있는 장치가 장착된 하드웨어에서 실행됩니다.