你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 PowerShell 升级基本负载均衡器

重要

2025 年 9 月 30 日,基本负载均衡器将停用。 有关详细信息,请查看官方公告。 如果当前使用的是基本负载均衡器,请确保在停用日期之前将其升级到标准负载均衡器。

Azure 标准负载均衡器通过区域冗余提供丰富的功能和高可用性。 有关负载均衡器 SKU 的详细信息,请参阅比较表

本文介绍一个 PowerShell 模块,该模块会创建一个其配置与基本负载均衡器相同的标准负载均衡器,然后将虚拟机规模集或虚拟机后端池成员与新负载均衡器关联起来。

有关升级模块和过程的深入演练,请查看以下视频:

升级概述

PowerShell 模块执行以下功能:

  • 验证提供的基本负载均衡器方案是否支持升级。
  • 备份基本负载均衡器和虚拟机规模集配置,以便在失败或出错时可以重试。
  • 对于公共负载均衡器,请将前端公共 IP 地址更新为标准 SKU 和静态分配
  • 将配置从基本负载均衡器升级到新的标准负载均衡器,确保配置和功能奇偶一致性。
  • 将虚拟机规模集和虚拟机后端池成员从基本负载均衡器迁移到标准负载均衡器。
  • 创建网络安全组并将其与虚拟机规模集或虚拟机相关联,以确保在标准负载均衡器改为默认拒绝网络策略后,负载均衡的流量到达后端池成员。
  • 升级与虚拟机规模集或虚拟机实例关联的实例级公共 IP 地址
  • 入站 NAT 池升级到虚拟机规模集后端的入站 NAT 规则。 指定 -skipUpgradeNATPoolsToNATRules 可跳过此升级。
  • 记录升级操作以便于审核和故障恢复。

警告

如果后端 VM 或 VMSS 实例没有公共 IP 地址,则迁移内部基本负载均衡器需要执行其他操作,以使后端池能够连接到 Internet。 查看如何为负载均衡器配置出站流量?

注意

如果负载均衡器后端池中的虚拟机规模集在其网络配置中具有公共 IP 地址,则升级到标准 SKU 时,与每个虚拟机规模集实例关联的公共 IP 地址将更改。 这是因为规模集实例级公共 IP 地址无法升级,只能替换为新的标准 SKU 公共 IP。 所有其他公共 IP 地址将通过迁移保留。

注意

如果负载均衡器后面的虚拟机规模集是 Service Fabric 群集,则使用此脚本进行迁移将花费更多时间,对应用程序带来更高的风险,并且将导致故障时间。 有关迁移选项,请查看 Service Fabric 群集负载均衡器升级指南

不支持的方案

  • 包含 IPv6 前端 IP 配置的基本负载均衡器
  • Azure Kubernetes 服务 (AKS) 群集的基本负载均衡器
  • 具有虚拟机规模集后端池成员的基本负载均衡器,且其中一个或多个虚拟机规模集实例启用了 ProtectFromScaleSetActions 实例保护策略
  • 将基本负载均衡器迁移到现有标准负载均衡器

安装“AzureBasicLoadBalancerUpgrade”模块

先决条件

  • PowerShell:建议在 Windows、Linux 和 macOS 等所有平台上使用受支持的 PowerShell 版本 7 或更高版本的 AzureBasicLoadBalancerUpgrade 模块。 但是,支持 Windows 上的 PowerShell 5.1。
  • Az PowerShell 模块:确定是否安装了最新的 Az PowerShell 模块
  • Az.ResourceGraph PowerShell 模块:Az.ResourceGraph PowerShell 模块用于在升级期间查询资源配置,并且与 Az PowerShell 模块分开安装。 如果使用 Install-Module 命令安装 AzureBasicLoadBalancerUpgrade 模块,则会自动添加该模块。

模块安装

PowerShell 库安装模块

PS C:\> Install-Module -Name AzureBasicLoadBalancerUpgrade -Scope CurrentUser -Repository PSGallery -Force

迁移前和迁移后步骤

迁移前步骤

  • 验证你的方案是否受支持
  • 规划迁移期间应用程序停机时间
  • 为流量开发入站和出站连接测试
  • 在虚拟机规模集实例上规划实例级公共 IP 更改(请参阅注释)
  • [建议] 为后端池成员创建网络安全组或向现有网络安全组添加安全规则。 允许通过负载均衡器的流量以及需要在公共标准 SKU 资源上显式允许的任何其他流量
  • [建议] 准备出站连接,采取如何为负载均衡器配置出站流量?中描述的以下方法之一

迁移后的步骤

  • 验证迁移是否成功
  • 通过负载均衡器测试入站应用程序连接
  • 测试从后端池成员到 Internet 的出站连接
  • 对于具有多个后端池的公共负载均衡器,请为每个后端池创建出站规则

使用模块

  1. 使用 Connect-AzAccount 连接到 Azure,如果有多个订阅,请指定基本负载均衡器的订阅 ID。

    PS C:\> Connect-AzAccount -Subscription <SubscriptionId>
    
  2. 找到要升级的负载均衡器。 记下其名称和资源组名称。

  3. 检查基本模块参数:

    • BasicLoadBalancerName [字符串] 必需 - 此参数是要升级的现有基本负载均衡器的名称
    • ResourceGroupName [字符串] 必需 - 此参数是包含基本负载均衡器的资源组名称
    • StandardLoadBalancerName [string] 可选 - 使用此参数可以选择性地为标准负载均衡器配置新名称。 如果未指定,将重复使用基本负载均衡器名称。
    • RecoveryBackupPath [字符串] 可选 - 此参数用于指定存储基本负载均衡器 ARM 模板备份文件的备用路径(默认为当前工作目录)

    提示

    可以通过运行 Get-Help Start-AzBasicLoadBalancerUpgrade -Detailed 来查看高级和恢复方案的其他参数

  4. 运行 Upgrade 命令。

示例:验证方案

验证是否支持基本负载均衡器进行升级

PS C:\> Start-AzBasicLoadBalancerUpgrade -ResourceGroupName <loadBalancerRGName> -BasicLoadBalancerName <basicLBName> -validateScenarioOnly

示例:按名称升级

将基本负载均衡器升级为相同名称的标准负载均衡器,并提供基本负载均衡器名称和资源组名称

PS C:\> Start-AzBasicLoadBalancerUpgrade -ResourceGroupName <loadBalancerRGName> -BasicLoadBalancerName <basicLBName>

示例:升级、更改名称和显示日志

将基本负载均衡器升级为指定名称的标准负载均衡器,并在屏幕上显示记录的输出

PS C:\> Start-AzBasicLoadBalancerUpgrade -ResourceGroupName <loadBalancerRGName> -BasicLoadBalancerName <basicLBName> -StandardLoadBalancerName <newStandardLBName> -FollowLog

示例:使用备用备份路径进行升级

将基本负载均衡器升级为指定名称的标准负载均衡器,并将基本负载均衡器备份文件存储在指定路径

PS C:\> Start-AzBasicLoadBalancerUpgrade -ResourceGroupName <loadBalancerRGName> -BasicLoadBalancerName <basicLBName> -StandardLoadBalancerName <newStandardLBName> -RecoveryBackupPath C:\BasicLBRecovery

示例:验证已完成的迁移

通过传递基本负载均衡器状态文件备份和标准负载均衡器名称来验证已完成的迁移

PS C:\> Start-AzBasicLoadBalancerUpgrade -validateCompletedMigration -basicLoadBalancerStatePath C:\RecoveryBackups\State_mybasiclb_rg-basiclbrg_20220912T1740032148.json

同时迁移具有共享后端成员的多个负载均衡器,通常当应用程序具有内部和外部负载均衡器时

# build array of multiple basic load balancers
PS C:\> $multiLBConfig = @(
    @{
        'standardLoadBalancerName' = 'myStandardInternalLB01' # specifying the standard load balancer name is optional
        'basicLoadBalancer' = (Get-AzLoadBalancer -ResourceGroupName myRG -Name myBasicInternalLB01)
    },
        @{
        'standardLoadBalancerName' = 'myStandardExternalLB02'
        'basicLoadBalancer' = (Get-AzLoadBalancer -ResourceGroupName myRG -Name myBasicExternalLB02)
    }
)
# pass the array of load balancer configurations to the -MultiLBConfig parameter
PS C:\> Start-AzBasicLoadBalancerUpgrade -MultiLBConfig $multiLBConfig

示例:重试失败的虚拟机规模集迁移

提供基本负载均衡器和虚拟机规模集备份状态文件,从而在虚拟机规模集的负载均衡器的升级失败(由错误或脚本终止引起)后重试升级

PS C:\> Start-AzBasicLoadBalancerUpgrade -FailedMigrationRetryFilePathLB C:\RecoveryBackups\State_mybasiclb_rg-basiclbrg_20220912T1740032148.json -FailedMigrationRetryFilePathVMSS C:\RecoveryBackups\VMSS_myVMSS_rg-basiclbrg_20220912T1740032148.json

示例:重试失败的虚拟机迁移

提供基本负载均衡器备份状态文件,从而在虚拟机负载均衡器升级失败(由错误或脚本终止引起)后重试升级

PS C:\> Start-AzBasicLoadBalancerUpgrade -FailedMigrationRetryFilePathLB C:\RecoveryBackups\State_mybasiclb_rg-basiclbrg_20220912T1740032148.json

常见问题

如何列出环境中要迁移的基本负载均衡器?

获取环境中需要迁移的基本负载均衡器列表的一种方法是使用 Azure Resource Graph 查询。 这样的简单查询会列出你有权查看的所有基本负载均衡器。

Resources
| where type == 'microsoft.network/loadbalancers' and sku.name == 'Basic'

'' 我们还编写了一个更复杂的查询,它会根据此模块在验证期间检查的大多数条件评估每个基本负载均衡器的迁移准备情况。 可以在我们的 GitHub 项目中找到 Resource Graph 查询,也可以在 Azure Resource Graph 资源管理器中打开它。

此迁移是否会导致应用程序出现故障时间?

是,因为需要先移除基本负载均衡器才能创建新的标准负载均衡器,所以应用程序会出现故障时间。 请参阅升级需要多长时间?

模块是否会将前端 IP 地址迁移到新的标准负载均衡器?

是的,对于公共和内部负载均衡器,该模块会确保保留前端 IP 地址。 对于公共 IP,会在迁移前将 IP 转换为静态 IP。 对于内部前端,模块将尝试重新分配在删除基本负载均衡器时释放的同一 IP 地址。 如果专用 IP 不可用,脚本将失败(请参阅如果在迁移过程中升级失败,会怎么样?)。

升级需要多长时间?

升级通常会花费几分钟时间来完成脚本。 以下因素可能会导致升级时间延长:

  • 负载均衡器配置的复杂性
  • 后端池成员数
  • 关联的虚拟机规模集或虚拟机的实例计数
  • Service Fabric 群集:升级 Service Fabric 群集最多需要进行大约一个小时的测试

请记住停机时间,并在必要时计划故障转移。

脚本是否会将后端池成员从我的基本负载均衡器迁移到新创建的标准负载均衡器?

是的。 Azure PowerShell 脚本将虚拟机规模集和虚拟机迁移到新创建的标准负载均衡器后端池。

迁移哪些负载均衡器组件?

该脚本会将以下组件从基本负载均衡器迁移到标准负载均衡器:

公共和专用负载均衡器:

  • 运行状况探测:
    • 所有探测将迁移到新的标准负载均衡器
  • 负载均衡规则:
    • 所有负载均衡规则将迁移到新的标准负载均衡器
  • 入站 NAT 规则:
    • 所有用户创建的 NAT 规则将迁移到新的标准负载均衡器
  • 入站 NAT 池:
    • 默认情况下,NAT 池将升级到 NAT 规则
    • 若要改为迁移 NAT 池,请在升级时指定 -skipUpgradeNATPoolsToNATRules 参数
  • 后端池:
    • 所有后端池会迁移到新的标准负载均衡器
    • 所有虚拟机规模集和虚拟机网络接口和 IP 配置将迁移到新的标准负载均衡器
    • 如果虚拟机规模集使用的是滚动升级策略,脚本将在迁移过程中将虚拟机规模集升级策略更新为“手动”,并在迁移完成后将其还原为“滚动”。
  • 实例级公共 IP 地址
    • 对于虚拟机和虚拟机规模集,可将附加的公共 IP 从基本 SKU 转换为标准 SKU。 请注意,升级期间规模集实例公共 IP 将更改;但虚拟机 IP 不会。
  • 从基本负载均衡器到标准负载均衡器的标记

公共负载均衡器:

  • 公共前端 IP 配置
    • 如果公共 IP 是动态 IP,则将其转换为静态 IP
    • 如果公共 IP 使用基本 SKU,则将其更新为标准 SKU
    • 所有关联的公共 IP 都将升级为新的标准负载均衡器
  • 出站规则:
    • 基本负载均衡器不支持配置的出站规则。 该脚本可在标准负载均衡器中创建出站规则,以保留基本负载均衡器的出站行为。 有关出站规则的详细信息,请参阅出站规则
  • 网络安全组
    • 基本负载均衡器不需要网络安全组来支持出站连接。 如果不存在与虚拟机规模集关联的网络安全组,则将创建新的网络安全组来保留相同的功能。 此新建网络安全组将关联到虚拟机规模集后端池成员网络接口。 它允许使用相同的负载均衡规则端口和协议,并保留出站连接。

内部负载均衡器:

  • 专用前端 IP 配置

注意

在内部负载均衡器升级过程中,不会对网络安全组进行配置。 若要详细了解 NSG,请参阅网络安全组

当后端池成员属于多个负载均衡器时,如何迁移?

在后端池成员也是另一个负载均衡器上的后端池的成员(例如,在同一应用程序的内部和外部负载均衡器)中,需要同时迁移基本负载均衡器。 尝试一次迁移一个负载均衡器会混合基本 SKU 和标准 SKU 资源,这是不允许的。 迁移脚本支持此操作,方法是使用 -MultiLBConfig 参数将多个基本负载均衡器传递到同一脚本执行

如何验证迁移是否成功?

在执行结束时,升级模块会执行以下验证,将基本负载均衡器与新的标准负载均衡器进行比较。 在失败的迁移中,可以使用 -validateCompletedMigration-basicLoadBalancerStatePath 参数调用此操作,以确定标准负载均衡器(如果已创建)的配置状态。 迁移期间创建的日志文件还提供有关迁移操作和任何错误的广泛详细信息。

  • 标准负载均衡器存在,其 SKU 为“标准”
  • 前端 IP 配置计数匹配,且 IP 地址相同
  • 后端池及其成员身份匹配计数
  • 负载均衡规则匹配计数
  • 运行状况探测匹配计数
  • 入站 NAT 规则匹配计数
  • 入站 NAT 池匹配计数
  • 外部标准负载均衡器已配置出站规则
  • 外部标准负载均衡器后端池成员具有关联的网络安全组

如何为负载均衡器配置出站流量?

标准 SKU 负载均衡器不允许其后端池成员进行默认出站访问。 允许对 Internet 进行出站访问需要执行更多步骤。

对于外部负载均衡器,可以使用出站规则显式启用池成员的出站流量。 如果你有单个后端池,我们会在迁移期间自动为你配置出站规则;如果有多个后端池,则需要手动创建出站规则来指定端口分配。

对于内部负载均衡器,不能选择出站规则,因为 SNAT 没有公共 IP 地址。 这留下了几个需要考虑的选项:

  • NAT 网关:在大多数情况下,NAT 网关是 Azure 针对出站流量的推荐方法。 但是,NAT 网关要求附加的子网没有基本 SKU 网络资源,这意味着你需要先迁移所有负载均衡器和公共 IP 地址,然后才能使用它们。 因此,建议使用一种两步方法,其中首先使用以下方法之一进行出站连接,然后在基本 SKU 迁移完成后切换到 NAT 网关
  • 网络虚拟设备:通过网络虚拟设备(例如 Azure 防火墙)路由流量,从而将流量路由到 Internet。 如果你已配置网络虚拟设备,则此选项是理想选择。
  • 辅助外部负载均衡器:通过向后端资源添加辅助外部负载均衡器,可以通过配置出站规则将外部负载均衡器用于出站流量。 如果此外部负载均衡器未配置任何负载均衡规则、NAT 规则或入站 NAT 池,后端资源将保持与内部网络的入站流量隔离,请参阅仅出站的负载均衡器配置。 使用此选项,可以在从基本 SKU 迁移到标准 SKU 之前配置外部负载均衡器,并使用使用 -MultiLBConfig 参数与内部负载均衡器同时迁移
  • 公共 IP 地址:最后,公共 IP 地址可以直接添加到虚拟机虚拟机规模集实例。 但是,由于添加公共 IP 地址会增加额外的安全外围应用和费用,不建议使用此选项。

如果升级在迁移过程中失败,会发生什么情况?

该模块能够应对因发生未处理的错误或意外的脚本终止而出现的故障。 失败设计是一种“在失败中前进”的方法,因此不应尝试迁移回基本负载均衡器,而是应解决导致失败的问题(查看错误输出或日志文件),然后再次重试迁移,指定 -FailedMigrationRetryFilePathLB <BasicLoadBalancerBackupFilePath> -FailedMigrationRetryFilePathVMSS <VMSSBackupFile> 参数。 对于公共负载均衡器,由于公共 IP 地址 SKU 已更新为标准,因此无法将同一 IP 移回基本负载均衡器。

观看恢复过程的视频:

如果失败的迁移同时以多个负载均衡器为目标,请使用 -MultiLBConfig 参数单独恢复每个负载均衡器,如下所示。

基本故障恢复过程如下:

  1. 解决迁移失败的原因。 检查日志文件 Start-AzBasicLoadBalancerUpgrade.log 以了解详细信息
  2. 删除新的标准负载均衡器(如果已创建)。 根据迁移失败发生的阶段,可能必须从虚拟机规模集或虚拟机网络接口(IP 配置)和运行状况探测中删除标准负载均衡器引用,才能删除标准负载均衡器。
  3. 查找基本负载均衡器状态备份文件。 此文件应该在执行脚本的目录中,或者在执行失败时使用 -RecoveryBackupPath 参数指定的路径中。 该文件命名为:State_<basicLBName>_<basicLBRGName>_<timestamp>.json
  4. 重新运行迁移脚本,指定 -FailedMigrationRetryFilePathLB <BasicLoadBalancerbackupFilePath>-FailedMigrationRetryFilePathVMSS <VMSSBackupFile>(对于虚拟机规模集后端)参数,而不是 -BasicLoadBalancerName,或者通过管道传递基本负载均衡器

后续步骤