[Azure VM 101] AzureVM의 고가용성 옵션

2025. 2. 8. 17:39Engineering/Azure

국내 Azure 사용량이 늘어가고 있음을 체감합니다. 이에 Azure VM 101시리즈를 시작해보려고 합니다. 

Azure VM을 사용하기 위해 필요한 기본 개념들을 소개하고 FAQ들을 다룹니다. 

 

이번 글에서는 Azure에서 제공하는 고가용성 옵션 (High Availability Option)들을 소개하겠습니다. 

상용 서비스를 위한 IaaS 인프라스트럭쳐 구조 디자인에 가장 기초는 이중화 및 HA설계 입니다. Azure에서는 어떤 고가용성 옵션들을 제공하고 있는지 알아봅시다. 

 

Optional. 고가용성 (High Availability) 이란?

고가용성이라는 개념을 처음 들어보는 분들을 위해 잠시 짚고 넘어갑니다. 특정 서비스 인프라스트럭쳐를 설계 시 가장 중요한 점은 하나의 서버가 예기치않게 다운되더라도 서비스는 계속 '가용'한 상태가 되도록 설계하는 것입니다. 이를 '고가용성(High Availability) 설계' 라고 합니다.

 

가장 기본적인 고가용성 설계 방법으로는 서비스 인프라스트럭쳐들을 '다중화' 하는 것입니다. 서비스를돌리는 서버를 여러대 두는 것이죠. 이때 두 서버를 물리적으로 어떤 위치에 분산하여 두느냐는 인프라 설계자가 전략적으로 고민해야할 부분입니다. 지역단위로 재해가 발생하여 데이터센터가 다운될 가능성이 높은지 또는 특정 서버랙이 공유 하는 네트워크 장비 단위로 문제가 생길 위험이 높은지에 따라 다중화된 서버들을 지역 단위로 분산 시킬지 서버랙 단위로 분산 시킬지 전략적인 선택이 필요한 부분입니다.  

 

1. Region 과 Availability Zone

Azure에서는 VM을 서로 다른 '물리적 위치'에 배포할 수 있도록 'Region''Availability Zone'이라는 가용성 옵션들을 제공합니다. 

1) Region (지역) 이란 

Azure리소스들을 배치할 수 있는 지리적 위치들입니다. Azure에서 제공하는 물리적 위치 구분 단위 중 가장 큰 단위로, 주로 국가/대륙단위 지역적 범위입니다. (예: KoreaCentral,EastUS, SotuhEastAsia 등등)

 

Azure VM을 배포할 때 VM을 배포할 Region을 필수로 선택하게 됩니다. Azure 사용자는 여러 Region에 복수개 VM들을 분산시켜 다중화를 할 수 있습니다. 특정 국가의 자연재해나 지역적 분쟁상황등으로 인한 Region 전체가 다운되는 상황이 있을 때 다른 Region에 배포했던 VM들을 사용해 연속적인 서비스를 제공할 수 있습니다. 

 

하나의 Region 내에는 여러개의 Availability Zone이 역시 지리적으로 분산되어 있습니다. 

 

2) Availability Zone 이란

Azure에서 제공하는 물리적 위치 단위 중 Region 다음으로 큰 단위입니다. 하나의 Region에 여러 Availability Zone이 있을 수 있습니다. 또한 실제 Availability Zone하나는 여러 데이터센터를 묶은 단위입니다. Availability Zone내에 독립적인 파워소스 및 네트워크 장비를 갖는 여러 데이터센터들이 있다고 보시면 됩니다. 

 

 

여기서 Region, Availability Zone, Datacenter 관계를 트리 관계로 표시 해본다면 아래와 같습니다. 

출처: https://www.youtube.com/watch?v=kY2-Ci7vOeQ

 

 

Azure VM을 배포할 때 VM을 배포할 Region과 함께 Availability Zone도 선택하게 됩니다.

Availability Zone 단위로 VM들을 분산하여 배포하면, 국소적인 데이터센터들의 다운 발생 시 다른 Availability Zone에 배포된 VM들로 부터 연속적인 서비스를 제공할 수 있습니다.

 

또한 Azure에서는 Azure 인프라스트럭쳐에 대한 유지보수 작업이 있을 때, Availability Zone 하나씩 순차적으로 작업을 진행합니다. 따라서 혹시나 유지보수 작업이 VM들에 영향을 주더라도 한번에 하나의 Availability Zone에 있는 VM들만 영향을 받도록 합니다. 

 

Azure VM을 배포할 때 Region의 경우 필수적으로 선택해야하는 옵션이지만, Availability Zone은 특정 Zone 선택 없이 VM을 배포할 수 도 있습니다. 이 경우 Azure 내부적으로는 VM을 임의의 Zone에 배치하여 관리하지만 이는 사용자에게 보여지지 않으며 사용자가 관리할 수 없습니다. Zone선택 없이 배포된 VM들은 임의 Zone에 배포될 수 있으며 따라서 이러한 VM들간의 Zone 단위 고가용성은 보장되지 않습니다.

 

 

3) FAQ 

Q>> 기존 VM의 Region또는 Availability Zone을 변경할 수 있나요? 

A>> 아니오. Region과 Availability Zone은 VM을 생성할때만 지정 가능하며 추후 변경이 불가합니다. 

Region이나 Availability Zone 변경을 위해서는 원하는 Region 및 Availability Zone에 복제 VM을 새로 배포해야 합니다. 

 

Q>> 1개의 VM을 Availability Zone 1번에 배포했습니다. Azure내부적으로 여러개 VM들을 여러 Zone에 배포하여 관리해주는 것인가요? 하나의 Zone이 다운된 상황일 때 Azure측에서 직접 다른 Zone으로 VM들을 복구 해주는건가요?

A>> 아니오. 사용자가 직접 복수 VM들을 서로 다른 Zone을 선택하여 배포하셔야 합니다. 또한 서비스 요청들이 복수개 VM들에 분산될 수 있도록 LB를 연결한다는 지, 하나의 VM이 다운되었을 때 다른 VM으로 서비스 Recovery가 진행되도록 한다던지 등의 추가적인 어플리케이션 단의 고가용성 구축 작업들은 직접 수행하셔야합니다. Availability Zone은 IaaS 서비스 측면에서 사용자가 VM의 물리적 위치를 지정할 수 있는 위치 옵션일 뿐, failover 또는 recvoery 와 같은 기능은 포함하지 않습니다. 

 

Q>> Azure 포탈에서 VM 생성시 Zone을 여러개 선택할 수 있습니다. 하나의 VM에 Zone을 여러개 지정할 수 있는건가요? 

A>> 아니오. Azure VM 1개당 1개의 Zone만 지정할 수 있습니다. Azure포탈의 다수 Zone선택 기능을 사용하시는 경우, 선택하신 Zone에 동일한 VM을 각각 생성해주는 기능입니다. 지정하신 VM이름을 Prefix로하는 여러대 VM들이 선택하신 Zone들에 각각 자동 생성됩니다.  

 

2. Availability Set과 Update Domain, Fault Domain

1) Availability Set

Availability Set은 여러 VM들을 그룹으로 묶는 논리 그룹입니다. Availability Set으로 묶인 VM들은 Update domain과 Fault domain에 고루 분산되어 그룹에 묶인 VM들이 동시에 Fault 또는 Update를 경험하지 않도록 보장합니다. Update domain, Fault domain은 밑에서 더 자세히 설명하겠습니다. 

 

앞서 소개한 Region과 Availability Zone은 VM과 1:1 매칭 관계 였지만. (하나의 VM에 하나의 Region/Zone 만 지정 가능)

Availability Set은 VM과 1:N 매칭 관계입니다. (하나의 Availability Set은 여러 VM에 맵핑될 수 있지만, 하나의 VM은 하나의 Availability Set에만 속할 수 있습니다.)

 

1) Fault Domain 과 Update Domain

먼저 Fault Domain은 같은 랙(Rack) 단위로 연결된 단위입니다. 같은 파워소스, 네트워크 스위치를 공유합니다. 하나의 Availability set은 최대 3개의 Fault Domain을 가질 수 있습니다.

 

Update Domain은 Azure에서 필요한 유지보수 작업을 수행할 때 동시에 작업이 수행될 수 있는 서버들의 묶음 단위입니다. 하나의 Availability set은 최대 20개까지의 Update Domain을 가질 수 있습니다. 

 

아래 그림에서 보시는 것 처럼 만약 6개 VM을 3개 Fault Domain, 5개 Update Domain을 갖는 Availability Set으로 묶었을 때,

Fault Domain과 Update Domain에 6개 VM들이 'even하게'(고루게) 배포되는 것을 알 수 있습니다. 

만약 Fault Domain 0번의 Rack 단위 장애가 있더라도 Fault Domain 1번에 위치한 VM들이 서비스를 연속성있게 제공할 수 있습니다.

 

 

 

 

 

3) Availability Zone과 Set의 관계 및 FAQ

그럼 이제 Availability Zone과 Availability Set간의 혼동이 오실 겁니다.ㅋㅋ 두 옵션을 같이 쓰면 어떻게 되는거지? 둘의 차이점이 정확히 어떻게 되는거지? 등등 궁금해하실만한 부분들을 설명드려보겠습니다. 

 

먼저 명확히 말씀 드릴 점은 VM을 배포할 때 가용성 옵션으로 아무 옵션 사용하지 않음, Availability Zone, Availability Set, 그리고 이 글 마지막에 설명드릴 Virtual Machine Sclae Set 3가지 중 한개만 선택할 수 있습니다. Availability Zone과 Availability Set을 함께 사용할 수 없습니다.

 

 

그렇다면 Availability Set을 사용하면서 VM들을 여러 Availability Zone에도 분산시키고 싶다면 어떻게 해야할까요? 불가합니다.

Azure문서에 명확히 설명되어 있지 않지만, Availability Set에 묶인 VM들은 동일한 데이터센터내에 위치 됩니다. 데이터센터는 Zone보다 하위 레벨이기 때문에 결국 Availability Set에 묶인 VM 들은 '항상' 같은 Zone, 같은 데이터센터에 위치하게 됩니다. 

(아래 사진을 다시 보시면, Availability Set이 하나의 데이터센터 내에 위치하는 걸 볼 수 있습니다.)

출처: https://www.youtube.com/watch?v=kY2-Ci7vOeQ

 

따라서 Availability Set 과 Availability Zone간 가용성 옵션을 무엇을 선택할지 결정하실때는, 운영하시려는 서비스가 데이터센터 단위 장애에 대응한 고가용성이 필요한지 여부를 고민해보셔야 합니다. 

만약 임의의 데이터센터 장애 발생상황에서도 연속적으로 운영되어야 하는 중요한 서비스를 구축하실 예정이라면 여러 데이터센터에 VM을 분산 배포할 수 있는 Availability Zone 사용이 필요합니다. Availability Set을 사용하는 경우 Availability Set이 하나의 데이터센터에 묶여 버리기 때문에 데이터센터 장애에 대해서는 고가용성을 보장할 수 없습니다. 

 

그럼 VM들을 Zone에 분산 배치하고 싶지만 Zone내에서도 Fault Domain, Update Domain에 고루게 배포하고 싶다는 생각이 들 수 있습니다. 

하지만 이것은 의미 없는 고민입니다. Zone 자체로 이미 Fault Domain, Update Domain 역할을 하기 때문에 Zone을 분리 시켜 VM들을 배포했다면 그 자체로 Fault Domain, Update Domain에 분산 배포가된 VM입니다.

((이해가 잘 안되는 분들을 위해 설명을 덧붙이자면 Fault Domain은 같은 파워 소스를 공유하는 단위라고 했습니다. 주로 랙(Rack)단위 입니다. 서로 다른 Zone은 이미 서로 다른 Rack을 거쳐 서로 다른 데이터 센터에까지 위치합니다. 따라서 Zone 자체로 Fault doamin 역할을 합니다. 또한 Update Domain은 Azure에서 유지보수를 수행하는 단위라고 했습니다. 그리고 앞서 설명했지만 Azure에서는 하나의 한 zone에만 업데이트를 수행합니다. 따라서 Zone 자체로 Update Domain 역할도 하는 것이죠. ))

 

3. Virtual Machine Scale Set

 

Virtual Machine Scale Set (VMSS) 는 동일한 이미지를 사용하는 VM들의 그룹입니다. 동일한 이미지를 사용한다는 것은 보통 그 위에 돌리는 서비스들이 같은 VM들이라는 겁니다. 즉 같은 서비스를 위해 다중화된 VM들을 묶어주는 그룹이라는거죠. 다중화된 VM들을 편리하게 운영하기 위한 목적의 리소스 유형입니다. 

 

Availability Set도 VM들의 그룹이라고 했지만 Availability Set 내 VM들은 서로 다른 이미지로 생성된 VM들로 구성될 수 있음에 차이가 있습니다. 또한 VMSS는 VMSS로 묶인 VM들 (각각의 VM을 instance라고 함)을 한번에 관리하는데 용이한 autoscaling, upgrade policy 등등을 제공하기도 합니다. Availability Set은 이러한 관리 기능을 제공하지 못하죠.

 

VMSS 에 대한 자세한 설명과 사용 방법들은 아래 Azure 공식 문서를 참고하시기 바랍니다. 이 글에서는 가용성 옵션 관점에서의 VMSS내용만 다룹니다. 

https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/overview

 

1) VMSS의 가용성 옵션

VMSS 배포시 사용자는 Availability Zone 사용 여부를 선택할 수 있습니다. 복수개의 Availability Zone을 선택할 수 있으며, 선택한 Zone들에 VM 들이 고루(even) 하게 배포되게 됩니다. 예를 들어 Zone 1,2,3을 선택했고 VMSS 인스턴스 수는 2개로 지정했다면 첫번째, 두번째 인스턴스가 각각 Zone 1, 2번에 배포될 것입니다. 추후 2개 인스턴스를 추가하게 되면 세번째 인스턴스는 Zone3에, 네번째 인스턴스는 Zone1에 다시 배포될 것입니다. 

 

VMSS 에서 Availability Zone 옵션을 사용하지 않을 수도 있습니다. 이 경우 Azure에서는 내부적으로 VMSS 인스턴스들을 5개 Fault domain, 5개 Update domain으로 이루어진 Availability Set과 같은 형태로 인스턴스들을 관리합니다. 

출처: https://learn.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-faq#do-scale-sets-work-with-azure-availability-sets-

 

따라서 VMSS는 다중화된 VM 인스턴스들을 손쉽게 관리할 수 있는 기능과 함께 Availability Zone 또는 Availability Set 가용성 옵션까지 적용하여 VM들을 관리할 수 있는 리소스 단위라고 이해하시면 됩니다.