SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure の ILB で複数のリスナー構成を実際に試してみる

leave a comment

昨日 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 可用性グループのそれぞれのリスナーに接続することが可能となります。

image

Written by masayuki.ozawa

9月 27th, 2016 at 9:58 pm

Leave a Reply

*