Azure에서 이중화로 구성된 VM에 Load Balancer 구성하기

Azure에서 IaaS 서비스인 가상머신을 사용하여 시스템을 구성할 때 가장 먼저 고려해야 하는 사항이 바로, 이중화 구성에 대한 부하 분산 설정이다. 

이전 Azure ASM(Azure Service Manager, 클래식 버전)에서는 Cloud Service라는 PaaS 서비스를 이용하여 부하 분산이 되도록 하였다. Cloud Service의 경우 초기 설정이나 사용에 제한이 있었는데 나에게 가장 어려웠던 2가지가 “NAT가 해시 기반 모드만 지원한다“라는 것과 “유휴시간 설정을 별도로 할 수 없다“라는 것이었다. 이렇게 되면 Local Storage를 많이 이용하는 시스템의 경우 바로 이중화 작업을 하기 힘들어진다.

이후, Resource Group라는 개념이 추가된 Azure ARM(Azure Resource Manager, 리소스 버전)에서는 Load  Balancer를 독립적으로 PaaS 서비스로 제공하게 되면서, 위 문제점 들을 해소할 수 있게 되었다.

이제 위 언급한 문제점들을 어떻게 설정하는지 확인해보자.

우선, Load Balancer에 연결할 VM(2대)을 간단하게 생성해 보자.

위 그림을 살펴보면, 좌측 1번째 VM은 생성할 때 가상 네트워크, 서브넷, 네트워크 보안 그룹(방화벽), 가용성 집합을 새로 만드는 것을 확인할 수 있다. 그리고 우측 2번째 VM은 1번 VM을 생성했을 때 만들어진 것들을 그대로 사용하여 같은 가상 네트워크 서브넷과 가용성 집합 내에 만들어지는 것을 확인할 수 있다. 

VM 2대 모두 생성 완료되었다면 만들어진 리소스 그룹에는  위에 언급한 서비스 리소스들이 구성된 것을 볼 수 있다.

이제, 생성된 각 VM에 원격접속을 하여 IIS 기능을 추가하고 기본 웹 사이트(Default Web Site)가 동작하도록 설정한다.
이때, 각 VM의 사이트에 부하 분산이 될 때 식별될 수 있도록 간단히 index.html 페이지에 표시해 주도록 하면 좋다.
(원격제어 및 IIS 설정, 기본 사이트 구성 등 관련 절차는 생략한다.)    

IIS 사이트가 잘 구성되었다면, 각 사이트(Default Web Site)가 아래 그림과 같이 나타날 것이다. 

여기까지 가 Load Balancer를 사용하기 전까지 준비 단계이다. ㅡㅡ;;;;

이제 본격 적으로 Load Balancer 서비스와 어렵게 구성한 VM 2대를 가지고 부하 분산이 되도록 구성하여야 하는데…. 그전에 부하 분산의 2가지 형태에 대해서 설명하고 진행 하겠다.

Azure Load balancer의 부하분산모드에는 해시 기반 모드와 소스 IP 선호도 모드 2가지를 제공있는데 각 특성은 아래와 같다.

1. 해시 기반 모드
기본 배포 모드로 5개의 Tuple을 가지고 connection을 hash하여 DIP에 연결해 주는 방식이다. 
5 Tuple의 구성은 Source IP, Source Port, Destination IP, Destination Port, Protocol type으로 구성되 있다. 동일한 세션 내에서는 동일한 DIP 인스턴스로 보내지게 되지만, Source의 세션이 새로 시작되면 connection이 다른 DIP 인스턴스로 보내질 수 있다.

2. 소스 IP 선호도 모드
2개 혹은 3개의 Tuple을 가지고 connection을 hash하여 DIP에 연결해 주는 방식이다.
2 Tuple의 구성은 Source IP, Destination IP로 구성되어 있으며, 3 Tuple은 Source IP, Destination Protocol type으로 구성되 있다. 동일한 Source은 항상 동일한 DIP 인스턴스로 보내지게 된다. 단, 이경우 connection traffic이 불균형하게 분산될 수 있다.

(참조 링크: https://docs.microsoft.com/ko-kr/azure/load-balancer/load-balancer-distribution-mode)

이제 진짜 Load Balancer를 만들어 보자. 
준비 과정이 길어서 어려울 것 같지만 사실상 Load Balancer는 리소스 이름하고 Public IP 구성만 하면  수분 내에 다음 그림과 같이 만들어지는 것을 확인 할 수 있다.

이제 생성이 된 부하 분산 장치의 설정을 메뉴 순서대로 구성만 해주면 된다.
(실제로, 좌측 메뉴의 설정을 위에서 아래 순으로 구성만 해주면 되기 때문에 이미지외 설명은 생략 하도록 한다.)

1. 백엔드 풀

2. 상태 프로브

3. 부하 분산 규칙

4. 인바운드 NAT 규칙
위에서 IIS기능 구성 당시 네트워크 보안 그룹에서 80포트에 대한 인바운드 규칙을 이미 해두었기 때문에 규칙 중복 오류가 발생한다. 이때, 당황하지 말고 침착하게 설정을 안하고 지나가도록 하자. ^^

1~4번까지 설정이 완료되면, Load Balancer의 공용 IP(혹은 DNS) 주소를 가지고 사이트에 접근해보자. 브라우저 세션 강제 삭제 및 새로 고침(F5)을 몇 번 해보면 부하 분산 규칙에 따라 사이트(VM 2대)가 바뀌는 것을 볼 수 있다.