使用 PowerShell 和 Azure 资源管理器对 Hyper-V VM 设置到 Azure 的灾难恢复
Azure Site Recovery 有助于业务连续性和灾难恢复 (BCDR) 策略,因为它可以协调 Azure 虚拟机 (VM)、本地 VM 和物理服务器的复制、故障转移和恢复。
本文介绍如何结合使用 Windows PowerShell 和 Azure 资源管理器将 Hyper-V VM 复制到 Azure。 本文中使用的示例演示如何将在 Hyper-V 主机上运行的单个 VM 复制到 Azure。
注意
建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az。
Azure PowerShell
Azure PowerShell 提供用于通过 Windows PowerShell 管理 Azure 的 cmdlet。 适用于 Azure 资源管理器的 Azure PowerShell 随附 Site Recovery PowerShell cmdlet,有助于保护和恢复 Azure 中的服务器。
尽管无需成为一名 PowerShell 专家就可以使用本文章,但你还是需要理解诸如模块、cmdlet 和会话等基本概念。 有关详细信息,请参阅 PowerShell 文档和 将 Azure PowerShell 与 Azure 资源管理器配合使用。
注意
参与云解决方案提供商 (CSP) 计划的 Azure 合作伙伴可以根据各自的 CSP 订阅(租户订阅)对客户服务器的保护措施进行配置和管理。
准备工作
确保已满足以下先决条件:
- 一个 Azure 帐户。 可以从 试用版开始。 此外,可以阅读 Azure Site Recovery Manager 定价。
- Azure PowerShell。 若要深入了解此版本及其安装方法,请参阅安装 Azure PowerShell。
此外,本文中提及的特定示例要求满足以下先决条件:
- 一台运行 Windows Server 2012 R2 或 Microsoft Hyper-V Server 2012 R2 的 Hyper-V 主机,其中包含一个或多个 VM。 Hyper-V 服务器应直接或通过代理连接到 Internet。
- 要复制的 VM 应符合这些先决条件。
步骤 1:登录到 Azure 帐户
打开 PowerShell 控制台,并运行以下命令以登录到 Azure 帐户。 此 cmdlet 会打开一个网页,提示输入帐户凭据:
Connect-AzAccount -Environment AzureChinaCloud
。- 或者,可以使用
Connect-AzAccount -Environment AzureChinaCloud
Credential 参数,在 cmdlet 中将帐户凭据作为参数包括。 - 如果你是代表租户的 CSP 合作伙伴,则需使用 tenantID 或租户主域名将客户指定为一名租户。 例如:
Connect-AzAccount -Environment AzureChinaCloud -Tenant "fabrikam.com"
- 或者,可以使用
由于一个帐户可以有多个订阅,因此请将要使用的订阅与帐户关联在一起:
Set-AzContext -Subscription $SubscriptionName
使用以下命令验证订阅是否已注册,以便将 Azure 提供程序用于恢复服务和 Site Recovery:
Get-AzResourceProvider -ProviderNamespace Microsoft.RecoveryServices
验证命令输出中是否将“RegistrationState”设置为“已注册”,如果是,则可继续执行步骤 2。 否则,需要通过运行以下命令注册订阅中缺失的提供程序:
Register-AzResourceProvider -ProviderNamespace Microsoft.RecoveryServices
使用以下命令验证提供程序是否已成功注册:
Get-AzResourceProvider -ProviderNamespace Microsoft.RecoveryServices
步骤 2:设置保管库
创建一个可在其中创建保管库的 Azure 资源管理器资源组,或者使用现有资源组。 创建新资源组,如下所示。
$ResourceGroupName
变量包含需要创建的资源组的名称,$Geo 变量包含要在其中创建资源组的 Azure 区域(例如“中国北部”)。New-AzResourceGroup -Name $ResourceGroupName -Location $Geo
若要获取订阅中资源组的列表,请运行
Get-AzResourceGroup
cmdlet。创建如下所示的新的 Azure 恢复服务保管库:
$vault = New-AzRecoveryServicesVault -Name <string> -ResourceGroupName <string> -Location <string>
可以使用 Get-AzRecoveryServicesVault
cmdlet 检索现有保管库的列表。
步骤 3:设置恢复服务保管库上下文
设置保管库上下文,如下所示:
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
步骤 4:创建 Hyper-V 站点
创建新的 Hyper-V 站点,如下所示:
$sitename = "MySite" #Specify site friendly name New-AzRecoveryServicesAsrFabric -Type HyperVSite -Name $sitename
此 cmdlet 会启动一个创建该站点所需的站点恢复作业,并返回一个站点恢复作业对象。 等待作业完成,并验证作业已成功完成。
使用
Get-AzRecoveryServicesAsrJob
cmdlet 检索作业对象,并查看作业的当前状态。生成和下载站点的注册密钥,如下所示:
$SiteIdentifier = Get-AzRecoveryServicesAsrFabric -Name $sitename | Select-Object -ExpandProperty SiteIdentifier $path = Get-AzRecoveryServicesVaultSettingsFile -Vault $vault -SiteIdentifier $SiteIdentifier -SiteFriendlyName $sitename
将已下载的密钥复制到 Hyper-V 主机。 需要通过该密钥将 Hyper-V 主机注册到站点。
步骤 5:安装提供程序和代理
从 Microsoft 下载最新版提供程序的安装程序。
在 Hyper-V 主机上运行安装程序。
在安装结束时继续执行注册步骤。
在系统提示时提供下载的密钥,然后完成 Hyper-V 主机的注册过程。
验证 Hyper-V 主机是否已注册到站点,如下所示:
$server = Get-AzRecoveryServicesAsrFabric -Name $siteName | Get-AzRecoveryServicesAsrServicesProvider -FriendlyName $server-friendlyname
如果运行的是 Hyper-V 核心服务器,请下载安装程序文件并执行以下操作:
运行以下命令,将 AzureSiteRecoveryProvider.exe 中的文件提取到本地目录:
AzureSiteRecoveryProvider.exe /x:. /q
运行以下命令:
.\setupdr.exe /i
结果记录到 %ProgramData%\ASRLogs\DRASetupWizard.log。
运行此命令注册服务器:
cd C:\Program Files\Azure Site Recovery Provider\DRConfigurator.exe" /r /Friendlyname "FriendlyName of the Server" /Credentials "path to where the credential file is saved"
步骤 6:创建复制策略
在开始前,指定的存储帐户应与保管库处于同一 Azure 区域,并且应已启用异地复制。
创建复制策略,如下所示:
$ReplicationFrequencyInSeconds = "300"; #options are 30,300,900 $PolicyName = "replicapolicy" $Recoverypoints = 6 #specify the number of recovery points $storageaccountID = Get-AzStorageAccount -Name "mystorea" -ResourceGroupName "MyRG" | Select-Object -ExpandProperty Id $PolicyResult = New-AzRecoveryServicesAsrPolicy -Name $PolicyName -ReplicationProvider "HyperVReplicaAzure" -ReplicationFrequencyInSeconds $ReplicationFrequencyInSeconds -NumberOfRecoveryPointsToRetain $Recoverypoints -ApplicationConsistentSnapshotFrequencyInHours 1 -RecoveryAzureStorageAccountId $storageaccountID
检查返回的作业,确保复制策略创建成功。
检索对应于该站点的保护容器,如下所示:
$protectionContainer = Get-AzRecoveryServicesAsrProtectionContainer
将保护容器与复制策略相关联,如下所示:
$Policy = Get-AzRecoveryServicesAsrPolicy -FriendlyName $PolicyName $associationJob = New-AzRecoveryServicesAsrProtectionContainerMapping -Name $mappingName -Policy $Policy -PrimaryProtectionContainer $protectionContainer[0]
等待关联作业成功完成。
检索保护容器映射。
$ProtectionContainerMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $protectionContainer
步骤 7:启用 VM 保护
检索与要保护的 VM 相对应的可保护项,如下所示:
$VMFriendlyName = "Fabrikam-app" #Name of the VM $ProtectableItem = Get-AzRecoveryServicesAsrProtectableItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
保护 VM。 如果要保护的 VM 有多个附加磁盘,则需使用 OSDiskName 参数指定操作系统磁盘。
$OSType = "Windows" # "Windows" or "Linux" $DRjob = New-AzRecoveryServicesAsrReplicationProtectedItem -ProtectableItem $VM -Name $VM.Name -ProtectionContainerMapping $ProtectionContainerMapping -RecoveryAzureStorageAccountId $StorageAccountID -OSDiskName $OSDiskNameList[$i] -OS $OSType -RecoveryResourceGroupId $ResourceGroupID
等待 VM 在完成初始复制后进入受保护状态。 这可能需要一段时间,具体取决于诸如要复制的数据量和 Azure 的可用上游带宽等因素。 进入受保护状态后,更新作业状态和 StateDescription,如下所示:
PS C:\> $DRjob = Get-AzRecoveryServicesAsrJob -Job $DRjob PS C:\> $DRjob | Select-Object -ExpandProperty State Succeeded PS C:\> $DRjob | Select-Object -ExpandProperty StateDescription Completed
更新各种恢复属性(例如 VM 角色大小),以及进行故障转移后需要将 VM NIC 连接到的 Azure 网络。
PS C:\> $nw1 = Get-AzVirtualNetwork -Name "FailoverNw" -ResourceGroupName "MyRG" PS C:\> $VMFriendlyName = "Fabrikam-App" PS C:\> $rpi = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName PS C:\> $UpdateJob = Set-AzRecoveryServicesAsrReplicationProtectedItem -InputObject $rpi -PrimaryNic $VM.NicDetailsList[0].NicId -RecoveryNetworkId $nw1.Id -RecoveryNicSubnetName $nw1.Subnets[0].Name PS C:\> $UpdateJob = Get-AzRecoveryServicesAsrJob -Job $UpdateJob PS C:\> $UpdateJob | Select-Object -ExpandProperty state PS C:\> Get-AzRecoveryServicesAsrJob -Job $job | Select-Object -ExpandProperty state Succeeded
备注
如果希望复制到 Azure 中启用了 CMK 的托管磁盘,请使用 Az PowerShell 3.3.0 及更高版本执行以下步骤:
- 通过更新 VM 属性启用到托管磁盘的故障转移
- 使用
Get-AzRecoveryServicesAsrReplicationProtectedItem
cmdlet 获取受保护项的每个磁盘的磁盘 ID - 使用
New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]"
cmdlet 创建包含磁盘 ID 到磁盘加密集映射的字典对象。 这些磁盘加密集将由你在目标区域中预先创建。 - 通过在
Set-AzRecoveryServicesAsrReplicationProtectedItem
DiskIdToDiskEncryptionSetMap 参数中传递字典对象,使用 cmdlet 更新 VM 属性。
步骤 8:运行测试故障转移
按如下所述运行测试故障转移:
$nw = Get-AzVirtualNetwork -Name "TestFailoverNw" -ResourceGroupName "MyRG" #Specify Azure vnet name and resource group $rpi = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName $TFjob = Start-AzRecoveryServicesAsrTestFailoverJob -ReplicationProtectedItem $VM -Direction PrimaryToRecovery -AzureVMNetworkId $nw.Id
验证是否在 Azure 中创建了测试 VM。 在 Azure 中创建测试 VM 之后,暂停测试故障转移作业。
若要清理并完成测试故障转移,请运行:
$TFjob = Start-AzRecoveryServicesAsrTestFailoverCleanupJob -ReplicationProtectedItem $rpi -Comment "TFO done"
后续步骤
详细了解 Azure Site Recovery 和 Azure 资源管理器 PowerShell cmdlet。