冗長・負荷分散に必須「Azure ロードバランサー」の作成 ~PowerShell編~

Azure Load Balancer は、高パフォーマンスや高可用性を実現するために役に立ちます。
ARM(Azure Resource Manager)では二種類のロードバランサーが作成できるようになりました。

外部ロードバランサー:パブリックIPを持って外部からの通信を振り分ける
内部ロードバランサー:プライベートIPを持って内部からの通信を振り分ける

[特徴]
・ハッシュベースの分散方式。5タプル (送信元IP、送信元ポート、接続先IP、宛先ポート、プロトコル)が同じなら、同じサーバーに接続する。
※送信元ポートはすぐに変わるのでECサイトには不向き
・HTTPカスタムプローブの作成が可能。通常はHTTP 200応答で確認。
・プローブのカスタマイズが可能。CPU使用率など
・宛先ポート番号とサーバーを1対1で紐付け可能(受信NAT規則)
・プローブ監視元はロードバランサーのフロントIPからでは無く「168.63.129.16」から行われる。


現在、ロードバランサーを作成するには、PowerShellにて行う必要があります。
※ポータルサイトからでも作成ができるようになりました!!

ロードバランサーを作成するには、少なくとも下記 6項目を定義する必要があります。

  • バックエンドサブネット:分散先のサブネットを定義
  • 仮想ネットワーク:分散先の仮想ネットワークを定義
  • フロントエンドIP:ロードバランサー用のIPアドレス。分散ターゲットの仮想IP
  • バックエンドアドレスプール:分散先の仮想マシンを定義
  • ヘルスプローブ:分散先の仮想マシンの死活監視方法を定義
  • ルール:負荷分散のルールを定義。宛先NAT


外部ロードバランサーの作成

サブネットを定義
$backendSubnet = new-AzureRmVirtualNetworkSubnetConfig -Name tushigami-subnet -AddressPrefix 192.168.1.0/24

仮想ネットワークを定義 ※上記サブネットを仮想ネットワークに紐付ける
New-AzureRmvirtualNetwork -Name tushigami-vnet -ResourceGroupName tushigami-group -Location “JapanWest” -AddressPrefix 192.168.0.0/16 -Subnet $backendSubnet

パブリックIPを定義 ※パブリックIPは静的にすること
$publicIP = New-AzureRmPublicIpAddress -Name tushigami-Public -ResourceGroupName tushigami-group -Location JapanWest -AllocationMethod Static -DomainNameLabel cloudou

フロントエンドIPを定義 ※上記パブリックIPをフロントエンドに紐付ける
$frontendIP = New-AzureRmLoadBalancerFrontendIpConfig -Name tushigami-Front -PublicIpAddress $publicIP

バックエンドアドレスプールを定義 ※ポータルから設定可能
$beaddresspool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name tushigami-LBVM

ヘルスプローブを定義 ※ポータルから設定可能
$healthProbe = New-AzureRmLoadBalancerProbeConfig -Name tushigami-Probe -RequestPath “HealthProbe.aspx” -Protocol tcp -Port 80 -IntervalInSeconds 15 -ProbeCount 2                                   例はHTTPなのでパス[HealthProbe.aspx]を指定している。15秒間隔,2回失敗で分散除外。

ルールを定義
$lbrule = New-AzureRmLoadBalancerRuleConfig -Name tushigami-80 -FrontendIpConfiguration $frontendIP -BackendAddressPool $beAddressPool -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 80            ※例は 80で接続してきたものを80で仮想マシンに渡している。

ロードバランサーを作成
New-AzureRmLoadBalancer -ResourceGroupName tushigami-group -Name tushigami-LB -Location “japanWest” -FrontendIpConfiguration $frontendIP -LoadBalancingRule $lbrule -BackendAddressPool $beAddressPool -Probe $healthProbe


内部ロードバランサーの作成

サブネットを定義
$backendSubnet = new-AzureRmVirtualNetworkSubnetConfig -Name tushigami-subnet -AddressPrefix 192.168.1.0/24

仮想ネットワークを定義 ※上記サブネットを仮想ネットワークに紐付ける
$vnet = New-AzureRmVirtualNetwork -Name tushigami-vnet -ResourceGroupName ResourceGP-Azure -Location “japanWest” -AddressPrefix 192.168.0.0/16 -Subnet $backendSubnet

【既存のVNETに追加する場合は下記からスタート】
$vnet = Get-AzureRmVirtualNetwork -Name tushigami-vnet -ResourceGroupName tushigami-group

フロントエンドIPを定義 ※フロントエンドIPと仮想ネットワークを紐付ける
$frontendIP = New-AzureRmLoadBalancerFrontendIpConfig -Name tushigami-Front -PrivateIpAddress 192.168.1.10 -SubnetId $vnet.subnets[6].Id           ※$vnet.subnets[6].Id について                          Get-AzureRmVirtualNetworkの表示で上から何番目のサブネットに含めるのかを指定する。一番上のサブネットは0ゼロから数える。フロントエンドIPと同じセグメントを指定する必要がある。

バックエンドアドレスプールを定義 ※ポータルから設定可能
$beaddresspool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name tushigami-LBVM

ヘルスプローブを定義 ※ポータルから設定可能
$healthProbe = New-AzureRmLoadBalancerProbeConfig -Name tushigami-Probe -RequestPath “HealthProbe.aspx” -Protocol tcp -Port 80 -IntervalInSeconds 15 -ProbeCount 2                                   例はHTTPなのでパス[HealthProbe.aspx]を指定している。15秒間隔,2回失敗で分散除外。

ルールを定義
$lbrule = New-AzureRmLoadBalancerRuleConfig -Name tushigami-80 -FrontendIpConfiguration $frontendIP -BackendAddressPool $beAddressPool -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 80            ※例は 80で接続してきたものを80で仮想マシンに渡している。

ロードバランサーを作成
New-AzureRmLoadBalancer -ResourceGroupName tushigami-group -Name tushigami-iLB -Location “japanWest” -FrontendIpConfiguration $frontendIP -LoadBalancingRule $lbrule -BackendAddressPool $beAddressPool -Probe $healthProbe


ロードバランサーを作成すると、ポータルサイトに表示されるので、設定変更が可能です。

login38