创建使用可用性区域的虚拟机规模集

Azure 可用性区域是 Azure 区域内的故障隔离位置,提供冗余电力、冷却系统和网络。 借助它们,可以运行具有高可用性和容错能力的应用程序,以应对数据中心故障。 支持可用性区域的 Azure 区域至少有三个单独的区域。 每个可用性区域由一个或多个数据中心组成,它们配备了独立的基础设施电源、网络和冷却系统。 可用性区域采用高性能网络进行连接,往返延迟小于 2 毫秒。 有关详细信息,请参阅可用性区域概述

若要防止虚拟机规模集发生数据中心级故障,可以跨可用性区域创建规模集。 若要使用可用性区域,必须在受支持的 Azure 区域中创建规模集。

可用性区域的设计注意事项

虚拟机规模集支持三种可用性区域部署模型:

  • 区域跨越(建议)
  • 区域或区域对齐(单区域)
  • 区域(也称为 非区域

跨区域

一个跨区域的规模集将实例分布到所有选定的区域。"zones": ["1","2","3"] 这类似于其他 Azure 服务中的区域冗余部署。

默认情况下,规模集会尽最大努力将实例均匀分散到所选区域。 但是,你可以通过在部署中设置 "zoneBalance": "true" 来指定严格的区域均衡。 每个 VM 及其磁盘都是区域性的,因此它们会固定到特定区域。 区域之间的实例通过低延迟高性能的网络进行连接。 发生区域中断或连接问题时,可能会破坏与受影响区域中的实例的连接,而其他可用性区域中的实例应不受影响。 在发生区域中断期间,可以将容量添加到规模集,规模集会将更多实例添加到未受影响的区域。 当中断区域恢复后,可能需要将规模集缩减到原始容量。 最佳做法是基于 CPU 或内存使用情况配置自动缩放规则。 借助自动缩放规则,规模集能够通过在其余可操作区域中横向扩展新实例,来应对该区域中的 VM 实例损失。

跨可用性区域分布实例符合跨可用性区域分布的实例的 99.99% SLA,建议用于 Azure 中的大多数工作负载。

区域或区域对齐(单区域)

区域或区域对齐规模集将实例置于单个可用性区域中"zones": ['1']。 每个 VM 及其磁盘都是区域性的,因此它们会固定到特定区域。 此配置主要用在需要降低实例之间的延迟时。

区域(非分区的)

区域(非区域)虚拟机规模集是在未显式设置区域分配时("zones"=[]"zones"=null)。 在此配置中,规模集创建区域(非区域、非区域固定)实例并隐式放置整个区域的实例。 无法保证跨区域均衡或分布,也无法保证实例位于同一可用性区域中。 超高性能磁盘和高级 v2 磁盘可保证磁盘并置,高级 V1 磁盘尽最大努力实现磁盘并置,标准 SKU(SSD 或 HDD)磁盘不保证实现磁盘并置。

在极少数情况下,整个区域中断时,规模集中的任何或所有实例都可能会受到影响。

容错域和可用性区域

容错域是可用性区域或硬件节点的数据中心内的故障隔离组,它们共享相同电源、网络、冷却系统和平台维护计划。 位于不同容错域中的 VM 实例不太可能受到同一计划内或计划外中断的影响。 可以指定实例如何在区域或可用区中的故障域之间分布。

  • 最大分布 (platformFaultDomainCount = 1)
  • 固定分布 (platformFaultDomainCount = 5)
  • 修复了仅区域(非区域)部署时与存储磁盘容错域(platformFaultDomainCount = 2 或 3)对齐的分布问题

使用“最大分布”时,规模集会在每个区域中将 VM 分布到尽可能多的容错域。 这种分布可能在每个区域中跨越多于或少于五个的故障域。 使用静态固定分布时,规模集会将 VM 分布到指定数量的容错域中。 如果规模集无法分配给至少指定的容错域计数以满足分配请求,则请求将失败。

建议对大多数工作负荷使用“最大分布”进行部署,因为此方法可在大多数情况下提供最佳分布。 如果需要将副本跨不同的硬件隔离单元进行分布,建议先跨可用性区域进行分布,然后在每个区域中使用“最大分布”。

注意

使用“最大分布”时,无论 VM 实际分布到多少个容错域,在规模集 VM 实例视图和实例元数据中都只能看到一个容错域。 每个区域中的分布是隐式的。

放置组

重要

放置组仅适用于在统一业务流程模式下运行的虚拟机规模集。

部署规模集时,还可以为每个可用性区域部署单个放置组或多个放置组。 对于区域(非分区)规模集,可以选择在该区域内设置单个放置组或多个放置组。 如果将名为 singlePlacementGroup 的规模集属性设置为 false,则该规模集可以由多个放置组组成,其范围为 0-1,000 台 VM。 设置为默认值 true 时,规模集由单个放置组组成,其范围为 0-100 台 VM。 对于大多数工作负荷,建议使用多个放置组,这样可以增大规模。 在 API 版本 2017-12-01 中,规模集默认为单区域规模集和跨区域规模集的多个放置组,但它们默认为区域(非区域)规模集的单个放置组。

注意

如果使用“最大分布”,则必须使用多个放置组。

区域均衡

对于跨多个区域部署的规模集,还可以选择“最佳工作区域平衡”或“严格区域平衡”。有关详细信息,请参阅 规模集中的区域均衡

创建跨区域或区域规模集

部署虚拟机规模集时,可选择在区域中使用单个可用性区域或多个区域。

可以使用下列方法之一创建使用可用性区域的规模集:

使用 Azure 门户

创建使用可用性区域的规模集的过程与入门文章中详述的过程相同。 选择受支持的 Azure 区域时,可在一个或多个可用性区域中创建规模集,如下面的示例所示:

在单个可用性区域中创建规模集

将在你指定的单个区域中创建规模集和支持资源,例如 Azure 负载均衡器和公共 IP 地址。

使用 Azure CLI

创建使用可用性区域的规模集的过程与入门文章中详述的过程相同。 若要使用可用性区域,必须在受支持的 Azure 区域中创建规模集。

--zones 命令中添加 参数并指定要使用的区域(例如区域 123)。

az vmss create \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --image <SKU Image> \
    --upgrade-policy-mode automatic \
    --admin-username azureuser \
    --generate-ssh-keys \
    --zones 1 2 3

在您指定的可用区中创建和配置所有规模集资源和虚拟机需要几分钟时间。 有关区域冗余规模集和网络资源的完整示例,请参阅此示例 CLI 脚本

使用 Azure PowerShell

若要使用可用性区域,必须在受支持的 Azure 区域中创建规模集。 向 -Zone 命令添加 参数并指定要使用的区域(例如区域 123)。

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "chinanorth2" `
  -VMScaleSetName "myScaleSet" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" `
  -UpgradePolicy "Automatic" `
  -Zone "1", "2", "3"

使用 Azure 资源管理器模板

创建使用可用性区域的规模集的过程与适用于 LinuxWindows 的入门文章中详述的过程相同。

{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "name": "myScaleSet",
  "location": "China North 2",
  "apiVersion": "2017-12-01",
  "zones": [
        "1",
        "2",
        "3"
      ]
}

如果创建公共 IP 地址或负载均衡器,请指定 "sku": {"name":"Standard"} 属性以创建区域冗余网络资源。 还需要创建网络安全组和规则以允许任意流量。 有关详细信息,请参阅 Azure 负载均衡器标准概述标准负载均衡器和可用性区域

更新规模集以添加可用性区域

可以修改规模以扩展用于分布 VM 实例的区域集。 扩展可以让您利用可用性更高的 SLA(99.99%),相比于区域性(非区域的)可用性 SLA(99.95%)。 或者扩展您的规模集,以利用在创建规模集时尚未提供的新可用性区域。

此功能可用于 API 版本 2023-03-01 或更高版本。

扩展规模集以使用可用性区域

可以将规模集更新,以将实例扩展到一个或多个额外的可用性区域,最多可扩展到区域支持的可用性区域数目。 对于支持区域的地区,最小区域数为 3。

重要

将规模集扩展到其他区域时,原始实例不会迁移或更改。 横向扩展时,将创建新实例并在所选可用性区域中均匀分布。 原始实例中的数据不会迁移到新区域。 在缩减规模集时,将优先删除任何区域性(非区域性)实例。 之后,将基于扩容策略删除实例。

扩展为跨区域的规模集分三个步骤完成:

  1. 准备区域扩展
  2. 更新规模集上的区域参数
  3. 添加新的区域实例并移除原始实例

准备区域扩展

警告

此功能允许向规模集添加区域。 添加区域性(非区域性)规模集后,不能回到以前的区域性(非区域性)规模集,也不能删除已添加的区域。

为了准备区域扩展:

  • 检查您在所选区域的 VM 大小是否有足够的配额来处理更多实例。
  • 检查你在使用的 VM 大小和磁盘类型是否在所有所需区域中可用。 可以使用计算资源 SKU API 来确定哪些大小在哪些区域中可用
  • 验证扩展集配置是否对区域性和跨区域的扩展集有效:
    • platformFaultDomainCount 必须设置为 1 或 5。 区域规模集和区域跨区域规模集不支持使用 2 或 3 个容错域进行固定分布。
    • 区域扩展期间不支持产能预留。 在规模集完全跨可用区或单可用区(不再有区域性(非可用区)实例)后,可以将容量预留组添加到规模集。
    • 不支持 Azure 专用主机部署。

更新规模集上的区域参数

更新规模集以更改区域参数。

  1. 导航到要更新的规模集
  2. 在规模集登陆页的“可用性”选项卡上,找到“可用性区域”属性,然后按“编辑”
  3. 在“编辑位置”对话框中,选择所需的区域
  4. 选择“应用”

添加新的区域实例并移除原始实例

可以通过触发扩展操作来横向扩展规模集,然后缩减规模集,在各个区域之间实现手动平衡。 有关详细信息,请参阅 如何手动平衡规模集

已知问题和限制

  • 原始实例不会迁移到新添加的区域。 工作负荷必须处理任何必需的数据迁移或复制。

  • 不支持运行 Service Fabric RP 或 Azure Kubernetes 服务的规模集。

  • 无法移除或替换区域,只能添加区域

  • 无法从跨区或分区规模集更新到非局部性的区域规模集。

  • platformFaultDomainCount 必须设置为 1 或 5。 不支持在跨区域或区域性部署中进行 2 或 3 个容错域的固定分配。

  • 区域扩展期间不支持产能预留。 在规模集完全跨可用区或单可用区(不再有区域性(非可用区)实例)后,可以将容量预留组添加到规模集。

  • 不支持 Azure 专用主机部署

后续步骤

现在,你已在可用性区域中创建了规模集,接下来可以了解如何在虚拟机规模集上部署应用程序对虚拟机规模集使用自动缩放