昨日 Multiple VIPs for internal Load Balancer GA !! という投稿を書きましたが、実際に Azure 上に構築されている AlwaysOn 可用性グループで複数リスナーを構築してみました。
Azure 上に AlwaysOn AG 構成を構築する際のリスナーについて の内容が把握できていれば、設定はスムーズにできるかと。
Azure 側の設定としては、以下のようなスクリプトで対応できるかと。
Add-AzureRmAccount $subscription = Get-AzureRmSubscription | Out-GridView -OutputMode Single $subscription | Select-AzureRmSubscription $resourcegroup = Get-AzureRmResourceGroup | Out-GridView -OutputMode Single $VMNames = @("SQL-VM-01", "SQL-VM-02", "SQL-VM-03") $ListenerPort = 1433 $ILBIP = @("10.4.0.110", "10.4.0.111") $ProbePort = @( 59998, 59999) $VNET = Get-AzureRmVirtualNetwork -ResourceGroupName $resourcegroup.ResourceGroupName | Out-GridView -OutputMode Single $Subnet = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $VNET | Out-GridView -OutputMode Single $ILB = New-AzureRmLoadBalancer -Name "AlwaysOn-ILB" -ResourceGroupName $resourcegroup.ResourceGroupName -Location "Japan West" $Config = $ILB $Config = $Config | Add-AzureRmLoadBalancerBackendAddressPoolConfig -Name "SQLBE" for ($i = 0;$i -lt $ILBIP.Count;$i++){ $Config = $config | Add-AzureRmLoadBalancerFrontendIpConfig -Name $ILBIP[$i] -PrivateIpAddress $ILBIP[$i] -SubnetId $Subnet.Id } for ($i = 0;$i -lt $ProbePort.Count;$i++){ $Config = $Config | Add-AzureRmLoadBalancerProbeConfig -Name $ProbePort[$i] -Protocol Tcp -Port $ProbePort[$i] -IntervalInSeconds 5 -ProbeCount 4 } for ($i = 0;$i -lt $ILBIP.Count;$i++){ $Config = $Config | Add-AzureRmLoadBalancerRuleConfig -Name $ILBIP[$i] -FrontendIpConfiguration $Config.FrontendIpConfigurations[$i] -Probe $config.Probes[$i] -Protocol Tcp -BackendAddressPool $config.BackendAddressPools[0] -FrontendPort $ListenerPort -BackendPort $ListenerPort -EnableFloatingIP } $Config | Set-AzureRmLoadBalancer foreach($VMName in $VMNames) { $VM = Get-AzureRmVM -ResourceGroupName $resourcegroup.ResourceGroupName -Name $VMName $NICName = ($VM.NetworkInterfaceIDs[0].Split('/') | select -last 1) $NIC = Get-AzureRmNetworkInterface -name $NICName -ResourceGroupName $resourcegroup.ResourceGroupName $NIC.IpConfigurations[0].LoadBalancerBackendAddressPools = $Config.BackendAddressPools[0] Set-AzureRmNetworkInterface -NetworkInterface $NIC }
このスクリプトでは、
- SQL-VM-01
- SQL-VM-02
- SQL-VM-03
という 3 台の仮想マシンをバックエンドプールとして設定し、
- 10.4.0.110
- 10.4.0.111
という 2 つの IP アドレスをロードバランサーに設定しています。
負荷分散規則のプローブポートとしては、以下を設定しています。
- 10.4.0.110 は 59998
- 10.4.0.111 は 59999
これにより、59998 をリスニングしている仮想マシンに対しては、10.4.0.110、59999 をリスニングしている仮想マシンに対しては 10.4.0.111 でアクセスが可能となります。
Azure 側の設定はこれで完了となり、あとは、仮想マシン側で、AlwaysOn 可用性グループのリスナーに、 ILB 仮想 IP とプローブポートの設定を行います。
$ClusterNetworkName = "Cluster Network 1" $IPResourceName = "10.4.0.110" $LBIP = "10.4.0.110" Get-ClusterResource -Name $IPResourceName | Set-ClusterParameter ` -Multiple @{ Network=$ClusterNetworkName;` Address=$LBIP;` ProbePort="59998";` SubnetMask="255.255.255.255";` OverrideAddressMatch=1;` EnableDhcp=0 } $IPResourceName = "10.4.0.111" $LBIP = "10.4.0.111" Get-ClusterResource -Name $IPResourceName | Set-ClusterParameter ` -Multiple @{ Network=$ClusterNetworkName;` Address=$LBIP;` ProbePort="59999";` SubnetMask="255.255.255.255";` OverrideAddressMatch=1;` EnableDhcp=0 }
以上で設定は完了です。
これで、ILB に設定されている複数の IP アドレスで、AlwaysOn 可用性グループのそれぞれのリスナーに接続することが可能となります。