연습 - 공용 부하 분산 장치 구성
Azure Portal, PowerShell 또는 Azure CLI를 사용하여 Azure Load Balancer를 구성할 수 있습니다.
의료 기관에서 클라이언트 트래픽의 부하를 분산하여 환자 포털 웹 서버의 상태에 따라 일관된 응답을 제공하려고 합니다. 의료 포털 웹 애플리케이션으로 작동하는 가용성 집합에 두 개의 VM(가상 머신)이 있습니다.
여기에서는 부하 분산 장치 리소스를 만들고 이를 가상 머신에서 부하를 분산하는 데 사용합니다.
환자 포털 웹 애플리케이션 배포
먼저 단일 가용성 집합에서 두 가상 머신에 환자 포털 애플리케이션을 배포합니다. 시간 절약을 위해 스크립트를 실행하여 이 애플리케이션을 만드는 것부터 시작해 보겠습니다. 이 스크립트는
- 가상 머신에 대한 가상 네트워크 및 네트워크 인프라를 만듭니다.
- 이 가상 네트워크에 두 개의 가상 머신을 만듭니다.
환자 포털 웹 애플리케이션 배포 방법:
Azure Cloud Shell에서 다음
git clone
명령을 실행합니다. 이 명령은 앱에 대한 원본이 포함된 리포지토리를 복제하고 GitHub에서 설치 스크립트를 실행합니다. 그런 다음 복제된 리포지토리의 디렉터리로 변경합니다.git clone https://github.com/MicrosoftDocs/mslearn-improve-app-scalability-resiliency-with-load-balancer.git cd mslearn-improve-app-scalability-resiliency-with-load-balancer
이름에서 알 수 있듯이 이 스크립트는 단일 가용성 집합에 두 개의 가상 머신을 생성합니다. 실행하는 데 약 2분이 걸립니다.
bash create-high-availability-vm-with-sets.sh <rgn>[sandbox resource group name]</rgn>
스크립트가 완료되면 Azure Portal 메뉴 또는 홈 페이지에서 리소스 그룹을 선택한 다음
[샌드박스 리소스 그룹 이름] 리소스 그룹을 선택합니다. 스크립트로 만들어진 리소스를 검토합니다.
부하 분산 장치 만들기
이제 부하 분산 장치를 만들어 보겠습니다.
Azure Portal 메뉴 또는 홈페이지의 Azure 서비스에서 리소스 만들기를 선택합니다. 리소스 만들기 창이 나타납니다.
서비스 및 마켓플레이스 검색 검색 상자에 Load Balancer를 입력한 다음 Enter 키를 누릅니다.
이어지는 목록에서 Load Balancer - Microsoft를 선택한 다음 만들기를 선택합니다.
기본 탭에서 각 설정에 다음 값을 입력합니다.
설정 값 프로젝트 세부 정보 Subscription 구독 리소스 그룹 [샌드박스 리소스 그룹 이름] 을 선택합니다.인스턴스 세부 정보 Name 고유한 이름을 입력합니다. 예를 들면 Pub-LB-PatientsPortal입니다. 지역 가상 머신이 만들어진 위치를 선택합니다. SKU 표준 Type 공용 서비스 계층 Regional
프런트 엔드 IP 구성 추가
다음: 프런트 엔드 IP 구성을 선택합니다.
+ 프런트 엔드 IP 구성 추가를 선택합니다. AD 프런트 엔드 IP 구성 창이 나타납니다.
각 설정에 다음 값을 입력합니다.
설정 값 Name 프런트 엔드 IP 구성의 고유한 이름을 입력합니다. 예: myFrontendIP IP 버전 IPv4 선택 IP 유형 IP 주소 선택 공용 IP 주소 새로 만들기를 선택한 다음 IP 주소 이름을 지정하고 저장을 선택합니다. 게이트웨이 부하 분산 장치 없음을 선택합니다. 대화 상자를 닫으려면 저장을 선택합니다. 부하 분산 장치 만들기 창이 다시 나타납니다.
백 엔드 풀 추가
다음: 백 엔드 풀을 선택합니다.
+ 백 엔드 추가를 선택합니다. 백 엔드 풀 추가 창이 나타납니다.
각 설정에 다음 값을 입력합니다.
설정 값 속성 백 엔드 풀의 고유한 이름을 입력합니다. 예: bepool-http 가상 네트워크 bePortalVnet이 선택되었는지 확인합니다. IP 구성에서 추가를 선택합니다. 백 엔드 풀에 IP 구성 추가 창이 나타납니다.
가상 머신 아래에서 webVM1 및 webVM2 가상 머신을 선택하고 추가를 선택합니다.
백 엔드 풀 추가 화면이 다시 나타납니다. IP 구성 아래에서 webVM1 및 webVM2 가상 머신을 선택하고 저장을 선택합니다. 부하 분산 장치 만들기 화면이 다시 나타납니다.
부하 분산 규칙 추가
마지막으로 부하 분산 장치에 대한 규칙을 만들어 보겠습니다.
다음: 인바운드 규칙을 선택합니다.
부하 분산 규칙 섹션에서 + 부하 분산 규칙 추가를 선택합니다. 부하 분산 규칙 추가 창이 나타납니다.
각 설정에 다음 값을 입력합니다.
설정 값 속성 부하 분산 규칙의 이름입니다. 예를 들면 lbrule-http입니다. IP 버전 IPv4 프런트 엔드 IP 주소 앞에서 명명한 프런트 엔드 IP 주소를 선택합니다. 백 엔드 풀 이전에 명명한 백 엔드 풀을 선택합니다. 예: bepool-http 프로토콜 TCP 포트 80(기본값)을 입력합니다. 백 엔드 포트 80(기본값)을 입력합니다. 상태 프로브 새로 만들기 링크를 선택합니다. 상태 프로브 추가 대화 상자가 나타납니다. 각 설정에 다음 값을 입력합니다.
설정 값 속성 상태 프로브의 이름입니다. 예를 들면 healthprobe-http입니다. 프로토콜 TCP 포트 80(기본값)을 입력합니다. 간격 5(기본값)를 입력합니다. 이 값은 프로브 사이의 시간 간격입니다. 저장을 선택하여 대화 상자를 닫습니다. 부하 분산 규칙 추가 창이 다시 나타납니다.
계속해서 각 설정에 다음 값을 입력합니다.
설정 값 세션 지속성* 없음(기본값) 유휴 제한 시간(분) 4(기본값)를 선택합니다. 이 값은 클라이언트가 연결 유지 메시지를 보내지 않고도 TCP(Transmission Control Protocol) 또는 HTTP 연결을 열어두는 데 걸리는 시간입니다. 부동 IP 사용 안 함(기본값) 저장을 선택하여 부하 분산 규칙 구성을 완료합니다.
부하 분산 장치 만들기 화면이 다시 나타납니다. 검토 + 만들기를 선택합니다.
유효성 검사를 통과하면 만들기를 선택합니다. 배포가 완료되면 리소스로 이동을 선택합니다.
개요 페이지에서 공용 IP 주소를 복사하고 저장합니다. 공용 IP 주소를 보려면 더 보기...를 선택해야 할 수 있습니다.
IP 주소 만들기
먼저 부하 분산 장치의 공용 IP 주소가 필요합니다.
Cloud Shell에서 다음 명령을 실행하여 PowerShell을 시작합니다.
pwsh
PowerShell에서 새 공용 IP 주소를 만듭니다.
$Location = $(Get-AzureRmResourceGroup -ResourceGroupName <rgn>[sandbox resource group name]</rgn>).Location $publicIP = New-AzPublicIpAddress ` -ResourceGroupName <rgn>[sandbox resource group name]</rgn> ` -Location $Location ` -AllocationMethod "Static" ` -Name "myPublicIP"
New-AzLoadBalancerFrontendIpConfig cmdlet을 사용하여 프런트 엔드 IP를 만듭니다. 다음 코드는 myFrontEnd라는 프런트 엔드 IP 구성을 만들고 myPublicIP 주소를 연결합니다.
$frontendIP = New-AzLoadBalancerFrontendIpConfig ` -Name "myFrontEnd" ` -PublicIpAddress $publicIP
부하 분산 장치 만들기
PowerShell을 사용하여 부하 분산 장치를 구성하는 경우 부하 분산 장치를 만들기 전에 백 엔드 주소 풀, 상태 프로브 및 규칙을 만들어야 합니다.
New-AzLoadBalancerBackendAddressPoolConfig cmdlet을 실행하여 백 엔드 주소 풀을 만듭니다. 마지막 단계에서는 가상 머신을 이 백 엔드 풀에 연결합니다. 다음 예제는 myBackEndPool이라는 백 엔드 주소 풀을 만듭니다.
$backendPool = New-AzLoadBalancerBackendAddressPoolConfig -Name "myBackEndPool"
부하 분산 장치가 의료 포털의 상태를 모니터링할 수 있도록 상태 프로브를 만듭니다. 상태 프로브는 상태 검사에 따라 부하 분산 장치 순환에서 가상 머신을 동적으로 추가하거나 제거합니다.
$probe = New-AzLoadBalancerProbeConfig ` -Name "myHealthProbe" ` -Protocol http ` -Port 80 ` -IntervalInSeconds 5 ` -ProbeCount 2 ` -RequestPath "/"
이제 트래픽이 가상 머신에 분산되는 방식을 정의하려면 부하 분산 장치 규칙이 필요합니다. 들어오는 트래픽에 대한 프런트 엔드 IP 구성 및 트래픽을 수신할 백 엔드 IP 풀과 필요한 원본 및 대상 포트를 함께 정의합니다. 정상적인 가상 머신만 트래픽을 수신하도록 하려면 사용할 상태 프로브도 정의합니다.
$lbrule = New-AzLoadBalancerRuleConfig ` -Name "myLoadBalancerRule" ` -FrontendIpConfiguration $frontendIP ` -BackendAddressPool $backendPool ` -Protocol Tcp ` -FrontendPort 80 ` -BackendPort 80 ` -Probe $probe
이제 New-AzLoadBalancer cmdlet을 실행하여 기본 부하 분산 장치를 만들 수 있습니다.
$lb = New-AzLoadBalancer ` -ResourceGroupName <rgn>[sandbox resource group name]</rgn> ` -Name 'MyLoadBalancer' ` -Location $Location ` -FrontendIpConfiguration $frontendIP ` -BackendAddressPool $backendPool ` -Probe $probe ` -LoadBalancingRule $lbrule
스크립트가 백 엔드 풀 정보를 사용하여 만든 네트워크 인터페이스를 업데이트하여 가상 머신을 백 엔드 풀에 연결합니다.
$nic1 = Get-AzNetworkInterface -ResourceGroupName <rgn>[sandbox resource group name]</rgn> -Name "webNic1" $nic2 = Get-AzNetworkInterface -ResourceGroupName <rgn>[sandbox resource group name]</rgn> -Name "webNic2" $nic1.IpConfigurations[0].LoadBalancerBackendAddressPools = $backendPool $nic2.IpConfigurations[0].LoadBalancerBackendAddressPools = $backendPool Set-AzNetworkInterface -NetworkInterface $nic1 -AsJob Set-AzNetworkInterface -NetworkInterface $nic2 -AsJob
다음 명령을 실행하여 부하 분산 장치의 공용 IP 주소와 내 웹 사이트 URL을 가져옵니다.
Write-Host http://$($(Get-AzPublicIPAddress ` -ResourceGroupName <rgn>[sandbox resource group name]</rgn> ` -Name "myPublicIP").IpAddress)
부하 분산 장치 만들기
Azure CLI를 사용하여 부하 분산 장치 및 연결된 리소스를 만들 수 있습니다.
새 공용 IP 주소를 만듭니다.
az network public-ip create \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --allocation-method Static \ --name myPublicIP
부하 분산 장치를 만듭니다.
az network lb create \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --name myLoadBalancer \ --public-ip-address myPublicIP \ --frontend-ip-name myFrontEndPool \ --backend-pool-name myBackEndPool
부하 분산 장치가 의료 포털의 상태를 모니터링할 수 있도록 하는 상태 프로브를 만듭니다. 상태 프로브는 상태 검사에 따라 부하 분산 장치 순환에서 가상 머신을 동적으로 추가하거나 제거합니다.
az network lb probe create \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --lb-name myLoadBalancer \ --name myHealthProbe \ --protocol tcp \ --port 80
이제 트래픽이 가상 머신에 분산되는 방식을 정의하려면 부하 분산 장치 규칙이 필요합니다. 들어오는 트래픽에 대한 프런트 엔드 IP 구성 및 트래픽을 수신할 백 엔드 IP 풀과 필요한 원본 및 대상 포트를 함께 정의합니다. 정상적인 가상 머신만 트래픽을 수신하도록 하려면 사용할 상태 프로브도 정의합니다.
az network lb rule create \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --lb-name myLoadBalancer \ --name myHTTPRule \ --protocol tcp \ --frontend-port 80 \ --backend-port 80 \ --frontend-ip-name myFrontEndPool \ --backend-pool-name myBackEndPool \ --probe-name myHealthProbe
스크립트가 백 엔드 풀 정보를 사용하여 만든 네트워크 인터페이스를 업데이트하여 가상 머신을 백 엔드 풀에 연결합니다.
az network nic ip-config update \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --nic-name webNic1 \ --name ipconfig1 \ --lb-name myLoadBalancer \ --lb-address-pools myBackEndPool az network nic ip-config update \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --nic-name webNic2 \ --name ipconfig1 \ --lb-name myLoadBalancer \ --lb-address-pools myBackEndPool
다음 명령을 실행하여 부하 분산 장치의 공용 IP 주소와 내 웹 사이트 URL을 가져옵니다.
echo http://$(az network public-ip show \ --resource-group <rgn>[sandbox resource group name]</rgn> \ --name myPublicIP \ --query ipAddress \ --output tsv)
부하 분산 장치 구성 테스트
부하 분산 장치 설정을 테스트하여 가용성 및 상태 문제를 어떻게 동적으로 처리할 수 있는지 알아보겠습니다.
새 브라우저 탭에서 적어둔 공용 IP 주소를 검색합니다. 가상 머신 중 하나의 응답이 브라우저에 표시됩니다.
Ctrl+F5를 여러 번 눌러서 “force refresh”를 시도하여 두 가상 머신에서 응답이 무작위로 반환되는지 확인합니다.
Azure Portal 메뉴 또는 홈 페이지에서 모든 리소스를 선택합니다. 그런 다음 webVM1을 선택하고 중지를 선택합니다.
웹 사이트를 표시하고 웹 페이지를 강제로 새로 고치는 탭으로 돌아갑니다. 모든 요청이 webVM2에서 반환됩니다.