笔者在前文《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 = ""
# 资源名称的前缀
$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 : 动态扩展的更多相关文章

  1. Azure Load Balancer : 支持 IPv6

    越来越多的网站开始支持 IPv6,即使是哪些只提供 api 服务的站点也需要支持 IPv6,比如苹果应用商店中的 app 早就强制要求服务器端支持 IPv6 了.笔者在前文<Azure Load ...

  2. Azure Load Balancer : 简介

    Azure 提供的负载均衡服务叫 Load Balancer,它工作在 ISO 七层模型的第四层,通过分析 IP 层及传输层(TCP/UDP)的流量实现基于 "IP + 端口" 的 ...

  3. 使用Python SDK管理Azure Load Balancer

    概述 下面将演示如何使用Python SDK管理中国区Azure Load balancer.关于Azure负载均衡器的详细功能介绍,请参考官方文档. Code Sample import os fr ...

  4. Azure Load Balancer(二) 基于内部的负载均衡来转发为访问请求

    一,引言 上一节,我们使用 Azure Load Balancer 类型为外部的,来转发我们的 Web 服务.今天我们看看另一种类型为 “Internal” 的 Azure Load Balancer ...

  5. Azure Load Balancer(一) 为我们的Web项目提供负载均衡

    一,引言 上节,我们讲到使用 Azure Traffic Manager 为我们的 Demo 项目提供负载均衡,以及流量转发的功能.但是Azure 提供类似的功能的服务远远不止这一个,今天我们就来讲一 ...

  6. 使用 Load Balancer,Corosync,Pacemaker 搭建 Linux 高可用集群

    由于网络架构的原因,在一般虚拟机或物理环境中常见的用 VIP 来实现双机高可用方案,无法照搬到 Azure 平台.但利用 Azure 平台提供的负载均衡或者内部负载均衡功能,可以达到类似的效果. 本文 ...

  7. 配置Internal Load balancer中VM的外网访问

    当在Azure中部署SQL VM时,处于安全考虑,不会配置VM的Public IP,会禁止外网的进出站访问,只允许从内部VNET,或者特定的内部IP访问.特别是当使用Azure Internal Lo ...

  8. 【WPF】运用MEF实现窗口的动态扩展

    若干年前,老周写了几篇有关MEF的烂文,简单地说,MEF是一种动态扩展技术,比如可以指定以某个程序集或某个目录为搜索范围,应用程序在运行时会自动搜索符合条件的类型,并自动完成导入,这样做的好处是,主程 ...

  9. 负载均衡server load balancer

    负载均衡(Server Load Balancer,简称SLB)是对多台云服务器进行流量分发的负载均衡服务.SLB可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性. ( ...

随机推荐

  1. python使用sax实现xml解析

    之前在使用xml解析的时候,在网上搜了很多教程,最终没有能按照网上的教程实现需求. 所以呢,只好自己去看源码,在sax的__init__.py下看到这么一段代码: 1 def parse(source ...

  2. Wampserver或者帝国CMS安装后, 打开localhost显示IIS欢迎界面图片

    我们在安装集成环境Wampserver或者帝国CMS之后,有时会遇到一个问题, 打开localhost显示一张IIS欢迎界面图片,这个问题该如何解决呢,我在这里简单整理了一下解决方法 电脑win10系 ...

  3. 谈谈装xp官方纯净系统屡次失败的深刻体会

    有木有,小硬盘小内存的电脑竟然装不了五六百m大小的xp却能装win7之类的而感到痛失,如果去装win7电脑果断卡死, 用了最流行的制作u盘启动的软件都不行, 任何直接点击安装也不行,点不了安装的那个选 ...

  4. sql 语句按字段指定值排序及分页

    为特定字段赋值并排序 表[Table_temp]中列[col1]为字符,属性为varchar(),排序时需要按照B.A.C的顺序显示,则可按照以下SQL语句: select * from Table_ ...

  5. c#qq发邮件

    // SMTP(Simple Mail Transport Protocol)简单邮件传输协议.在.NET Frameword类库中提供SmtpClient类(System.Net.Mail),她提供 ...

  6. .gho文件检查

    虽然目前windows10的接受程度越来越广泛,但我接触到的一些非IT人士还是钟爱于windows7系统,本文记录一下在使用ghost还原系统遇到的问题. gho还原失败 在还原ghost系统过程中, ...

  7. 15个实用的PHP正则表达式

    对于开发人员来说,正则表达式是一个非常有用的功能,它提供了 查找,匹配,替换 句子,单词,或者其他格式的字符串.这篇文章主要介绍了15个超实用的php正则表达式,需要的朋友可以参考下.在这篇文章里,我 ...

  8. php学习----异常处理(接上篇)

    PHP异常处理之抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被执行. 既然抛出异常会中断程序 ...

  9. LeetCode算法题-Path Sum(Java实现)

    这是悦乐书的第169次更新,第171篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第28题(顺位题号是112).给定二叉树和整数sum,确定树是否具有根到叶路径,使得沿路 ...

  10. Linux 小知识翻译 - 「邮件服务器」

    这次聊聊「邮件服务器」. 邮件服务器上通常会运行2个服务端软件,「SMTP服务器」和「POP服务器或者IMAP服务器」. 这2个东西,也许使用邮件客户端的人立马就明白了.因为设置邮件客户端的时候,需要 ...