如何在 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 的资源组:

PowerShell复制

New-AzureRmResourceGroup`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast

创建公共 IP 地址

若要通过 Internet 访问应用,负载均衡器需要具有一个公共 IP 地址。 使用New-AzureRmPublicIpAddress创建一个公共 IP 地址。 以下示例在 myResourceGroupLoadBalancer 资源组中创建名为 myPublicIP 的公共 IP 地址:

PowerShell复制

$publicIP=New-AzureRmPublicIpAddress`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-AllocationMethodStatic `-NamemyPublicIP

创建负载均衡器

使用New-AzureRmLoadBalancerFrontendIpConfig创建一个前端 IP 地址。 以下示例创建名为 myFrontEndPool 的前端 IP 地址:

PowerShell复制

$frontendIP=New-AzureRmLoadBalancerFrontendIpConfig`-NamemyFrontEndPool `-PublicIpAddress$publicIP

使用New-AzureRmLoadBalancerBackendAddressPoolConfig创建一个后端地址池。 以下示例创建名为 myBackEndPool 的后端地址池:

PowerShell复制

$backendPool=New-AzureRmLoadBalancerBackendAddressPoolConfig-NamemyBackEndPool

现在,使用New-AzureRmLoadBalancer创建负载均衡器。 以下示例使用 myPublicIP 地址创建名为 myLoadBalancer 的负载均衡器:

PowerShell复制

$lb=New-AzureRmLoadBalancer`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyLoadBalancer `-LocationChinaEast `-FrontendIpConfiguration$frontendIP`-BackendAddressPool$backendPool

创建运行状况探测器

若要允许负载均衡器监视应用的状态,可以使用运行状况探测器。 运行状况探测器基于其对运行状况检查的响应,从负载均衡器中动态添加或删除 VM。 默认情况下,在 15 秒时间间隔内发生两次连续的故障后,会从负载均衡器分布中删除 VM。 可以为应用创建基于协议或特定运行状况检查页面的运行状况探测器。

以下示例创建一个 TCP 探测器。 还可创建自定义 HTTP 探测器,以便执行更精细的运行状况检查。 使用自定义 HTTP 探测器时,必须创建运行状况检查页,例如 healthcheck.aspx。 探测器必须为负载均衡器返回 HTTP 200 OK 响应,以保持主机处于旋转状态。

若要创建 TCP 运行状况探测器,请使用Add-AzureRmLoadBalancerProbeConfig。 以下示例创建名为 myHealthProbe 的运行状况探测器,用于监视每个 VM:

PowerShell复制

Add-AzureRmLoadBalancerProbeConfig`-NamemyHealthProbe `-LoadBalancer$lb`-Protocoltcp `-Port80`-IntervalInSeconds15`-ProbeCount2

使用Set-AzureRmLoadBalancer更新负载均衡器:

PowerShell复制

Set-AzureRmLoadBalancer-LoadBalancer$lb

创建负载均衡器规则

负载均衡器规则用于定义将流量分配给 VM 的方式。 定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 若要确保仅正常运行的 VM 接收流量,还需定义要使用的运行状况探测器。

使用Add-AzureRmLoadBalancerRuleConfig创建一个负载均衡器规则。 以下示例创建名为 myLoadBalancerRule 的负载均衡器规则并均衡端口 80 上的流量:

PowerShell复制

$probe=Get-AzureRmLoadBalancerProbeConfig-LoadBalancer$lb-NamemyHealthProbeAdd-AzureRmLoadBalancerRuleConfig`-NamemyLoadBalancerRule `-LoadBalancer$lb`-FrontendIpConfiguration$lb.FrontendIpConfigurations[0] `-BackendAddressPool$lb.BackendAddressPools[0] `-ProtocolTcp `-FrontendPort80`-BackendPort80`-Probe$probe

使用Set-AzureRmLoadBalancer更新负载均衡器:

PowerShell复制

Set-AzureRmLoadBalancer-LoadBalancer$lb

配置虚拟网络

需要先创建提供支持的虚拟网络资源,然后才能部署某些 VM 并测试均衡器。 有关虚拟网络的详细信息,请参阅管理 Azure 虚拟网络教程。

创建网络资源

使用New-AzureRmVirtualNetwork创建虚拟网络。 以下示例创建包含 mySubnet 的名为 myVnet 的虚拟网络:

PowerShell复制

# Create subnet config$subnetConfig=New-AzureRmVirtualNetworkSubnetConfig`-NamemySubnet `-AddressPrefix192.168.1.0/24# Create the virtual network$vnet=New-AzureRmVirtualNetwork`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-NamemyVnet `-AddressPrefix192.168.0.0/16`-Subnet$subnetConfig

使用New-AzureRmNetworkSecurityRuleConfig创建网络安全组规则,然后使用New-AzureRmNetworkSecurityGroup创建网络安全组。 使用Set-AzureRmVirtualNetworkSubnetConfig将网络安全组添加到子网,然后使用Set-AzureRmVirtualNetwork更新虚拟网络。

以下示例创建一个名为 myNetworkSecurityGroup 的网络安全组规则,并将其应用于 mySubnet:

PowerShell复制

# Create security rule config$nsgRule=New-AzureRmNetworkSecurityRuleConfig`-NamemyNetworkSecurityGroupRule `-ProtocolTcp `-DirectionInbound `-Priority1001`-SourceAddressPrefix* `-SourcePortRange* `-DestinationAddressPrefix* `-DestinationPortRange80`-AccessAllow# Create the network security group$nsg=New-AzureRmNetworkSecurityGroup`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-NamemyNetworkSecurityGroup `-SecurityRules$nsgRule# Apply the network security group to a subnetSet-AzureRmVirtualNetworkSubnetConfig`-VirtualNetwork$vnet`-NamemySubnet `-NetworkSecurityGroup$nsg`-AddressPrefix192.168.1.0/24# Update the virtual networkSet-AzureRmVirtualNetwork-VirtualNetwork$vnet

使用New-AzureRmNetworkInterface创建虚拟 NIC。 以下示例创建三个虚拟 NIC。 (在以下步骤中针对为应用创建的每个 VM 各使用一个虚拟 NIC)。 可随时创建其他虚拟 NIC 和 VM,并将其添加到负载均衡器:

PowerShell复制

for($i=1;$i-le3;$i++){New-AzureRmNetworkInterface`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyNic$i`-LocationChinaEast `-Subnet$vnet.Subnets[0] `-LoadBalancerBackendAddressPool$lb.BackendAddressPools[0]}

创建虚拟机

若要提高应用的高可用性,请将 VM 放置在可用性集中。

使用New-AzureRmAvailabilitySet创建一个可用性集。 以下示例创建名为 myAvailabilitySet 的可用性集:

PowerShell复制

$availabilitySet=New-AzureRmAvailabilitySet`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyAvailabilitySet `-LocationChinaEast `-Managed`-PlatformFaultDomainCount3`-PlatformUpdateDomainCount2

使用New-AzureRmNetworkInterface设置 VM 的管理员用户名和密码:

PowerShell复制

$cred=Get-Credential

现在,可使用New-AzureRmVM创建 VM。 下例创建三个 VM:

PowerShell复制

for($i=1;$i-le3;$i++){$vm=New-AzureRmVMConfig`-VMNamemyVM$i`-VMSizeStandard_D1 `-AvailabilitySetId$availabilitySet.Id$vm=Set-AzureRmVMOperatingSystem`-VM$vm`-Windows`-ComputerNamemyVM$i`-Credential$cred`-ProvisionVMAgent`-EnableAutoUpdate$vm=Set-AzureRmVMSourceImage`-VM$vm`-PublisherNameMicrosoftWindowsServer `-OfferWindowsServer `-Skus2016-Datacenter `-Versionlatest$vm=Set-AzureRmVMOSDisk`-VM$vm`-NamemyOsDisk$i`-DiskSizeInGB128`-CreateOptionFromImage `-CachingReadWrite$nic=Get-AzureRmNetworkInterface`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyNic$i$vm=Add-AzureRmVMNetworkInterface-VM$vm-Id$nic.IdNew-AzureRmVM`-ResourceGroupNamemyResourceGroupLoadBalancer `-LocationChinaEast `-VM$vm}

创建和配置所有三个 VM 需要几分钟时间。

使用自定义脚本扩展安装 IIS

在有关如何自定义 Windows 虚拟机的上一教程中,你已了解如何使用 Windows 的自定义脚本扩展自动执行 VM 自定义。 可使用相同的方法在 VM 上安装和配置 IIS。

使用Set-AzureRmVMExtension安装自定义脚本扩展。 该扩展运行powershell Add-WindowsFeature Web-Server来安装 IIS Web 服务器,然后更新 Default.htm 页以显示 VM 的主机名:

PowerShell复制

for($i=1;$i-le3;$i++){Set-AzureRmVMExtension`-ResourceGroupNamemyResourceGroupLoadBalancer `-ExtensionNameIIS `-VMNamemyVM$i`-PublisherMicrosoft.Compute `-ExtensionTypeCustomScriptExtension `-TypeHandlerVersion1.4`-SettingString'{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}'`-LocationChinaEast}

测试负载均衡器

使用Get-AzureRmPublicIPAddress获取负载均衡器的公共 IP 地址。 以下示例获取前面创建的“myPublicIP”的 IP 地址:

PowerShell复制

Get-AzureRmPublicIPAddress`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyPublicIP | select IpAddress

然后,可将公共 IP 地址输入 Web 浏览器中。 网站随即显示,其中包括负载均衡器将流量分发到的 VM 的主机名,如下例所示:

若要查看负载均衡器如何在运行应用的所有三个 VM 之间分发流量,可强制刷新 web 浏览器。

添加和删除 VM

建议对运行应用的 VM 执行维护,例如安装 OS 更新。 若要应对应用增加的流量,建议添加更多 VM。 本部分演示了如何在负载均衡器中删除或添加 VM。

从负载均衡器中删除 VM

使用Get-AzureRmNetworkInterface获取网络接口卡,然后将虚拟 NIC 的 LoadBalancerBackendAddressPools 属性设置为 $null。 最后,更新虚拟 NIC:

PowerShell复制

$nic=Get-AzureRmNetworkInterface`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyNic2$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$nullSet-AzureRmNetworkInterface-NetworkInterface$nic

若要查看负载均衡器如何在运行应用的其余两个 VM 之间分发流量,可强制刷新 web 浏览器。 现在可以对 VM 执行维护,例如安装 OS 更新或执行 VM 重新启动。

将 VM 添加到负载均衡器

执行 VM 维护后,或者如果需要扩展容量,请通过Get-AzureRMLoadBalancer将虚拟 NIC 的 LoadBalancerBackendAddressPools 属性设置为 BackendAddressPool:

获取负载均衡器:

PowerShell复制

$lb=Get-AzureRMLoadBalancer`-ResourceGroupNamemyResourceGroupLoadBalancer `-NamemyLoadBalancer$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]Set-AzureRmNetworkInterface-NetworkInterface$nic

后续步骤

在本教程中,你已创建了一个负载均衡器并已将 VM 附加到它。 你已了解如何:

创建 Azure 负载均衡器

创建负载均衡器运行状况探测

创建负载均衡器流量规则

使用自定义脚本扩展创建基本的 IIS 站点

创建虚拟机并将其附加到负载均衡器

查看负载均衡器的实际运行情况

在负载均衡器中添加和删除 VM

请转到下一教程,了解如何管理 VM 网络。

管理 VM 和虚拟网络

立即访问http://market.azure.cn

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容