【Azure】AzureLoadBrancerで負荷分散させるWebサーバを作る

AzureLoadBarancerを使ってバックエンドのIISサーバへ負荷分散させる高可用な構成を作るよ。
チュートリアルを整理しつつやってみました。
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/tutorial-load-balancer
以下のようなよくありがちな負荷分散構成を作るよ。
# Azure Load Brancerの作成 PS C:\WINDOWS\system32> New-AzureRmResourceGroup ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -Location "EastUS" ResourceGroupName : myResourceGroupLoadBalancer Location : eastus ProvisioningState : Succeeded Tags : ResourceId : /subscriptions/0a9f989b-cb7c-406d-a47d-48c673cc752f/resourceGroups/myResourceGroupLoadBalancer # パブリックIPの作成 PS C:\WINDOWS\system32> $publicIP = New-AzureRmPublicIpAddress ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -Location "EastUS" ` >> -AllocationMethod "Static" ` >> -Name "myPublicIP" # ロードバランサ―の作成 PS C:\WINDOWS\system32> $frontendIP = New-AzureRmLoadBalancerFrontendIpConfig ` >> -Name "myFrontEndPool" ` >> -PublicIpAddress $publicIP PS C:\WINDOWS\system32> $backendPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name "myBackEndPool" PS C:\WINDOWS\system32> $lb = New-AzureRmLoadBalancer ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -Name "myLoadBalancer" ` >> -Location "EastUS" ` >> -FrontendIpConfiguration $frontendIP ` >> -BackendAddressPool $backendPool # 正常性プローブの作成 # アプリの状態を監視することができる # 80番ポートへアクセスし、200OKであることを15秒間隔でチェックし、2回失敗するとバランシング対象から除外される PS C:\WINDOWS\system32> Add-AzureRmLoadBalancerProbeConfig ` >> -Name "myHealthProbe" ` >> -LoadBalancer $lb ` >> -Protocol tcp ` >> -Port 80 ` >> -IntervalInSeconds 15 ` >> -ProbeCount 2 ResourceGroupName Name Location Sku Name ProvisioningState ----------------- ---- -------- -------- ----------------- myResourceGroupLoadBalancer myLoadBalancer eastus Basic Succeeded # 正常性プローブの適用 PS C:\WINDOWS\system32> Set-AzureRmLoadBalancer -LoadBalancer $lb ResourceGroupName Name Location Sku Name ProvisioningState ----------------- ---- -------- -------- ----------------- myResourceGroupLoadBalancer myLoadBalancer eastus Basic Succeeded # ロードバランサ―規則の作成 # フロントエンドIPやVMが構成されるバックエンドIP、ポート、使用する正常性プローブの定義を行う PS C:\WINDOWS\system32> $probe = Get-AzureRmLoadBalancerProbeConfig -LoadBalancer $lb -Name "myHealthProbe" PS C:\WINDOWS\system32> PS C:\WINDOWS\system32> Add-AzureRmLoadBalancerRuleConfig ` >> -Name "myLoadBalancerRule" ` >> -LoadBalancer $lb ` >> -FrontendIpConfiguration $lb.FrontendIpConfigurations[0] ` >> -BackendAddressPool $lb.BackendAddressPools[0] ` >> -Protocol Tcp ` >> -FrontendPort 80 ` >> -BackendPort 80 ` >> -Probe $probe ResourceGroupName Name Location Sku Name ProvisioningState ----------------- ---- -------- -------- ----------------- myResourceGroupLoadBalancer myLoadBalancer eastus Basic Succeeded # ロードバランサ―定義の更新 PS C:\WINDOWS\system32> Set-AzureRmLoadBalancer -LoadBalancer $lb ResourceGroupName Name Location Sku Name ProvisioningState ----------------- ---- -------- -------- ----------------- myResourceGroupLoadBalancer myLoadBalancer eastus Basic Succeeded # 仮想ネットワークの作成 # Create subnet config PS C:\WINDOWS\system32> $subnetConfig = New-AzureRmVirtualNetworkSubnetConfig ` >> -Name "mySubnet" ` >> -AddressPrefix 192.168.1.0/24 # Create the virtual network PS C:\WINDOWS\system32> $vnet = New-AzureRmVirtualNetwork ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -Location "EastUS" ` >> -Name "myVnet" ` >> -AddressPrefix 192.168.0.0/16 ` >> -Subnet $subnetConfig 警告: Breaking changes in the cmdlet 'New-AzureRmVirtualNetwork' : 警告: - "The output type 'Microsoft.Azure.Commands.Network.Models.PSVirtualNetwork' is changing" - The following properties in the output type are being deprecated : 'EnableVmProtection' # 仮想NICの作成 PS C:\WINDOWS\system32> for ($i=1; $i -le 3; $i++) >> { >> New-AzureRmNetworkInterface ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -Name myVM$i ` >> -Location "EastUS" ` >> -Subnet $vnet.Subnets[0] ` >> -LoadBalancerBackendAddressPool $lb.BackendAddressPools[0] >> } ResourceGroupName Name Location MacAddress Primary EnableAcceleratedNetworking EnableIPForwarding Provisioni ngState ----------------- ---- -------- ---------- ------- --------------------------- ------------------ ---------- myResourceGroupLoadBalancer myVM1 eastus False False Succeeded myResourceGroupLoadBalancer myVM2 eastus False False Succeeded myResourceGroupLoadBalancer myVM3 eastus False False Succeeded # 仮想マシンの作成 # 可用性セットにVMを配置する PS C:\WINDOWS\system32> $availabilitySet = New-AzureRmAvailabilitySet ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -Name "myAvailabilitySet" ` >> -Location "EastUS" ` >> -Sku aligned ` >> -PlatformFaultDomainCount 2 ` >> -PlatformUpdateDomainCount 2 # 管理者の資格情報を設定 PS C:\WINDOWS\system32> $cred = Get-Credential コマンド パイプライン位置 1 のコマンドレット Get-Credential 次のパラメーターに値を指定してください: Credential # VMの作成 PS C:\WINDOWS\system32> for ($i=1; $i -le 3; $i++) >> { >> New-AzureRmVm ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -Name "myVM$i" ` >> -Location "East US" ` >> -VirtualNetworkName "myVnet" ` >> -SubnetName "mySubnet" ` >> -SecurityGroupName "myNetworkSecurityGroup" ` >> -OpenPorts 80 ` >> -AvailabilitySetName "myAvailabilitySet" ` >> -Credential $cred ` >> -AsJob >> } Id Name PSJobTypeName State HasMoreData Location Command -- ---- ------------- ----- ----------- -------- ------- 6 Long Running... AzureLongRun... Running True localhost New-AzureRmVM 7 Long Running... AzureLongRun... Running True localhost New-AzureRmVM 8 Long Running... AzureLongRun... Running True localhost New-AzureRmVM PS C:\WINDOWS\system32> Get-AzureRmVM ResourceGroupName Name Location VmSize OsType NIC ProvisioningState Zone ----------------- ---- -------- ------ ------ --- ----------------- ---- MYRESOURCEGROUPLOADBALANCER myVM1 eastus Standard_DS1_v2 Windows myVM1 Succeeded MYRESOURCEGROUPLOADBALANCER myVM2 eastus Standard_DS1_v2 Windows myVM2 Succeeded MYRESOURCEGROUPLOADBALANCER myVM3 eastus Standard_DS1_v2 Windows myVM3 Succeeded # VMへのIISのインストール PS C:\WINDOWS\system32> for ($i=1; $i -le 3; $i++) >> { >> Set-AzureRmVMExtension ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -ExtensionName "IIS" ` >> -VMName myVM$i ` >> -Publisher Microsoft.Compute ` >> -ExtensionType CustomScriptExtension ` >> -TypeHandlerVersion 1.8 ` >> -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C: \\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' ` >> -Location EastUS >> } RequestId IsSuccessStatusCode StatusCode ReasonPhrase --------- ------------------- ---------- ------------ True OK OK True OK OK True OK OK # パブリックIPアドレスの確認 PS C:\WINDOWS\system32> Get-AzureRmPublicIPAddress ` >> -ResourceGroupName "myResourceGroupLoadBalancer" ` >> -Name "myPublicIP" | select IpAddress IpAddress --------- 104.45.155.158
数回アクセスしてみると、各VMへバランシングされていることがわかるね。
このチュートリアルとても分かりやすい(^^)