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

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

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

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

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

  • 区域冗余或区域跨越(建议)
  • 区域或区域对齐(单区域)
  • 区域

区域冗余或跨区域

区域冗余或区域跨越规模集将实例分散到所有所选区域,"zones": ["1","2","3"]。 默认情况下,规模集会尽最大努力将实例均匀分散到所选区域。 但是,你可以通过在部署中设置 "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)
  • 与存储磁盘容错域一致的固定分布(平台故障域计数 = 2 或 3,仅限区域部署)

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

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

备注

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

放置组

重要

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

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

备注

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

区域均衡

对于跨多个区域部署的规模集,还可以选择“尽量实现区域均衡”或“严格执行区域均衡”。如果每个区域中的 VM 数与规模集的所有其他区域中的 VM 数相同或相差 1,则可以认为该规模集“已实现均衡”。 例如:

  • 某个规模集的区域 1 中有 2 个 VM,区域 2 中有 3 个 VM,区域 3 中有 3 个 VM,则可以认为该规模集已实现均衡。 只有一个区域具有不同的 VM 计数,它只比其他区域少 1 个 VM。
  • 某个规模集的区域 1 中有 1 个 VM,区域 2 中有 3 个 VM,区域 3 中有 3 个 VM,则可以认为该规模集未实现均衡。 区域 1 比区域 2 和区域 3 少 2 个 VM。

一个可能的情况是,规模集中的 VM 已成功创建,但这些 VM 的扩展部署失败。 在确定某个规模集是否已实现均衡时,这些 VM 虽然扩展失败,但仍计在内。 例如,如果某个规模集的区域 1 中有 3 个 VM,区域 2 中有 3 个 VM,区域 3 中有 3 个 VM,则可以认为该规模集已实现均衡,即使区域 1 中的所有扩展都失败而区域 2 和 3 中的所有扩展都成功。

借助最佳工作区域平衡,规模集旨在保持缩放操作期间跨区域的平衡。 如果一个区域不可用,规模集允许临时不平衡,以确保缩放可以继续。 但是,仅当单个区域不可用时,才允许这种不平衡。 如果两个或多个区域不可用,则规模集无法继续执行缩放操作。 恢复不可用区域后,规模集会通过将 VM 添加到预配不足的区域或从过度预配区域中删除 VM 来调整规模集,以恢复平衡。 相比之下,任何可能导致不平衡的缩放操作在“严格区域平衡”条件下都会被阻止,无论情况如何。

要使用最佳努力的区域均衡,请将zoneBalance设置为false。 此设置是 API 版本 2017-12-01 中的默认设置。 要使用严格区域平衡,请将zoneBalance设置为"true"

备注

只有当规模集的区域属性包含多个区域时,才能设置 zoneBalance 属性。 如果没有指定区域或仅指定了一个区域,则不应设置 zoneBalance 属性。

创建跨区域或区域规模集

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

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

使用 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。

重要

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

可通过 3 个步骤扩展到区域规模集:

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

准备区域扩展

警告

此功能允许向规模集添加区域。 一旦添加了区域,您就不能返回到区域性规模集,也不能移除这些区域。

为了准备区域扩展:

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

更新规模集上的区域参数

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

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

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

手动横向扩展和缩小

更新规模集的容量以添加更多实例。 新容量应设置为原始容量加上新实例数。 例如,如果规模集有 5 个区域实例,并且想要横向扩展,以便在每个 3 个可用性区域中有 3 个实例,则应将容量设置为 14。

可以在同一 ARM 模板或 REST API 调用中更新区域参数和规模集容量。

如果确信新实例已准备就绪,请缩减规模集的规模以移除原始区域实例。 可以手动删除特定区域实例,也可以通过减少规模集容量进行缩减。 通过减少规模集容量进行横向缩减时,平台将始终优先移除区域实例,然后遵循横向缩减策略。

已知问题和限制

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

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

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

  • 无法从跨可用性区域或可用性区域规模集更新为区域规模集。

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

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

  • 不支持 Azure 专用主机部署

后续步骤

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