如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序
负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性。 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性。 你将学习如何执行以下操作:
- 创建 Azure 负载均衡器
- 创建负载均衡器运行状况探测
- 创建负载均衡器流量规则
- 使用自定义脚本扩展创建基本的 IIS 站点
- 创建虚拟机并将其附加到负载均衡器
- 查看负载均衡器的实际运行情况
- 在负载均衡器中添加和删除 VM
本教程需要 Azure PowerShell 模块 3.6 或更高版本。 运行 Get-Module -ListAvailable AzureRM 即可查找版本。 如果需要升级,请参阅安装 Azure PowerShell 模块。
Azure 负载均衡器概述
Azure 负载均衡器是位于第 4 层(TCP、UDP)的负载均衡器,通过在正常运行的 VM 之间分发传入流量提供高可用性。 负载均衡器运行状况探测器监视每个 VM 上的给定端口,仅将流量分发给正常运行的 VM。
定义包含一个或多个公共 IP 地址的前端 IP 配置。 利用此前端 IP 配置,可通过 Internet 访问负载均衡器和应用程序。
虚拟机使用其虚拟网络接口卡 (NIC) 连接到负载均衡器。 若要向 VM 分发流量,后端地址池需包含连接到负载均衡器的虚拟 NIC 的 IP 地址。
若要控制流量流,需为映射到 VM 的特定端口和协议定义负载均衡器规则。
创建 Azure 负载均衡器
本部分详细介绍了如何创建和配置负载均衡器的每个组件。 在创建负载均衡器之前,需使用 New-AzureRmResourceGroup 创建资源组。 以下示例在 ChinaEast 位置创建名为 myResourceGroupLoadBalancer 的资源组:
New-AzureRmResourceGroup `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast
创建公共 IP 地址
若要通过 Internet 访问应用,负载均衡器需要具有一个公共 IP 地址。 使用 New-AzureRmPublicIpAddress 创建一个公共 IP 地址。 以下示例在 myResourceGroupLoadBalancer 资源组中创建名为 myPublicIP 的公共 IP 地址:
$publicIP = New-AzureRmPublicIpAddress `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast `
-AllocationMethod Static `
-Name myPublicIP
创建负载均衡器
使用 New-AzureRmLoadBalancerFrontendIpConfig 创建一个前端 IP 地址。 以下示例创建名为 myFrontEndPool 的前端 IP 地址:
$frontendIP = New-AzureRmLoadBalancerFrontendIpConfig `
-Name myFrontEndPool `
-PublicIpAddress $publicIP
使用 New-AzureRmLoadBalancerBackendAddressPoolConfig 创建一个后端地址池。 以下示例创建名为 myBackEndPool 的后端地址池:
$backendPool = New-AzureRmLoadBalancerBackendAddressPoolConfig -Name myBackEndPool
现在,使用 New-AzureRmLoadBalancer 创建负载均衡器。 以下示例使用 myPublicIP 地址创建名为 myLoadBalancer 的负载均衡器:
$lb = New-AzureRmLoadBalancer `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myLoadBalancer `
-Location ChinaEast `
-FrontendIpConfiguration $frontendIP `
-BackendAddressPool $backendPool
创建运行状况探测器
若要允许负载均衡器监视应用的状态,可以使用运行状况探测器。 运行状况探测器基于其对运行状况检查的响应,从负载均衡器中动态添加或删除 VM。 默认情况下,在 15 秒时间间隔内发生两次连续的故障后,会从负载均衡器分布中删除 VM。 可以为应用创建基于协议或特定运行状况检查页面的运行状况探测器。
以下示例创建一个 TCP 探测器。 还可创建自定义 HTTP 探测器,以便执行更精细的运行状况检查。 使用自定义 HTTP 探测器时,必须创建运行状况检查页,例如 healthcheck.aspx。 探测器必须为负载均衡器返回 HTTP 200 OK 响应,以保持主机处于旋转状态。
若要创建 TCP 运行状况探测器,请使用 Add-AzureRmLoadBalancerProbeConfig。 以下示例创建名为 myHealthProbe 的运行状况探测器,用于监视每个 VM:
Add-AzureRmLoadBalancerProbeConfig `
-Name myHealthProbe `
-LoadBalancer $lb `
-Protocol tcp `
-Port 80 `
-IntervalInSeconds 15 `
-ProbeCount 2
使用 Set-AzureRmLoadBalancer 更新负载均衡器:
Set-AzureRmLoadBalancer -LoadBalancer $lb
创建负载均衡器规则
负载均衡器规则用于定义将流量分配给 VM 的方式。 定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 若要确保仅正常运行的 VM 接收流量,还需定义要使用的运行状况探测器。
使用 Add-AzureRmLoadBalancerRuleConfig 创建一个负载均衡器规则。 以下示例创建名为 myLoadBalancerRule 的负载均衡器规则并均衡端口 80 上的流量:
$probe = Get-AzureRmLoadBalancerProbeConfig -LoadBalancer $lb -Name myHealthProbe
Add-AzureRmLoadBalancerRuleConfig `
-Name myLoadBalancerRule `
-LoadBalancer $lb `
-FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
-BackendAddressPool $lb.BackendAddressPools[0] `
-Protocol Tcp `
-FrontendPort 80 `
-BackendPort 80 `
-Probe $probe
使用 Set-AzureRmLoadBalancer 更新负载均衡器:
Set-AzureRmLoadBalancer -LoadBalancer $lb
配置虚拟网络
需要先创建提供支持的虚拟网络资源,然后才能部署某些 VM 并测试均衡器。 有关虚拟网络的详细信息,请参阅管理 Azure 虚拟网络教程。
创建网络资源
使用 New-AzureRmVirtualNetwork 创建虚拟网络。 以下示例创建包含 mySubnet 的名为 myVnet 的虚拟网络:
# Create subnet config
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
# Create the virtual network
$vnet = New-AzureRmVirtualNetwork `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast `
-Name myVnet `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
使用 New-AzureRmNetworkSecurityRuleConfig 创建网络安全组规则,然后使用 New-AzureRmNetworkSecurityGroup 创建网络安全组。 使用 Set-AzureRmVirtualNetworkSubnetConfig 将网络安全组添加到子网,然后使用 Set-AzureRmVirtualNetwork 更新虚拟网络。
以下示例创建一个名为 myNetworkSecurityGroup 的网络安全组规则,并将其应用于 mySubnet:
# Create security rule config
$nsgRule = New-AzureRmNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRule `
-Protocol Tcp `
-Direction Inbound `
-Priority 1001 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 80 `
-Access Allow
# Create the network security group
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast `
-Name myNetworkSecurityGroup `
-SecurityRules $nsgRule
# Apply the network security group to a subnet
Set-AzureRmVirtualNetworkSubnetConfig `
-VirtualNetwork $vnet `
-Name mySubnet `
-NetworkSecurityGroup $nsg `
-AddressPrefix 192.168.1.0/24
# Update the virtual network
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
使用 New-AzureRmNetworkInterface 创建虚拟 NIC。 以下示例创建三个虚拟 NIC。 (在以下步骤中针对为应用创建的每个 VM 各使用一个虚拟 NIC)。 可随时创建其他虚拟 NIC 和 VM,并将其添加到负载均衡器:
for ($i=1; $i -le 3; $i++)
{
New-AzureRmNetworkInterface `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myNic$i `
-Location ChinaEast `
-Subnet $vnet.Subnets[0] `
-LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
}
创建虚拟机
若要提高应用的高可用性,请将 VM 放置在可用性集中。
使用 New-AzureRmAvailabilitySet 创建一个可用性集。 以下示例创建名为 myAvailabilitySet 的可用性集:
$availabilitySet = New-AzureRmAvailabilitySet `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myAvailabilitySet `
-Location ChinaEast `
-Managed `
-PlatformFaultDomainCount 3 `
-PlatformUpdateDomainCount 2
使用 New-AzureRmNetworkInterface 设置 VM 的管理员用户名和密码:
$cred = Get-Credential
现在,可使用 New-AzureRmVM 创建 VM。 下例创建三个 VM:
for ($i=1; $i -le 3; $i++)
{
$vm = New-AzureRmVMConfig `
-VMName myVM$i `
-VMSize Standard_D1 `
-AvailabilitySetId $availabilitySet.Id
$vm = Set-AzureRmVMOperatingSystem `
-VM $vm `
-Windows `
-ComputerName myVM$i `
-Credential $cred `
-ProvisionVMAgent `
-EnableAutoUpdate
$vm = Set-AzureRmVMSourceImage `
-VM $vm `
-PublisherName MicrosoftWindowsServer `
-Offer WindowsServer `
-Skus 2016-Datacenter `
-Version latest
$vm = Set-AzureRmVMOSDisk `
-VM $vm `
-Name myOsDisk$i `
-DiskSizeInGB 128 `
-CreateOption FromImage `
-Caching ReadWrite
$nic = Get-AzureRmNetworkInterface `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myNic$i
$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id
New-AzureRmVM `
-ResourceGroupName myResourceGroupLoadBalancer `
-Location ChinaEast `
-VM $vm
}
创建和配置所有三个 VM 需要几分钟时间。
使用自定义脚本扩展安装 IIS
在有关如何自定义 Windows 虚拟机的上一教程中,你已了解如何使用 Windows 的自定义脚本扩展自动执行 VM 自定义。 可使用相同的方法在 VM 上安装和配置 IIS。
使用 Set-AzureRmVMExtension 安装自定义脚本扩展。 该扩展运行 powershell Add-WindowsFeature Web-Server 来安装 IIS Web 服务器,然后更新 Default.htm 页以显示 VM 的主机名:
for ($i=1; $i -le 3; $i++)
{
Set-AzureRmVMExtension `
-ResourceGroupName myResourceGroupLoadBalancer `
-ExtensionName IIS `
-VMName myVM$i `
-Publisher Microsoft.Compute `
-ExtensionType CustomScriptExtension `
-TypeHandlerVersion 1.4 `
-SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
-Location ChinaEast
}
测试负载均衡器
使用 Get-AzureRmPublicIPAddress 获取负载均衡器的公共 IP 地址。 以下示例获取前面创建的“myPublicIP”的 IP 地址:
Get-AzureRmPublicIPAddress `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myPublicIP | select IpAddress
然后,可将公共 IP 地址输入 Web 浏览器中。 网站随即显示,其中包括负载均衡器将流量分发到的 VM 的主机名,如下例所示:

若要查看负载均衡器如何在运行应用的所有三个 VM 之间分发流量,可强制刷新 web 浏览器。
添加和删除 VM
建议对运行应用的 VM 执行维护,例如安装 OS 更新。 若要应对应用增加的流量,建议添加更多 VM。 本部分演示了如何在负载均衡器中删除或添加 VM。
从负载均衡器中删除 VM
使用 Get-AzureRmNetworkInterface 获取网络接口卡,然后将虚拟 NIC 的 LoadBalancerBackendAddressPools 属性设置为 $null。 最后,更新虚拟 NIC:
$nic = Get-AzureRmNetworkInterface `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myNic2
$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$null
Set-AzureRmNetworkInterface -NetworkInterface $nic
若要查看负载均衡器如何在运行应用的其余两个 VM 之间分发流量,可强制刷新 web 浏览器。 现在可以对 VM 执行维护,例如安装 OS 更新或执行 VM 重新启动。
将 VM 添加到负载均衡器
执行 VM 维护后,或者如果需要扩展容量,请通过 Get-AzureRMLoadBalancer 将虚拟 NIC 的 LoadBalancerBackendAddressPools 属性设置为 BackendAddressPool:
获取负载均衡器:
$lb = Get-AzureRMLoadBalancer `
-ResourceGroupName myResourceGroupLoadBalancer `
-Name myLoadBalancer
$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]
Set-AzureRmNetworkInterface -NetworkInterface $nic
后续步骤
在本教程中,你已创建了一个负载均衡器并已将 VM 附加到它。 你已了解如何:
- 创建 Azure 负载均衡器
- 创建负载均衡器运行状况探测
- 创建负载均衡器流量规则
- 使用自定义脚本扩展创建基本的 IIS 站点
- 创建虚拟机并将其附加到负载均衡器
- 查看负载均衡器的实际运行情况
- 在负载均衡器中添加和删除 VM
请转到下一教程,了解如何管理 VM 网络。
立即访问http://market.azure.cn
如何在 Azure 中均衡 Windows 虚拟机负载以创建具有高可用性的应用程序的更多相关文章
- 如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序
负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性. 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性. 你将学习如何执行以下操作: 创建 Azure 负载 ...
- 如何在 Azure 中标记 Windows 虚拟机
本文介绍在 Azure 中通过 Azure 资源管理器标记 Windows 虚拟机的不同方式.标记是用户定义的键/值对,可直接放置在资源或资源组中.针对每个资源和资源组,Azure 当前支持最多 15 ...
- 如何在 Azure 中自定义 Windows 虚拟机
若要以快速一致的方式配置虚拟机 (VM),通常需要某种形式的自动化. 自定义 Windows VM 的一种常用方法是使用适用于 Windows 的自定义脚本扩展. 本教程介绍如何执行下列操作: 使用自 ...
- 在 Azure 中管理 Windows 虚拟机的可用性
了解如何设置和管理多个虚拟机,以确保 Azure 中 Windows 应用程序的高可用性. 也可以管理 Linux 虚拟机的可用性. Note Azure 具有用于创建和处理资源的两个不同的部署模型: ...
- Azure 中的 Windows 虚拟机概述
Azure 虚拟机 (VM) 是 Azure 提供的多种可缩放按需分配计算资源之一. 通常情况下,如果需要以更大的力度(相对于其他控制选项)控制计算环境,则应选择 VM. 本文介绍创建 VM 之前的注 ...
- 在 Azure 中的 Windows 虚拟机上使用 SSL 证书保护 IIS Web 服务器
若要保护 Web 服务器,可以使用安全套接字层 (SSL) 证书来加密 Web 流量. 这些 SSL 证书可存储在 Azure Key Vault 中,并可安全部署到 Azure 中的 Windows ...
- 排查在 Azure 中新建 Windows VM 时遇到的部署问题
尝试创建新的 Azure 虚拟机 (VM) 时,遇到的常见错误是预配失败或分配失败. 当由于准备步骤不当,或者在从门户捕获映像期间选择了错误的设置而导致 OS 映像无法加载时,将发生预配失败. 当群集 ...
- 如何在 Azure 中的经典 Windows 虚拟机上设置终结点
在 Azure 中使用经典部署模型创建的所有 Windows 虚拟机都可以通过专用网络通道与同一云服务或虚拟网络中的其他虚拟机自动通信. 但是,Internet 或其他虚拟网络中的计算机需要终结点将入 ...
- 使用windows远程桌面连接Windows Azure中的Ubuntu虚拟机
1.创建ubuntu虚拟机,这里同样不再赘述,创建过程和创建Windows虚拟机基本一样,只是登录可以选择密钥注入或者用户名密码(为了方便我选择了用户名密码认证),创建完成后,查看虚拟机详情中的端口信 ...
随机推荐
- CentOS 6.5 网络服务器功能的实现①:运用bind搭建基本的DNS服务器
何谓DNS服务?简而言之,DNS服务在互联网中可以实现域名解析(把域名转换成网络可以识别的IP地址). 名词解释①:正向解析:域名解析IP地址:反向解析:IP地址解析域名. DNS服务的正/反向区域解 ...
- 文件句柄FileDescriptor的hanle/fd两个字段分析
对于FileInputStream/FileOutputStream/RandomAccessFile,使用handle来表示底层的文件句柄 对于ServerSocket/Socket,使用fd来表示 ...
- WPF中的Visual Tree和Logical Tree与路由事件
1.Visual Tree和Logical TreeLogical Tree:逻辑树,WPF中用户界面有一个对象树构建而成,这棵树叫做逻辑树,元素的声明分层结构形成了所谓的逻辑树!!Visual Tr ...
- 大佬带你深入浅出Lua虚拟机
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:郑小辉 | 腾讯 游戏客户端开发高级工程师 写在前面:本文所有的文字都是我手工一个一个敲的,以及本文 ...
- Python 工匠:编写条件分支代码的技巧
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 作者:朱雷 | 腾讯IEG高级工程师 『Python 工匠』是什么? 我一直觉得编程某种意义是一门『手艺』 ...
- NAT介绍
NAT 即网络地址转换NAT作用:实现内网IP地址和公网IP地址之间的转换可以有效地缓解IP地址危机可以隐藏内网地址实现负载均衡实现内网和内网之间的通信 NAT分类:分类静态NAT:将内网IP地址一对 ...
- django2.1---后台管理 admin 字段内容过长,省略号替代
用django admin做后台的时候, 有些字段内容太长,像文章,长评论,新闻等可以限制显示长度,超出部分用...代替 1.在model.py中 def short_content(self): i ...
- C++标准模板库STL
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的代码 ...
- Java基础——Servlet(五)
哈哈哈...学习Servlet学了半个多月,因为中间有比较灰心的时候,有几天是啥都不学了的状态,看了好几部励志的电影.呃~还是得继续吧.本来计划是好好夯实这里的基础,结果在网找到了介绍比较全面的视频, ...
- git使用基本教程
黑马的视频,以前看过廖雪峰的git,总是学不懂,这次终于看会了,结合视频更佳,红色字是重点. 基于linux下面git百度云视频教程:http://pan.baidu.com/s/1bpk472B 密 ...