Azure Load Balancer : 動態擴展

筆者在前文《Azure Load Balancer : 支持 IPv6》中介紹瞭如何經過 PowerShell 腳本建立支持 IPv6 的 Load Balancer。本文咱們接着介紹如何在前文建立的 Load Balancer 中添加新的後端虛機。html

可擴展的 Load Balancer

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

擴展支持 IPv6 的 Load Balancer

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

定義腳本中所需的變量
爲了能更好的重用該腳本,筆者把所需的變量都定義到了腳本的開頭處,雖然變量的數目不少,可是隻要修改 vmIndex 、prodNamePrefix、userName、sshPublicKey 和 location 等幾個關鍵變量的值腳本就能夠工做了:shell

# 新添加的虛機索引
$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

建立虛擬網卡frontend

$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

建立虛擬機並分配新建的 NICssh

# 獲取 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 的後端池中添加了一臺虛機,完整的腳本代碼請參考這裏spa

在 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 的支持

相關文章
相關標籤/搜索