如何在 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虚拟机基本一样,只是登录可以选择密钥注入或者用户名密码(为了方便我选择了用户名密码认证),创建完成后,查看虚拟机详情中的端口信 ...
随机推荐
- struts和hibernate整合
程序示例: 1.引入jar包 2.实体对象 Dept.java package com.gqx.entity; import java.util.HashSet; import java.util.S ...
- wget命令【转】
http://man.linuxde.net/wget 语法: wget (选项)(参数) 选线 -a<日志文件>:在指定的日志文件中记录资料的执行过程: -A<后缀名>:指定 ...
- Linux-(inotify-tools&rsync)
inotifywait命令 mac中的是:fswatch,fsevents-tools. 1.命令格式: inotifywait [参数] [events] [targetDir] 2.命令功能: 平 ...
- Prim Algoritm(最小生成树)
Prim Algorithm.这个算法可以分为下面几个步骤: 将顶点集V分成两个集合A和B,其中集合A表示目前已经在MST中的顶点,而集合B则表示目前不在MST中的顶点. 在B寻找与集合A连通的最短的 ...
- Netty——高级内置解码器、编码器、ByteBuf
netty通讯需要对数据进行编码,解码,于是我们需要用到netty的编码器.解码器 netty 提供的解码器 DelimiterBasedFrameDecoder 解决TCP的粘包解码器 Stri ...
- 复刻smartbits的国产网络性能测试工具minismb-如何配置Ping报文
复刻smartbits的国产网络性能测试工具minismb,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此以太网测试工具测试任何ip网络设备的端口吞吐率,带宽, ...
- notepad++ jstool 插件安装
notepad++ 格式化显示 网上下载 jstool 插件 放入Notepad++\安装目录的plugins位置下,重启即可使用 插件-->JSTool
- git第六节---git 远程仓库
远程分支类似于本地分支,是指向远程仓库中的文件的指针. 1.远程分支抓取 @git fetch origin dev :拉取远程dev内容 fetch不会对本地仓库内容进行更新,只更新远端commit ...
- UVA 11134 Fabled Rooks(贪心的妙用+memset误用警示)
题目链接: https://cn.vjudge.net/problem/UVA-11134 /* 问题 输入棋盘的规模和车的数量n(1=<n<=5000),接着输入n辆车的所能在的矩阵的范 ...
- C# 在项目中配置Log4net
我们介绍一下在项目中配置log4net,是Apache基金会旗下的. 无论在什么环境中,配置log4net的逻辑都一样. 1)文件配置 首先在项目加载文件中,配置log4net加载项. 在Web项目中 ...