Azure Load Balancer : 动态扩展
笔者在前文《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 : 动态扩展的更多相关文章
- Azure Load Balancer : 支持 IPv6
越来越多的网站开始支持 IPv6,即使是哪些只提供 api 服务的站点也需要支持 IPv6,比如苹果应用商店中的 app 早就强制要求服务器端支持 IPv6 了.笔者在前文<Azure Load ...
- Azure Load Balancer : 简介
Azure 提供的负载均衡服务叫 Load Balancer,它工作在 ISO 七层模型的第四层,通过分析 IP 层及传输层(TCP/UDP)的流量实现基于 "IP + 端口" 的 ...
- 使用Python SDK管理Azure Load Balancer
概述 下面将演示如何使用Python SDK管理中国区Azure Load balancer.关于Azure负载均衡器的详细功能介绍,请参考官方文档. Code Sample import os fr ...
- Azure Load Balancer(二) 基于内部的负载均衡来转发为访问请求
一,引言 上一节,我们使用 Azure Load Balancer 类型为外部的,来转发我们的 Web 服务.今天我们看看另一种类型为 “Internal” 的 Azure Load Balancer ...
- Azure Load Balancer(一) 为我们的Web项目提供负载均衡
一,引言 上节,我们讲到使用 Azure Traffic Manager 为我们的 Demo 项目提供负载均衡,以及流量转发的功能.但是Azure 提供类似的功能的服务远远不止这一个,今天我们就来讲一 ...
- 使用 Load Balancer,Corosync,Pacemaker 搭建 Linux 高可用集群
由于网络架构的原因,在一般虚拟机或物理环境中常见的用 VIP 来实现双机高可用方案,无法照搬到 Azure 平台.但利用 Azure 平台提供的负载均衡或者内部负载均衡功能,可以达到类似的效果. 本文 ...
- 配置Internal Load balancer中VM的外网访问
当在Azure中部署SQL VM时,处于安全考虑,不会配置VM的Public IP,会禁止外网的进出站访问,只允许从内部VNET,或者特定的内部IP访问.特别是当使用Azure Internal Lo ...
- 【WPF】运用MEF实现窗口的动态扩展
若干年前,老周写了几篇有关MEF的烂文,简单地说,MEF是一种动态扩展技术,比如可以指定以某个程序集或某个目录为搜索范围,应用程序在运行时会自动搜索符合条件的类型,并自动完成导入,这样做的好处是,主程 ...
- 负载均衡server load balancer
负载均衡(Server Load Balancer,简称SLB)是对多台云服务器进行流量分发的负载均衡服务.SLB可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性. ( ...
随机推荐
- 将web项目部署到阿里云服务器上
一.用eclipse将写好的项目打成war包 1.右键点击项目,选择Export 选择打包之后的路径,点击Finsh. 2.购买阿里云服务器 按下图选择 3.设置云服务器防火墙 4.远程连接云服务器 ...
- [Hive_9] Hive 的排序
0. 说明 全排序(order by) | 部分排序(sort by) | hash 分区(distribute by) | cluster by 1. 前期准备 1.1 建表 create tab ...
- AndroidStudio2.2.x以上使用cMake编译调用底层c生成依赖库
最近使用AndroidStudio的最新ndk编译方式cMake来编译底层cpp文件,由于之前没有接触过cMake语法,先附上官方学习文档地址:https://developer.android.co ...
- Linux 忘记登录密码?破解系统登陆密码
1.重启或者开启系统,在如下界面按e 进入救援系统: 2.在linux16 这一行末尾输入:rd.break,以rd.break 的方法重置密码 3.分别执行以下命令 mount -o remount ...
- C语言 一个数学问题:求s=(a^m)!+(b^n)!
求s=(am)!+(bn)! //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> void main(){ i ...
- 删除window10没用的服务
最近学习了下resin,出了个问题,它默认端口是8080,跟Tomcat冲突了,我在使用的时候遇到了个奇怪的事情,resin4.0一直占用着我的8080端口,哪怕我用dos命令把它强制停止,不出五秒钟 ...
- vue中$router.push打开新窗口
在vue中使用 this.$router.push({ path: '/home' }) 默认是替代本窗口 如果想新开一个窗口,可以使用下面的方式: let routeData = this.$ro ...
- B. Yet Another Array Partitioning Task ——cf
B. Yet Another Array Partitioning Task time limit per test 2 seconds memory limit per test 256 megab ...
- Web和移动开发的未来
Web和移动开发的未来 当我们与来自整个IT行业的专家交谈时,他们告诉我们技术,PWA和优化的持续整合是关键. 为了收集有关网络和移动开发当前和未来状况的见解,我们与19位IT主管进行了交流,我们问道 ...
- 15.selenium_case02
# 抓取今日头条的新闻链接 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWa ...