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

相关文章
相关标签/搜索