使用 PowerShell 创建邻近放置组

注意

本文档中列出的许多步骤都适用于使用统一业务流程模式的虚拟机规模集。 建议对新工作负载使用灵活业务流程。 有关详细信息,请参阅 Azure 中虚拟机规模集的业务流程模式

将 VM 置于单个区域可以减少实例之间的物理距离。 将它们置于单一可用性区域中也会减少它们的物理距离。 但是,随着 Azure 占用空间的增加,单个可用性区域可能会跨多个物理数据中心,这可能导致网络延迟,对应用程序造成影响。

若要让 VM 尽可能靠近,将延迟尽可能降至最低,可以将 VM 部署到一个邻近放置组中。

邻近放置组是一种逻辑分组,用于确保 Azure 计算资源在物理上彼此靠近。 邻近放置组对于要求低延迟的工作负载很有用。

  • 独立 VM 之间的低延迟。
  • 单个可用性集或虚拟机规模集中的 VM 之间的延迟较低。
  • 独立虚拟机、多个可用性集中的虚拟机或多个虚拟机规模集之间的低延迟。 单个放置组中可以有多个计算资源,形成一个多层应用程序。
  • 使用不同硬件类型的多个应用程序层之间的低延迟。 例如,在可用性集中使用 M 系列实例运行后端,并在规模集中使用 D 系列实例运行前端,且两者位于同一个邻近放置组中。

使用邻近放置组

邻近放置组是 Azure 中的一种资源。 在将邻近放置组用于其他资源之前,需要先创建邻近放置组。 创建完成后,即可将其用于虚拟机、可用性集或虚拟机规模集。 创建计算资源时,可以通过提供邻近放置组 ID 来指定邻近放置组。

你还可以将现有资源移动到邻近放置组中。 将资源移入邻近放置组时,应该先停止(解除分配)资产,因为可能需要将资产重新部署到区域中的另一数据中心以满足共置约束。

对于可用性集和虚拟机规模集,应在资源级别而不是在单个虚拟机上设置邻近放置组。

邻近放置组是一种共置约束,而不是绑定机制。 它会在首次部署使用它的资源时被固定到特定的数据中心。 当使用邻近放置组的所有资源都已停止(解除分配)或删除后,邻近放置组将不再固定。 因此,在将一个邻近放置组用于多个 VM 系列时,必须尽可能地提前在模板中指定全部所需的类型,或者按照可以提高成功部署几率的部署顺序来进行。 如果部署失败,请重新启动部署,并将失败的 VM 大小设为首先部署的大小。

使用邻近放置组时预期会发生的情况

邻近放置组可实现位于同一数据中心内的共置。 但是,因为邻近放置组提供一个附加的部署约束,因此可能会发生分配失败。 在少数用例中,使用邻近放置组时你可能会遇到分配失败:

  • 当你请求邻近放置组中的第一个虚拟机时,会自动选择数据中心。 在某些情况下,当请求另一个虚拟机 SKU 时,如果它在该数据中心内不存在,则该请求可能会失败。 在这种情况下,将返回 OverconstrainedAllocationRequest 错误 。 为了避免这种情况,请尝试更改 SKU 的部署顺序,或者使用单个 ARM 模板部署这两个资源。
  • 对于需要添加和删除 VM 实例的弹性工作负载,对部署施加邻近放置组约束可能会因无法满足该请求而失败,从而导致出现 AllocationFailure 错误。
  • 根据需要停止(解除分配)再启动 VM 是实现弹性的另一种方式。 由于停止(解除分配)VM 后不会保留容量,因此再次启动该 VM 可能会导致 AllocationFailure 错误
  • 成功配置后,VM 启动和重新部署操作将继续遵从邻近放置组的约束。

计划内维护和邻近放置组

计划内维护事件(例如 Azure 数据中心的硬件停用)可能会影响邻近放置组中的资源对齐状态。 资源可转移到其他数据中心,这会干扰与邻近放置组相关的归置和延迟预期。

检查对齐状态

你可以执行以下操作来检查邻近放置组的对齐状态。

  • 可以使用门户、CLI 和 PowerShell 查看邻近放置组的归置状态。

    • 对于 PowerShell,可以使用 Get-AzProximityPlacementGroup cmdlet 并通过包含可选参数“-ColocationStatus”来获取归置状态。

    • 对于命令行界面(CLI),可通过使用 az ppg show 并添加可选参数“--include-colocation-status”来获取共置状态。

  • 对于每个邻近放置组,共置状态属性提供分组资源当前对齐状态的摘要。

    • 对齐:资源位于邻近放置组的相同延迟范围内。

    • 未知:至少有一个 VM 资源处于已解除分配状态。 在它们成功启动后,状态将恢复为 Aligned

    • 未对齐:至少一个 VM 资源未与邻近放置组对齐。 未对齐的具体资源也将在成员部分中单独列出

  • 对于可用性集,可以在“可用性集概述”页中查看有关各个 VM 的对齐信息。

  • 对于规模集,可在规模集“概述”页的“实例”选项卡中查看有关各个实例的对齐信息 。

重新对齐资源

如果邻近放置组为 Not Aligned,则可以对受影响的资源执行“停止\解除分配”操作,然后重新启动。 如果 VM 位于可用性集或规模集中,则必须先停止\解除分配可用性集或规模集中的所有 VM,然后再重新启动它们。

如果由于部署约束而导致分配失败,则可能需要先停止\解除分配受影响的邻近放置组中的所有资源(包括对齐的资源),然后重新启动它们以恢复对齐。

最佳实践

  • 若要实现最低的延迟,请将邻近放置组与加速网络一起使用。 有关详细信息,请参阅创建具有加速网络的 Linux 虚拟机创建具有加速网络的 Windows 虚拟机
  • 在单个模板中部署所有 VM 大小。 为了避免在不支持所有 VM SKU 和所需大小的硬件上登陆,请在单个模板中包含所有应用程序层,以便它们都同时部署。
  • 如果使用 PowerShell、CLI 或 SDK 来编写部署脚本,则可能会出现分配错误 OverconstrainedAllocationRequest。 在这种情况下,应停止/解除分配所有现有虚拟机,并调整部署脚本中的顺序,从失败的 VM SKU/大小开始。
  • 重新使用已从中删除 VM 的现有放置组时,请等待删除操作完全完成后再向该组中添加 VM。
  • 如果延迟是首要考虑的事项,请将 VM 置于邻近放置组中,将整个解决方案置于一个可用性区域中。 但是,如果复原能力是首要考虑的事项,请将实例分散到多个可用性区域(单个邻近放置组不能跨多个区域)。

创建邻近放置组

使用 New-AzProximityPlacementGroup cmdlet 创建邻近放置组。

$resourceGroup = "myPPGResourceGroup"
$location = "China North 2"
$ppgName = "myPPG"
New-AzResourceGroup -Name $resourceGroup -Location $location
$ppg = New-AzProximityPlacementGroup `
   -Location $location `
   -Name $ppgName `
   -ResourceGroupName $resourceGroup `
   -ProximityPlacementGroupType Standard

列出邻近放置组

可以使用 Get-AzProximityPlacementGroup cmdlet 列出所有邻近放置组。

Get-AzProximityPlacementGroup

在邻近放置组中创建规模集

重要

从 2023 年 11 月开始,使用 PowerShell 和 Azure CLI 创建的 VM 规模集将默认为灵活业务流程模式(如果未指定业务流程模式)。 若要了解有关此更改的更多信息以及你应采取的措施,请访问面向 VMSS PowerShell/CLI 用户的中断性变更 - Microsoft 社区中心

使用 New-AzVMSS 创建规模集时,可使用 -ProximityPlacementGroup $ppg.Id 引用邻近放置组 ID,以在邻近放置组中创建规模集。

$scalesetName = "myVM"

New-AzVmss `
  -ResourceGroupName $resourceGroup `
  -Location $location `
  -OrchestrationMode "Uniform" `
  -VMScaleSetName $scalesetName `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" `
  -ProximityPlacementGroup $ppg.Id

可以使用 Get-AzProximityPlacementGroup 查看放置组中的实例。

  Get-AzProximityPlacementGroup `
   -ResourceId $ppg.Id | Format-Table `
   -Wrap `
   -Property VirtualMachineScaleSets

后续步骤

也可使用 Azure CLI 创建邻近放置组。