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可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性. ( ...
随机推荐
- SSL里的certificate格式资料小结
在查看相关报文的时候,发现RFC5246本身并没有对certificate的格式AlgorithmIdentifier作深入的介绍,只说其格式必须是X509v3 DER表示,思虑良久才找到方向:后者的 ...
- 最简单的java浏览器
/** * Created by Admin on 2017/3/27. */ import java.awt.BorderLayout; import java.awt.Container; imp ...
- java 根据实体对象生成 增删改的SQL语句 ModelToSQL
package com.xxx.utils; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import jav ...
- 自动化测试基础篇--Selenium发送测试报告邮件
来自:https://www.cnblogs.com/sanzangTst/p/8377870.html 发邮件需要用到python两个模块,smtplib和email,这俩模块是python自带的, ...
- Unity Editor 下创建Lua和Text文件
预览 在Project视图中,扩展右键菜单,右键 – Create - Text File 创建一个Text文件,或者Lua文件. 关键点 获取当前选择的路径,以Assets路径开头 var sele ...
- Microsoft .NET Framework 3.5 离线安装方法 (仅适用于Win8以上的系统)
所需工具:本系统对应原版镜像或Win8以上操作系统原版ISO镜像 操作: 1.利用Windows资源管理器挂载 ISO 镜像,或其他虚拟光驱工具挂载镜像,记住挂载的盘符 2.打开Windows命令提示 ...
- Ubuntu下vim打开文件时,提示请按ENTER或其它命令继续
最近配置了一下vim,重启后,配置生效.但在用vim打开文件的时候,出现了一个问题:每次用vim打开文件的时候,都会提示请按ENTER或其它命令继续.这个真的很烦人.那么怎么把它消除掉呢? 首先要搞清 ...
- puppet master 用 nginx + unicorn 作为前端
目录 1. 概要 2. nginx + unicorn 配置 2.1. package 安装 2.2. 配置文件设置 2.2.1. 配置 unicorn 2.2.2. 配置nginx 2.3. 测试配 ...
- Linux 小知识翻译 - 「RFC」
这次聊聊「RFC」. 有很多人经常听说「RFC」的吧,上次介绍的NTP是由「RFC1305规定的」,HTTP是由「RFC2616规定的」. RFC是「Request For Comments」的简称, ...
- 聚类——FCM的matlab程序
聚类——FCM的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在聚类——FCM文章中已介绍了FCM算法的理论知识,现在用matlab ...