练习 - 配置公共负载均衡器

已完成

可使用 Azure 门户、PowerShell 或 Azure CLI 配置 Azure 负载均衡器。

在医疗保健组织中,你希望根据患者门户 Web 服务器的运行状况对客户端流量进行负载均衡,以提供一致的响应。 可用性集中的两台虚拟机 (VM) 可以充当医疗保健门户 Web 应用程序。

你将在此处创建负载均衡器资源,并使用它在虚拟机之间分配负载。

部署患者门户 Web 应用程序

首先,在单个可用性集中的两台虚拟机上部署患者门户应用程序。 为节约时间,先运行脚本来创建此应用程序。 脚本:

  • 创建用于虚拟机的虚拟网络和网络基础结构。
  • 在此虚拟网络中创建两台虚拟机。

要部署患者门户 Web 应用程序,请执行以下操作:

  1. 创建新的资源组。 在步骤 3 中,将 [沙盒资源组名称] 替换为自己的资源组名称

  2. 在 Azure Cloud Shell 中运行以下 git clone 命令。 该命令会克隆包含应用的源的存储库,并运行 GitHub 中的设置脚本。 然后转到已克隆存储库的目录。

    git clone https://github.com/MicrosoftDocs/mslearn-improve-app-scalability-resiliency-with-load-balancer.git
    cd mslearn-improve-app-scalability-resiliency-with-load-balancer
    
  3. 顾名思义,该脚本将在单个可用性集中生成两台虚拟机。 运行该脚本需要大约 2 分钟。

    bash create-high-availability-vm-with-sets.sh <rgn>[sandbox resource group name]</rgn>
    
  4. 脚本运行完成后,在 Azure 门户菜单上或在门户主页中,选择“资源组”,然后选择 [沙盒资源组名称] 资源组。 查看脚本创建的资源。

创建负载均衡器

现在,我们来创建负载均衡器。

  1. Azure 门户菜单上或在“主页”中,选择“Azure 服务”下的“创建资源”。 此时会显示“创建资源”窗格。

  2. 在“搜索服务和市场”搜索框中,输入“负载均衡器”,然后按 Enter

  3. 从随后出现的列表中,选择“负载均衡器 - Microsoft”。 然后选择“创建”。

    Create a Load Balancer instance in the Azure portal.

  4. 在“基本信息”选项卡上,为每个设置输入以下值:

    设置
    项目详细信息
    订阅 订阅
    资源组 选择资源组。 例如,learn-ts-loadbalancer-rg
    实例详细信息
    名称 输入唯一名称。 例如,Pub-LB-PatientsPortal。
    区域 选择创建虚拟机的位置。
    SKU 标准
    类型 Public
    Regional

    Screenshot that shows the Basics tab of the Create a Load Balancer screen in the Azure portal.

添加前端 IP 配置

  1. 选择“下一步: 前端 IP 配置”。

  2. 选择“+ 添加前端 IP 配置”。 此时将显示“添加前端 IP 配置”窗格。

  3. 为每个设置输入以下值。

    设置
    名称 输入前端 IP 配置的唯一名称。 例如 myFrontendIP
    虚拟网络 选择“bePortalVnet”
    子网 选择“bePortalSubnet”
    分配 选择“动态”

    Screenshot that shows the completed settings for the Add frontend IP configuration.

  4. 要关闭对话框,请选择“添加”。 此时将再次显示“创建负载均衡器”窗格。

添加后端池

  1. 选择“下一步: 后端池”。

  2. 选择“+ 添加后端池”。 此时将显示“添加后端池”窗格。

  3. 为每个设置输入以下值。

    设置
    名称 输入后端池的唯一名称。 例如,bepool-http。
    虚拟网络 确认已选择“bePortalVnet”
  4. 在“IP 配置”下选择“添加”。 此时将显示“将 IP 配置添加到后端池”窗格。

  5. 在“虚拟机”下,选择“webVM1”和“webVM2”虚拟机,然后选择“添加”。

    Screenshot that shows the settings on the Add IP configurations to backend pool pane.

  6. 此时将再次显示“添加后端池”屏幕。 在“IP 配置”下,选择“webVM1”和“webVM2”虚拟机,然后选择“保存”。 此时将再次显示“创建负载均衡器”屏幕。

    Screenshot that shows the settings completed on the Add backend pool screen.

添加负载均衡规则

最后,我们来创建负载均衡器规则。

  1. 选择“下一步: 入站规则”。

  2. 在“负载均衡规则”部分,选择“+ 添加负载均衡规则”。 此时将显示“添加负载均衡规则”窗格。

  3. 为每个设置输入以下值。

    设置
    名称 负载均衡规则的名称。 例如,lbrule-http。
    IP 版本 IPv4
    前端 IP 地址 选择前面命名的前端 IP 地址。
    后端池 选择前面命名的后端池。 例如,bepool-http。
    协议 TCP
    端口 输入 80(默认值)。
    后端端口 输入 80(默认值)。
    运行状况探测 选择“新建”链接。 此时将显示“添加运行状况探测”对话框。
  4. 为每个设置输入以下值。

    设置
    名称 运行状况探测的名称。 例如,healthprobe-http。
    协议 TCP
    端口 输入 80(默认值)。
    时间间隔 输入 5(默认值)。 此值是探测之间的时长。
  5. 选择“保存”以关闭该对话框。 此时将再次显示“添加负载均衡规则”窗格。

  6. 继续为每个设置输入以下值。

    设置
    会话持续性* (默认)
    空闲超时(分钟) 选择“4”(默认值)。 此值是不依赖于客户端发送 keep-alive 消息,将 TCP 或 HTTP 连接保持打开的时间。
    浮动 IP 禁用(默认值)。

    Add a new load balancing rule.

  7. 选择“保存”以完成负载均衡规则配置

  8. 此时将再次显示“创建负载均衡器”屏幕。 选择“查看 + 创建”。

  9. 验证通过后,选择“创建”。 部署完成后,选择“转到资源”。

  10. 在“概述”页上,复制并保存“公共 IP 地址”。 可能必须选择“查看更多...”才能查看公共 IP 地址。

创建 IP 地址

首先,我们需要负载均衡器的公共 IP 地址。

  1. 在 Cloud Shell 中,通过运行以下命令启动 PowerShell:

    pwsh
    
  2. 在 PowerShell 中,创建新的公共 IP 地址:

    $Location = $(Get-AzureRmResourceGroup -ResourceGroupName <rgn>[sandbox resource group name]</rgn>).Location
    
    $publicIP = New-AzPublicIpAddress `
      -ResourceGroupName <rgn>[sandbox resource group name]</rgn> `
      -Location $Location `
      -AllocationMethod "Static" `
      -Name "myPublicIP"
    
  3. 使用 New-AzLoadBalancerFrontendIpConfig cmdlet 创建一个前端 IP。 以下代码会创建名为 myFrontEnd 的前端 IP 配置并附加 myPublicIP 地址。

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

创建负载均衡器

使用 PowerShell 配置负载均衡器时,必须先创建后端地址池、运行状况探测和规则,然后再创建均衡器本身。

  1. 运行 New-AzLoadBalancerBackendAddressPoolConfig cmdlet 创建一个后端地址池。 你将在最后的步骤中将虚拟机附加到此后端池。 以下示例创建名为“myBackEndPool”的后端地址池:

    $backendPool = New-AzLoadBalancerBackendAddressPoolConfig -Name "myBackEndPool"
    
  2. 创建运行状况探测,以支持负载均衡器监视医疗保健门户的状态。 运行状况探测基于其对运行状况检查的响应,从负载均衡器中动态添加或删除虚拟机。

    $probe = New-AzLoadBalancerProbeConfig `
      -Name "myHealthProbe" `
      -Protocol http `
      -Port 80 `
      -IntervalInSeconds 5 `
      -ProbeCount 2 `
      -RequestPath "/"
    
  3. 现在,需要一个负载均衡器规则来定义将流量分配给虚拟机的方式。 定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 若要确保仅正常运行的虚拟机接收流量,还需定义要使用的运行状况探测。

    $lbrule = New-AzLoadBalancerRuleConfig `
      -Name "myLoadBalancerRule" `
      -FrontendIpConfiguration $frontendIP `
      -BackendAddressPool $backendPool `
      -Protocol Tcp `
      -FrontendPort 80 `
      -BackendPort 80 `
      -Probe $probe
    
  4. 现在,可以通过运行 New-AzLoadBalancer cmdlet 创建基本负载均衡器:

    $lb = New-AzLoadBalancer `
      -ResourceGroupName <rgn>[sandbox resource group name]</rgn> `
      -Name 'MyLoadBalancer' `
      -Location $Location `
      -FrontendIpConfiguration $frontendIP `
      -BackendAddressPool $backendPool `
      -Probe $probe `
      -LoadBalancingRule $lbrule
    
  5. 通过更新脚本创建以使用后端池信息的网络接口,将虚拟机连接到后端池。

    $nic1 = Get-AzNetworkInterface -ResourceGroupName <rgn>[sandbox resource group name]</rgn> -Name "webNic1"
    $nic2 = Get-AzNetworkInterface -ResourceGroupName <rgn>[sandbox resource group name]</rgn> -Name "webNic2"
    
    $nic1.IpConfigurations[0].LoadBalancerBackendAddressPools = $backendPool
    $nic2.IpConfigurations[0].LoadBalancerBackendAddressPools = $backendPool
    
    Set-AzNetworkInterface -NetworkInterface $nic1 -AsJob
    Set-AzNetworkInterface -NetworkInterface $nic2 -AsJob
    
  6. 运行以下命令,以获取负载均衡器的公共 IP 地址和网站的 URL:

    Write-Host http://$($(Get-AzPublicIPAddress `
      -ResourceGroupName <rgn>[sandbox resource group name]</rgn> `
      -Name "myPublicIP").IpAddress)
    

创建负载均衡器

让我们使用 Azure CLI 来创建负载均衡器及其相关资源。

  1. 创建新的公共 IP 地址。

    az network public-ip create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --allocation-method Static \
      --name myPublicIP
    
  2. 创建负载均衡器。

    az network lb create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --name myLoadBalancer \
      --public-ip-address myPublicIP \
      --frontend-ip-name myFrontEndPool \
      --backend-pool-name myBackEndPool
    
  3. 要允许负载均衡器监视医疗保健门户的状态,请创建运行状况探测。 运行状况探测可基于其对运行状况检查的响应,从负载均衡器循环中动态添加或移除虚拟机。

    az network lb probe create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --lb-name myLoadBalancer \
      --name myHealthProbe \
      --protocol tcp \
      --port 80  
    
  4. 现在,需要一个负载均衡器规则来定义将流量分配给虚拟机的方式。 定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 若要确保仅正常运行的虚拟机接收流量,还需定义要使用的运行状况探测。

    az network lb rule create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --lb-name myLoadBalancer \
      --name myHTTPRule \
      --protocol tcp \
      --frontend-port 80 \
      --backend-port 80 \
      --frontend-ip-name myFrontEndPool \
      --backend-pool-name myBackEndPool \
      --probe-name myHealthProbe
    
  5. 通过更新在脚本中创建以使用后端池信息的网络接口,将虚拟机连接到后端池。

    az network nic ip-config update \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --nic-name webNic1 \
      --name ipconfig1 \
      --lb-name myLoadBalancer \
      --lb-address-pools myBackEndPool
    
    az network nic ip-config update \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --nic-name webNic2 \
      --name ipconfig1 \
      --lb-name myLoadBalancer \
      --lb-address-pools myBackEndPool
    
  6. 运行以下命令,以获取负载均衡器的公共 IP 地址和网站的 URL:

    echo http://$(az network public-ip show \
                    --resource-group <rgn>[sandbox resource group name]</rgn> \
                    --name myPublicIP \
                    --query ipAddress \
                    --output tsv)
    

测试负载均衡器配置

我们来测试负载均衡器设置,以展示它如何动态处理可用性和运行状况问题。

  1. 在新浏览器选项卡中,转到记下的公共 IP 地址。 浏览器中会显示来自其中一台虚拟机的响应。

  2. 尝试按 Ctrl+F5几次来“强制刷新”,以查看是否会从两台虚拟机随机返回响应。

  3. Azure 门户菜单上或在门户主页中,选择“所有资源”。 选择“webVM1”,然后再选择“停止”。

  4. 返回显示网站的选项卡,并强制刷新网页。 所有请求都从“webVM2”返回。