你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure PowerShell 和 CLI 将虚拟机从区域性可用性区域移动到区域可用性区域
本文详细介绍了如何使用 Azure PowerShell 和 CLI cmdlet 将 Azure 单实例 VM 从区域移到区域可用性区域。 可用性区域是 Azure 区域中物理上独立的区域。 使用可用性区域可在整个数据中心发生故障或服务中断(这种情况很少见)时保护应用和数据。
若要使用可用性区域,请在受支持的 Azure 区域中创建虚拟机。
先决条件
在开始移动过程之前,请验证以下要求:
要求 | 说明 |
---|---|
订阅权限 | 请确保你对包含待移动资源的订阅具有“所有者”访问权限。 托管标识需要以下权限: - 在用户订阅中写入/创建资源的权限,参与者角色具有此权限。 - 创建角色分配的权限。 通常,所有者或用户访问管理员角色,或者分配了 Microsoft.Authorization 角色或写入权限的自定义角色具有此权限。 如果已向数据共享资源的托管标识分配对 Azure 数据存储的访问权限,则不需要此权限。 详细了解 Azure 角色。 |
VM 支持 | 查看支持的区域。 - 查看支持的计算、存储和网络设置。 |
VM 运行状况 | 在尝试区域移动之前,要移动的 VM 必须处于正常状态。 在尝试移动 VM 区域之前,请确保所有挂起的重新启动和强制更新均已完成,并且虚拟机正在运行且处于正常状态。 |
查看 PowerShell 和 CLI 要求
无论是使用 Azure 门户还是 PowerShell 或 CLI,大多数移动资源操作都是相同的,只有几个例外。
操作 | Portal | PowerShell/CLI |
---|---|---|
创建移动集合 | 移动集合(要移动的所有 VM 的列表)会自动创建。 所需的标识权限会由门户在后端中分配。 | 可使用 PowerShell cmdlet 或 CLI cmdlet 执行以下操作: - 为集合分配托管标识。 - 将区域 VM 添加到集合。 |
资源移动操作 | 验证步骤并验证用户设置更改。 启动移动会启动移动过程,并在目标区域中创建源 VM 的副本。 它还将完成目标区域中新创建的 VM 的移动。 | 可使用 PowerShell cmdlet 或 CLI cmdlet 执行以下操作: - 将区域 VM 添加到集合 - 解决依赖项问题 - 执行移动。 - 提交移动。 |
示例值
在脚本示例中使用以下值:
设置 | “值” |
---|---|
订阅 ID | subscription-id |
移动区域 | 美国东部 |
资源组(为移动集合保留元数据) | RegionToZone-DemoMCRG |
移动集合名称 | RegionToZone-DemoMC |
移动集合的位置 | eastus2euap |
IdentityType | SystemAssigned |
VM 名称 | demoVM-MoveResource |
移动类型 | RegionToZone |
登录 Azure
运行 Connect-AzAccount
命令以登录 Azure 订阅,并按照屏幕上的说明操作。
Connect-AzAccount –Subscription "<subscription-id>"
设置移动集合
MoveCollection 对象存储有关要移动的资源的元数据和配置信息。 要设置移动计划,请执行以下操作:
- 为移动集合创建资源组。
- 将服务提供程序注册到订阅,以便可以创建 MoveCollection 资源。
- 创建具有托管标识的 MoveCollection 对象。 为使 MoveCollection 对象能够访问资源转移器服务所在的订阅,它需要一个受订阅信任的系统分配的托管标识(以前称为托管服务标识,MSI)。
- 为托管标识授予访问资源移动器订阅的权限。
创建资源组
使用以下 cmdlet 通过 New-AzResourceGroup 为移动集合元数据和配置信息创建资源组。 资源组是在其中部署和管理 Azure 资源的逻辑容器。
New-AzResourceGroup -Name "RegionToZone-DemoMCRG" -Location "EastUS"
输出:
输出显示,托管磁盘与 VM 位于相同的可用性区域中:
ResourceGroupName : RegionToZone-DemoMCRG
Location : eastus
ProvisioningState : Succeeded
Tags :
Name Value
======= ========
Created 20230908
ResourceId : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG
注册资源提供程序
注册资源提供程序 Microsoft.Migrate,以便可以创建 MoveCollection 资源,如下所示:
Register-AzResourceProvider -ProviderNamespace Microsoft.Migrate
等待注册:
While(((Get-AzResourceProvider -ProviderNamespace Microsoft.Migrate)| where {$_.RegistrationState -eq "Registered" -and $_.ResourceTypes.ResourceTypeName -eq "moveCollections"}|measure).Count -eq 0) { Start-Sleep -Seconds 5 Write-Output "Waiting for registration to complete." }
创建 MoveCollection 对象
创建 MoveCollection 对象,并为其分配托管标识,如下所示:
New-AzResourceMoverMoveCollection -Name "RegionToZone-DemoMC" -ResourceGroupName "RegionToZone-DemoMCRG" -MoveRegion "eastus" -Location "eastus2euap" -IdentityType "SystemAssigned" -MoveType "RegionToZone"
输出:
Etag Location Name
---- -------- ----
"3a00c441-0000-3400-0000-64fac1b30000" eastus2euap RegionToZone-DemoMC
注意
对于区域到区域移动,MoveType
参数应设置为 RegionToZone,MoveRegion
参数应设置为正在进行区域移动的资源所在的位置。 请确保不需要参数 SourceRegion
和 TargetRegion
,并且应设置为 null。
为托管标识授予访问权限
为托管标识授予访问资源移动器订阅的权限,如下所示。 你必须是订阅所有者。
检索 MoveCollection 对象的标识详细信息。
$moveCollection = Get-AzResourceMoverMoveCollection -Name "RegionToZone-DemoMC" -ResourceGroupName "RegionToZone-DemoMCRG" $identityPrincipalId = $moveCollection.IdentityPrincipalId
为标识分配所需角色,以便 Azure 资源移动器可以访问你的订阅,以帮助移动资源。 查看移动的必需权限列表。
New-AzRoleAssignment -ObjectId $identityPrincipalId -RoleDefinitionName Contributor -Scope "/subscriptions/<subscription-id>"" New-AzRoleAssignment -ObjectId $identityPrincipalId -RoleDefinitionName "User Access Administrator" -Scope "/subscriptions/<subscription-id>"
将区域 VM 添加到移动集合
检索想要移动的现有源资源的 ID。 创建目标资源设置对象,然后将资源添加到移动集合。
注意
添加到移动集合的资源必须在同一订阅中,但可以在不同的资源组中。
按如下所示创建目标资源设置对象:
$targetResourceSettingsObj = New-Object Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings $targetResourceSettingsObj.ResourceType = "Microsoft.Compute/virtualMachines" $targetResourceSettingsObj.TargetResourceName = "RegionToZone-demoTargetVm" $targetResourceSettingsObj.TargetAvailabilityZone = "2"
输出
ResourceType TargetResourceGroupName TargetResourceName TargetAvailabilitySetId TargetAvailabilityZone TargetVMSize UserManagedIdentity ------------ ----------------------- ------------------ ----------------------- ---------------------- ------------ ------------------- Microsoft.Compute/virtualMachines RegionToZone-demoTargetVm 2
添加资源
Add-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -SourceId "/subscriptions/<Subscription-id>/resourcegroups/PS-demo-RegionToZone-RG/providers/Microsoft.Compute/virtualMachines/RegionToZone-demoSourceVm" -Name "demoVM-MoveResource" -ResourceSetting $targetResourceSettingsObj
输出
DependsOn : {} DependsOnOverride : {} ErrorsPropertiesCode : ErrorsPropertiesDetail : ErrorsPropertiesMessage : ErrorsPropertiesTarget : ExistingTargetId : Id : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/Re gionToZone-DemoMC/moveResources/demoVM-MoveResource IsResolveRequired : False JobStatusJobName : JobStatusJobProgress : MoveStatusErrorsPropertiesCode : DependencyComputationPending MoveStatusErrorsPropertiesDetail : {} MoveStatusErrorsPropertiesMessage : The dependency computation is not completed for resource - /subscriptions/<Subscription-id>/resourcegroups/PS-demo-R egionToZone-RG/providers/Microsoft.Compute/virtualMachines/RegionToZone-demoSourceVm'. Possible Causes: Dependency computation is pending for resource. Recommended Action: Validate dependencies to compute the dependencies. MoveStatusErrorsPropertiesTarget : MoveStatusMoveState : MovePending Name : demoVM-MoveResource ProvisioningState : Succeeded ResourceSetting : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings SourceId : /subscriptions/<Subscription-id>/resourcegroups/PS-demo-RegionToZone-RG/providers/Microsoft.Compute/virtualMachines/ RegionToZone-demoSourceVm SourceResourceSetting : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Api20230801.VirtualMachineResourceSettings SystemDataCreatedAt : 9/8/2023 6:48:11 AM SystemDataCreatedBy : xxxxx@microsoft.com SystemDataCreatedByType : User SystemDataLastModifiedAt : 9/8/2023 6:48:11 AM SystemDataLastModifiedBy : xxxxx@microsoft.com SystemDataLastModifiedByType : User TargetId : Type :
修改设置
移动 Azure VM 和关联资源时,可以修改目标设置。 建议仅在验证移动集合前更改目标设置。
可修改的设置包括:
- 虚拟机设置:资源组、VM 名称、VM 可用性区域、VM SKU、VM 密钥保管库和磁盘加密集。
- 网络资源设置:对于网络接口、虚拟网络 (Vnet/) 和网络安全组/网络接口,可以:
- 使用目标区域中的现有网络资源。
- 使用其他名称创建新资源。
- 公共 IP/负载均衡器:SKU 和区域
按如下所示修改设置:
检索要编辑其属性的移动资源。 例如检索 VM 运行:
$moveResourceObj = Get-AzResourceMoverMoveResource -MoveCollectionName " RegionToZone-DemoMCRG " -ResourceGroupName " RegionToZone-DemoMC " -Name "PSDemoVM"
将资源设置复制到目标资源设置对象。
$TargetResourceSettingObj = $moveResourceObj.ResourceSetting
设置目标资源设置对象中的参数。 例如更改目标 VM 的名称:
$TargetResourceSettingObj.TargetResourceName="PSDemoVM-target"
更新“移动资源目标”设置。 在此示例中,我们将 VM 的名称“PSDemoVM”更改为“PSDemoVMTarget” 。
Update-AzResourceMoverMoveResource -ResourceGroupName " RegionToZone-DemoMCRG " -MoveCollectionName " RegionToZone-DemoMC -SourceId "/subscriptions/<Subscription-d>/resourceGroups/PSDemoRM/providers/Microsoft.Compute/virtualMachines/PSDemoVM" -Name "PSDemoVM" -ResourceSetting $TargetResourceSettingObj
解决依赖项问题
检查已添加的资源是否有任何依赖项依赖其他资源,并根据需要进行添加。
按如下所示验证依赖项:
Resolve-AzResourceMoverMoveCollectionDependency -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC"
输出(如果依赖项存在)
AdditionalInfo : Code : Detail : EndTime : EndTime : 9/8/2023 6:52:14 AM Id : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/operations/bc68354b-ec1f-44cb-92ab-fb3b4ad90229 Message : Name : bc68354b-ec1f-44cb-92ab-fb3b4ad90229 Property : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any StartTime : 9/8/2023 6:51:50 AM Status : Succeeded
获取添加到移动集合的资源列表:
$list = Get-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" $list.Name
输出:
demoVM-MoveResource mr_regiontozone-demosourcevm661_d6f18900-3b87-4fb5-9bdf-12da2f9fb185 mr_regiontozone-demosourcevm-vnet_d8536bf5-2d5f-4778-9650-32d0570bc41a mr_regiontozone-demosourcevm-ip_6af03f1f-eae8-4541-83f5-97a2506cfc3e mr_regiontozone-demosourcevm-nsg_98d68420-d7ff-4e2d-b758-25a6df80fca7 mr_nrms-timkbo3hy3nnmregiontozone-demosourcevm-vnet_f474c880-4823-4ed3-b761-96df6500f6a3
要从资源集合中删除资源,请按照这些说明。
可用性区域 VM SKU、配额和容量验证
当所选可用性区域没有虚拟机 SKU 或没有足够的配额或容量可用时,Azure 会提供建议。 下面是这些建议的一些示例,以及虚拟机 SKU 不可用时应执行的操作。
VM SKU 不可用
当源虚拟机大小 Standard_DC1ds_v3
在所选可用性区域 1
中不可用时。
建议的操作:在同一可用性区域中选择不同的虚拟机大小,或者选择具有推荐的相应 VM 大小的不同可用性区域。
建议:
- SKU:Standard_DC1ds_v3,区域:[ 2 ]
- SKU:Standard_DC2ds_v3,区域:[ 2 ]
- SKU:Standard_DC4ds_v3,区域:[ 2 ]
- SKU:Standard_DC1s_v3,区域:[ 2 ]
- SKU:Standard_D2ds_v5,区域:[ 2、3 ]
- SKU:Standard_D2as_v4,区域:[ 1、2、3 ]
- SKU:Standard_D2s_v3,区域:[ 1、2、3 ]
- SKU:Standard_D2as_v5,区域:[ 1、2、3 ]
- SKU:Standard_D2s_v5,区域:[ 2、3 ]
容量建议
所选可用性区域 1
中当前所选虚拟机大小 Standard_DC1ds_v3
的容量建议。
建议的操作:为了增加成功部署的可能性,Azure 已确定其他推荐的虚拟机大小和区域。 若要无缝部署,请在同一可用性区域中选择不同的虚拟机大小,或者选择具有相应 VM 大小的不同可用性区域。
建议:
- SKU:Standard_DC1ds_v3,区域:[ 2 ]
- SKU:Standard_DC2ds_v3,区域:[ 2 ]
- SKU:Standard_DC4ds_v3,区域:[ 2 ]
- SKU:Standard_DC1s_v3,区域:[ 2 ]
- SKU:Standard_D2ds_v5,区域:[ 2、3 ]
- SKU:Standard_D2as_v4,区域:[ 1、2、3 ]
- SKU:Standard_D2s_v3,区域:[ 1、2、3 ]
- SKU:Standard_D2as_v5,区域:[ 1、2、3 ]
- SKU:Standard_D2s_v5,区域:[ 2、3 ]
处理建议
若要解决找不到 VM SKU 或存在容量问题的情况,请更新移动资源,然后再次运行解决。 下面是一个参考示例:
根据建议更新虚拟机移动资源对象(移动到新的区域或 SKU)。
$targetResourceSettingsObj.TargetVmSize = "Standard_DC1ds_v3" $targetResourceSettingsObj.TargetAvailabilityZone = "3"
更新虚拟机移动资源
Add-AzResourceMoverMoveResource -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -SourceId "/subscriptions/<Subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Compute/virtualMachines/vmtwo" -Name "demoVM-MoveResource2" -ResourceSetting $targetResourceSettingsObj
再次运行解析
Resolve-AzResourceMoverMoveCollectionDependency -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC"
配额不足
由于配额不足,无法将所选虚拟机移动到可用性区域。
建议的操作:发现配额不足。 请参阅链接并联系支持人员。
启动 VM 资源的移动
Invoke-AzResourceMoverInitiateMove -ResourceGroupName "RegionToZone-DemoMCRG" -MoveCollectionName "RegionToZone-DemoMC" -MoveResource $("demoVM-MoveResource") -MoveResourceInputType "MoveResourceId"
输出
AdditionalInfo :
Code :
Detail :
EndTime : 9/8/2023 7:07:58 AM
Id : /subscriptions/<Subscription-id>/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/o
perations/d3e06ac3-a961-4045-8301-aee7f6911160
Message :
Name : d3e06ac3-a961-4045-8301-aee7f6911160
Property : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any
StartTime : 9/8/2023 7:01:31 AM
Status : Succeeded
提交
启动移动后,必须提交移动或放弃移动。 提交可完成到目标区域的移动。
按如下所示提交移动:
Invoke-AzResourceMover-VMZonalMoveCommit -ResourceGroupName "RG-MoveCollection-demoRMS" -MoveCollectionName "PS-centralus-westcentralus-demoRMS" -MoveResource $('psdemovm111', 'PSDemoRM-vnet','PSDemoVM-nsg', ‘PSDemoVM’) -MoveResourceInputType "MoveResourceId"
输出:
AdditionalInfo :
Code :
Detail :
EndTime : 9/22/2023 5:26:55 AM
Id : /subscriptions/e80eb9fa-c996-4435-aa32-5af6f3d3077c/resourceGroups/RegionToZone-DemoMCRG/providers/Microsoft.Migrate/moveCollections/RegionToZone-DemoMC/operations/35dd1d93-ba70-4dc9-a17f-7d8ba48678d8
Message :
Name : 35dd1d93-ba70-4dc9-a17f-7d8ba48678d8
Property : Microsoft.Azure.PowerShell.Cmdlets.ResourceMover.Models.Any
StartTime : 9/22/2023 5:26:54 AM
Status : Succeeded
移除资源
可以使用以下 cmdlet 从 MoveCollection
中移除单个资源或多个资源:
获取添加到移动集合的移动资源的列表:
$list = Get-AzResourceMoverMoveResource -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>"
移除找到的移动资源:
Invoke-AzResourceMoverBulkRemove -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>" -MoveResource $($list.Name)
移除移动集合:
Remove-AzResourceMoverMoveCollection -ResourceGroupName "<MoveCollectionResourceGroupName>" -MoveCollectionName "<MoveCollectionName>"
注意
如果观察到托管标识授权问题,请再次按照相应步骤重新启用托管标识访问。
删除源区域 VM
提交移动并验证资源在目标区域中是否按预期工作后,可使用以下命令删除每个源资源:
后续步骤
了解如何通过门户将 Azure 单实例 VM 从区域移到区域配置。