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