1. 程式人生 > >Azure Load Balancer : 動態擴展

Azure Load Balancer : 動態擴展

mod use 擴展 sp1 server tty powers man backend

筆者在前文《Azure Load Balancer : 支持 IPv6》中介紹了如何通過 PowerShell 腳本創建支持 IPv6 的 Load Balancer。本文我們接著介紹如何在前文創建的 Load Balancer 中添加新的後端虛機。

可擴展的 Load Balancer

對於負載均衡來說,最重要的能力就是支持通過在後端添加更多的資源來提高系統的處理能力。可正如筆者在前文所述,我們無法通過 Azure 門戶的 UI 創建支持 IPv6 的 Load Balancer,當然也無法通過 UI 來為已經支持 IPv6 的 Load Balancer 擴展後端池中的虛機。要想擴展支持 IPv6 的 Load Balancer 的後端池中的虛機,還是得通過腳本!我們仍然使用 PowerShell 腳本完成 Load Balancer 的擴展。

擴展支持 IPv6 的 Load Balancer

下面是擴展 Load Balancer 的主要邏輯。

定義腳本中所需的變量
為了能更好的重用該腳本,筆者把所需的變量都定義到了腳本的開頭處,雖然變量的數目很多,但是只要修改 vmIndex 、prodNamePrefix、userName、sshPublicKey 和 location 等幾個關鍵變量的值腳本就可以工作了:

# 新添加的虛機索引
$vmIndex = "3"
# 資源名稱的前綴
$prodNamePrefix = "Nick"
$lowerProdNamePrefix = $prodNamePrefix.ToLower()

# vm user name $userName = "nick" # vm user public key $sshPublicKey = "your public key" # resource loacation $location = "japaneast" # resource group name $rgName = $prodNamePrefix + "LBGroup" ...

獲取虛擬網絡及其虛擬子網的實例

# 獲取虛擬網絡的實例
$vnet = Get-AzureRmVirtualNetwork -Name $vnetName `
                                  
-ResourceGroupName $rgName # 獲取虛擬子網的實例 $backendSubnet = Get-AzureRmVirtualNetworkSubnetConfig ` -Name $subnetName ` -VirtualNetwork $vnet

獲取 Load Balancer 及其子屬性的實例

$loadbalancer = Get-AzureRmLoadBalancer -Name $lbName `
                                        -ResourceGroupName $rgName

# 獲取 Load Balancer 的 Backend pools 實例
$backendpoolipv4 = Get-AzureRmLoadBalancerBackendAddressPoolConfig `
                   -Name $backendAddressPoolV4Name `
                   -LoadBalancer $loadbalancer
$backendpoolipv6 = Get-AzureRmLoadBalancerBackendAddressPoolConfig `
                   -Name $backendAddressPoolV6Name `
                   -LoadBalancer $loadbalancer

# 獲取 Load Balancer 的 Frontend IP 實例
$FEIPConfigv4 = Get-AzureRmLoadBalancerFrontendIpConfig `
                -Name $frontendV4Name `
                -LoadBalancer $loadbalancer
$FEIPConfigv6 = Get-AzureRmLoadBalancerFrontendIpConfig `
                -Name $frontendV6Name `
                -LoadBalancer $loadbalancer

# 在 Load Balancer 實例中添加新的 Inbound NAT rule
$loadbalancer | Add-AzureRmLoadBalancerInboundNatRuleConfig `
                -Name $natRulexV4Name `
                -FrontendIPConfiguration $FEIPConfigv4 `
                -Protocol TCP `
                -FrontendPort $frontendPort `
                -BackendPort 22

在雲端更新 Load Balancer 實例

# 在雲端更新 Load Balancer 實例
$loadbalancer | Set-AzureRmLoadBalancer

# 獲得更新後的 Load Balancer 實例
$loadbalancer = Get-AzureRmLoadBalancer `
                -Name $lbName `
                -ResourceGroupName $rgName
$inboundNATRulev4 = Get-AzureRmLoadBalancerInboundNatRuleConfig `
                    -Name $natRulexV4Name `
                    -LoadBalancer $loadbalancer

創建虛擬網卡

$nicIPv4 = New-AzureRmNetworkInterfaceIpConfig `
           -Name "IPv4IPConfig" `
           -PrivateIpAddressVersion "IPv4" `
           -Subnet $backendSubnet `
           -LoadBalancerBackendAddressPool $backendpoolipv4 `
           -LoadBalancerInboundNatRule $inboundNATRulev4
$nicIPv6 = New-AzureRmNetworkInterfaceIpConfig `
           -Name "IPv6IPConfig" `
           -PrivateIpAddressVersion "IPv6" `
           -LoadBalancerBackendAddressPool $backendpoolipv6
$nic = New-AzureRmNetworkInterface `
       -Name $nicxName `
       -IpConfiguration $nicIPv4,$nicIPv6 `
       -ResourceGroupName $rgName `
       -Location $location

創建虛擬機並分配新建的 NIC

# 獲取 Availability Set
$availabilitySet = Get-AzureRmAvailabilitySet `
                   -Name $availabilitySetName `
                   -ResourceGroupName $rgName

# 創建用戶 Credential
$securePassword = ConvertTo-SecureString $userPassword `
                                         -AsPlainText -Force
$userCred = New-Object System.Management.Automation.PSCredential `
            ($userName, $securePassword)

# 創建虛機
$vm = New-AzureRmVMConfig -VMName $vmxName `
                          -VMSize $vmSize `
                          -AvailabilitySetId $availabilitySet.Id
$vm = Set-AzureRmVMOperatingSystem `
      -VM $vm `
      -Linux `
      -ComputerName $vmxComputerHostName `
      -Credential $userCred `
      -DisablePasswordAuthentication
$vm = Set-AzureRmVMSourceImage `
      -VM $vm `
      -PublisherName Canonical `
      -Offer UbuntuServer `
      -Skus $vmVersion `
      -Version "latest"
$vm = Set-AzureRmVMBootDiagnostics `
      -VM $vm `
      -Disable
$vm = Add-AzureRmVMNetworkInterface `
      -VM $vm `
      -Id $nic.Id -Primary
$vm = Set-AzureRmVMOSDisk `
      -VM $vm `
      -Name $vmxDiskName `
      -CreateOption FromImage `
      -StorageAccountType $storageAccountTypeName
Add-AzureRmVMSshPublicKey `
    -VM $vm `
    -KeyData $sshPublicKey `
    -Path "/home/$userName/.ssh/authorized_keys"
New-AzureRmVM -ResourceGroupName $rgName `
              -Location $location `
              -VM $vm

至此便在已有的 Load Balancer 的後端池中添加了一臺虛機,完整的腳本代碼請參考這裏。

在 Azure 門戶上的 Cloud Shell 中執行腳本

假設你已經編輯好了自己的 Load Balancer 創建腳本,並命名為 azureloadbalancer_addvm.sp1。讓我們先把腳本上傳到 Azure 門戶上的 Cloud Shell 中,然後在 Cloud Shell 中執行該腳本:

技術分享圖片

腳本執行完成後,一個支持 IPv6 的虛機就被添加到 Load Balancer 的後端池中了:

技術分享圖片

總結

雖然支持 IPv6 的 Load Balancer 的創建和操作都需要通過腳本進行,對入門來說可能麻煩了點兒,但是一旦你習慣了這種腳本化的操作,生產力的提升也是嗖嗖地!

參考:
用 PowerShell 創建支持 IPv6 的 Azure Load Balancer
Powershell load balancer
Azure Load Balancer 對 IPv6 的支持

Azure Load Balancer : 動態擴展