通过


教程:在 Azure 中对 Windows 虚拟机进行负载均衡,以使用 Azure PowerShell 创建高度可用的应用程序

适用于:✔️ Windows 虚拟机 ✔️ 统一缩放集

负载均衡通过跨多个虚拟机分散传入请求来提供更高级别的可用性。 在本教程中,你将了解分发流量并提供高可用性的 Azure 负载均衡器的不同组件。 你将学会如何:

  • 创建 Azure 负载均衡器
  • 创建负载均衡器运行状况探测
  • 创建负载均衡器流量规则
  • 使用自定义脚本扩展创建基本 IIS 站点
  • 创建虚拟机并附加到负载均衡器
  • 查看运行中的负载均衡器
  • 在负载均衡器中添加和删除 VM

Azure 负载均衡器概述

Azure 负载均衡器是一个第 4 层(TCP、UDP)负载均衡器,它通过在正常的 VM 之间分配传入流量来提供高可用性。 负载均衡器运行状况探测器监视每个 VM 上的给定端口,并且仅将流量分发到正常运行的 VM。

定义包含一个或多个公共 IP 地址的前端 IP 配置。 此前端 IP 配置允许负载均衡器和应用程序通过 Internet 访问。

虚拟机使用其虚拟网络接口卡(NIC)连接到负载均衡器。 若要将流量分发到 VM,后端地址池包含连接到负载均衡器的虚拟 (NIC) 的 IP 地址。

若要控制流量流,请为映射到 VM 的特定端口和协议定义负载均衡器规则。

启动 Azure Cloud Shell

Azure Cloud Shell 是免费的交互式 shell,可以使用它运行本文中的步骤。 它预装了常用的 Azure 工具,并已配置好以便与您的帐户一起使用。

若要打开 Cloud Shell,只需要从代码块的右上角选择“试一试”。 您还可以通过访问 https://shell.azure.com/powershell 在单独的浏览器标签页中启动 Cloud Shell。 选择“复制”以复制代码块,将其粘贴到 Cloud Shell 中,然后按 Enter 来运行它。

创建 Azure 负载均衡器

本部分详细介绍了如何创建和配置负载均衡器的每个组件。 在创建负载均衡器之前,请使用 New-AzResourceGroup 创建资源组。 以下示例在 EastUS 位置创建名为 myResourceGroupLoadBalancer 的资源组:

New-AzResourceGroup `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS"

创建公共 IP 地址

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

$publicIP = New-AzPublicIpAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -AllocationMethod "Static" `
  -Name "myPublicIP"

创建负载均衡器

使用 New-AzLoadBalancerFrontendIpConfig 创建前端 IP 池。 以下示例创建名为 myFrontEndPool 的前端 IP 池并附加 myPublicIP 地址:

$frontendIP = New-AzLoadBalancerFrontendIpConfig `
  -Name "myFrontEndPool" `
  -PublicIpAddress $publicIP

使用 New-AzLoadBalancerBackendAddressPoolConfig 创建一个后端地址池。 在接下来的步骤中,各个 VM 将连接到该后端池。 以下示例创建名为 myBackEndPool 的后端地址池:

$backendPool = New-AzLoadBalancerBackendAddressPoolConfig `
  -Name "myBackEndPool"

现在,使用 New-AzLoadBalancer 创建负载均衡器。 以下示例使用前面步骤中创建的前端和后端 IP 池创建名为 myLoadBalancer 的负载均衡器:

$lb = New-AzLoadBalancer `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myLoadBalancer" `
  -Location "EastUS" `
  -FrontendIpConfiguration $frontendIP `
  -BackendAddressPool $backendPool

创建健康探测器

若要允许负载均衡器监视应用的状态,请使用健康探测。 健康探测器根据虚拟机对健康检查的响应动态地在负载均衡器轮转池中添加或删除虚拟机。 默认情况下,VM 会在连续两次失败后从负载均衡器分发中删除,间隔为 15 秒。 您可以基于协议或特定的运行状况检查页面为您的应用创建健康探测。

以下示例创建 TCP 探测。 还可以创建自定义 HTTP 探测,以便进行更精细的运行状况检查。 使用自定义 HTTP 探测时,必须创建运行状况检查页,例如 healthcheck.aspx。 探测必须返回 HTTP 200 成功 响应,以便负载均衡器将主机保留在轮换中。

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

Add-AzLoadBalancerProbeConfig `
  -Name "myHealthProbe" `
  -LoadBalancer $lb `
  -Protocol tcp `
  -Port 80 `
  -IntervalInSeconds 15 `
  -ProbeCount 2

若要应用运行状况探测,请使用 Set-AzLoadBalancer 更新负载均衡器:

Set-AzLoadBalancer -LoadBalancer $lb

创建负载均衡器规则

负载均衡器规则用于定义将流量分配给 VM 的方式。 定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 为了确保只有健康的 VM 接收流量,你还要定义要使用的健康探测。

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

$probe = Get-AzLoadBalancerProbeConfig -LoadBalancer $lb -Name "myHealthProbe"

Add-AzLoadBalancerRuleConfig `
  -Name "myLoadBalancerRule" `
  -LoadBalancer $lb `
  -FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
  -BackendAddressPool $lb.BackendAddressPools[0] `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80 `
  -Probe $probe

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

Set-AzLoadBalancer -LoadBalancer $lb

配置虚拟网络

在部署某些 VM 并可以测试负载均衡器之前,请创建支持的虚拟网络资源。 有关虚拟网络的详细信息,请参阅 管理 Azure 虚拟网络 教程。

创建网络资源

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

# Create subnet config
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
  -Name "mySubnet" `
  -AddressPrefix 192.168.1.0/24

# Create the virtual network
$vnet = New-AzVirtualNetwork `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -Name "myVnet" `
  -AddressPrefix 192.168.0.0/16 `
  -Subnet $subnetConfig

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

for ($i=1; $i -le 3; $i++)
{
   New-AzNetworkInterface `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -Name myVM$i `
     -Location "EastUS" `
     -Subnet $vnet.Subnets[0] `
     -LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
}

创建虚拟机

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

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

$availabilitySet = New-AzAvailabilitySet `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myAvailabilitySet" `
  -Location "EastUS" `
  -Sku aligned `
  -PlatformFaultDomainCount 2 `
  -PlatformUpdateDomainCount 2

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

$cred = Get-Credential

现在,可使用 New-AzVM 创建 VM。 以下示例创建三个 VM 和所需的虚拟网络组件(如果它们尚不存在):

for ($i=1; $i -le 3; $i++)
{
    New-AzVm `
        -ResourceGroupName "myResourceGroupLoadBalancer" `
        -Name "myVM$i" `
        -Location "East US" `
        -VirtualNetworkName "myVnet" `
        -SubnetName "mySubnet" `
        -SecurityGroupName "myNetworkSecurityGroup" `
        -OpenPorts 80 `
        -AvailabilitySetName "myAvailabilitySet" `
        -Credential $cred `
        -AsJob
}

-AsJob 参数将 VM 创建为后台任务,因此 PowerShell 会提示你返回。 可以使用 Job cmdlet 查看后台作业的详细信息。 创建和配置所有三个 VM 需要几分钟时间。

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

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

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

for ($i=1; $i -le 3; $i++)
{
   Set-AzVMExtension `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -ExtensionName "IIS" `
     -VMName myVM$i `
     -Publisher Microsoft.Compute `
     -ExtensionType CustomScriptExtension `
     -TypeHandlerVersion 1.8 `
     -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
     -Location EastUS
}

测试负载均衡器

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

Get-AzPublicIPAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myPublicIP" | select IpAddress

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

运行 IIS 网站

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

添加和删除 VM

可能需要对运行应用的 VM 执行维护,例如安装 OS 更新。 若要处理应用流量增加的问题,可能需要添加其他 VM。 本部分介绍如何从负载均衡器中删除或添加 VM。

从负载均衡器中删除 VM

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

$nic = Get-AzNetworkInterface `
    -ResourceGroupName "myResourceGroupLoadBalancer" `
    -Name "myVM2"
$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$null
Set-AzNetworkInterface -NetworkInterface $nic

你可以强制刷新浏览器,以查看负载均衡器如何将流量分配到运行应用程序的其余两个虚拟机上。 现在可以在 VM 上执行维护,例如安装 OS 更新或执行 VM 重启。

将 VM 添加到负载均衡器

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

获取负载均衡器:

$lb = Get-AzLoadBalancer `
    -ResourceGroupName myResourceGroupLoadBalancer `
    -Name myLoadBalancer 
$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]
Set-AzNetworkInterface -NetworkInterface $nic

后续步骤

在本教程中,你创建了一个负载均衡器并向其附加了 VM。 你已了解如何执行以下操作:

  • 创建 Azure 负载均衡器
  • 创建负载均衡器运行状况探测
  • 创建负载均衡器流量规则
  • 使用自定义脚本扩展创建基本 IIS 站点
  • 创建虚拟机并附加到负载均衡器
  • 查看运行中的负载均衡器
  • 在负载均衡器中添加和删除 VM

请继续学习下一教程,了解如何管理 VM 网络。