使用 PowerShell 将 Hyper-V VM 复制到辅助站点(资源管理器)

本文介绍如何使用 Azure Site Recovery 来自动完成相关步骤,以便将 System Center Virtual Machine Manager 云中的 Hyper-V VM 复制到辅助本地站点中的 Virtual Machine Manager 云。

先决条件

准备网络映射

网络映射在源和目标云中的本地 Virtual Machine Manager VM 网络之间映射。 映射将执行以下操作:

  • 故障转移后,将 VM 连接到适当的目标 VM 网络。
  • 最好将副本 VM 放于目标 Hyper-V 主机服务器上。
  • 如果不配置网络映射,则故障转移后,副本 VM 不会连接到 VM 网络。

如下所述准备 Virtual Machine Manager:

  • 确保源服务器和目标 Virtual Machine Manager 服务器上具有 Virtual Machine Manager 逻辑网络

    • 源服务器上的逻辑网络应与 Hyper-V 主机所在的源云相关联。
    • 目标服务器上的逻辑网络应与目标云相关联。
  • 确保源服务器和目标 Virtual Machine Manager 服务器上具有 VM 逻辑网络。 VM 网络应链接到每个位置中的逻辑网络。
  • 将源 Hyper-V 主机上的 VM 连接到源 VM 网络。

为 PowerShell 做准备

确保已将 Azure PowerShell 准备就绪:

  • 如果已使用 PowerShell,请升级到 0.8.10 或更高版本。 详细了解如何设置 PowerShell。
  • 设置并配置 PowerShell 后,请参阅服务 cmdlet
  • 若要详细了解如何在 PowerShell 中使用参数值、输入和输出,请参阅入门指南。

设置订阅

  1. 从 PowerShell 登录到 Azure 帐户。

     $UserName = "<user@XXXX.partner.onmschina.cn>"
     $Password = "<password>"
     $SecurePassword = ConvertTo-SecureString -AsPlainText $Password -Force
     $Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $UserName, $SecurePassword
     Login-AzureRmAccount -EnvironmentName AzureChinaCloud #-Credential $Cred
    
  2. 使用订阅 ID 检索订阅列表。 记下要在其中创建恢复服务保管库的订阅的 ID。

     Get-AzureRmSubscription
    
  3. 设置保管库的订阅。

     Set-AzureRmContext -SubscriptionID <subscriptionId>
    

创建恢复服务保管库

  1. 如果没有 Azure 资源管理器资源组,则创建一个。

     New-AzureRmResourceGroup -Name #ResourceGroupName -Location #location
    
  2. 创建新的恢复服务保管库。 将保管库对象保存在后面会用到的变量中。

     $vault = New-AzureRmRecoveryServicesVault -Name #vaultname -ResouceGroupName #ResourceGroupName -Location #location
    

    可以在创建保管库对象后使用 Get-AzureRMRecoveryServicesVault cmdlet 来检索它。

设置保管库上下文

  1. 检索现有保管库。

     $vault = Get-AzureRmRecoveryServicesVault -Name #vaultname
    
  2. 设置保管库上下文:

     Set-AzureRmSiteRecoveryVaultSettings -ARSVault $vault
    

安装 Site Recovery 提供程序

  1. 在 Virtual Machine Manager 计算机上,运行以下命令创建一个目录:

     New-Item c:\ASR -type directory
    
  2. 使用下载的提供程序安装文件提取这些文件。

     pushd C:\ASR\
     .\AzureSiteRecoveryProvider.exe /x:. /q
    
  3. 安装该提供程序,等待安装完成。

     .\SetupDr.exe /i
     $installationRegPath = "hklm:\software\Microsoft\Microsoft System Center Virtual Machine Manager Server\DRAdapter"
     do
     {
         $isNotInstalled = $true;
         if(Test-Path $installationRegPath)
         {
             $isNotInstalled = $false;
         }
     }While($isNotInstalled)
    
  4. 在保管库中注册服务器:

     $BinPath = $env:SystemDrive+"\Program Files\Microsoft System Center 2012 R2\Virtual Machine Manager\bin"
     pushd $BinPath
     $encryptionFilePath = "C:\temp\".\DRConfigurator.exe /r /Credentials $VaultSettingFilePath /vmmfriendlyname $env:COMPUTERNAME /dataencryptionenabled $encryptionFilePath /startvmmservice
    

创建和关联复制策略

  1. 创建复制策略(在本例中,复制策略是针对 Hyper-V 2012 R2 的),如下所示:

     $ReplicationFrequencyInSeconds = "300";        #options are 30,300,900
     $PolicyName = "replicapolicy"
     $RepProvider = HyperVReplica2012R2
     $Recoverypoints = 24                    #specify the number of hours to retain recovery pints
     $AppConsistentSnapshotFrequency = 4 #specify the frequency (in hours) at which app consistent snapshots are taken
     $AuthMode = "Kerberos"  #options are "Kerberos" or "Certificate"
     $AuthPort = "8083"  #specify the port number that will be used for replication traffic on Hyper-V hosts
     $InitialRepMethod = "Online" #options are "Online" or "Offline"
    
     $policyresult = New-AzureRmSiteRecoveryPolicy -Name $policyname -ReplicationProvider $RepProvider -ReplicationFrequencyInSeconds $Replicationfrequencyinseconds -RecoveryPoints $recoverypoints -ApplicationConsistentSnapshotFrequencyInHours $AppConsistentSnapshotFrequency -Authentication $AuthMode -ReplicationPort $AuthPort -ReplicationMethod $InitialRepMethod
    

    Note

    Virtual Machine Manager 云包含的 Hyper-V 主机可能运行不同版本的 Windows Server,但复制策略是针对特定版本的操作系统的。 如果不同的主机运行在不同的操作系统上,请为每个系统创建不同的复制策略。 例如,如果有 5 个主机运行在 Windows Server 2012 上,3 个主机运行在 Windows Server 2012 R2 上,请创建两个复制策略。 为每种类型的操作系统各创建一个复制策略。

  2. 检索主保护容器(主 Virtual Machine Manager 云)和恢复保护容器(恢复 Virtual Machine Manager 云)。

     $PrimaryCloud = "testprimarycloud"
     $primaryprotectionContainer = Get-AzureRmSiteRecoveryProtectionContainer -friendlyName $PrimaryCloud;  
    
     $RecoveryCloud = "testrecoverycloud"
     $recoveryprotectionContainer = Get-AzureRmSiteRecoveryProtectionContainer -friendlyName $RecoveryCloud;  
    
  3. 使用友好名称检索所创建的复制策略。

     $policy = Get-AzureRmSiteRecoveryPolicy -FriendlyName $policyname
    
  4. 开始将保护容器(Virtual Machine Manager 云)与复制策略相关联。

     $associationJob  = Start-AzureRmSiteRecoveryPolicyAssociationJob -Policy     $Policy -PrimaryProtectionContainer $primaryprotectionContainer -RecoveryProtectionContainer $recoveryprotectionContainer
    
  5. 等待策略关联作业完成。 若要检查作业是否已完成,请使用以下 PowerShell 代码片段:

     $job = Get-AzureRmSiteRecoveryJob -Job $associationJob
    
     if($job -eq $null -or $job.StateDescription -ne "Completed")
     {
       $isJobLeftForProcessing = $true;
     }
    

    在作业完成处理后,运行以下命令:

     if($isJobLeftForProcessing)
     {
       Start-Sleep -Seconds 60
     }
     }While($isJobLeftForProcessing)
    

若要检查作业是否完成,请遵循监视活动中的步骤。

配置网络映射

  1. 使用此命令检索当前保管库的服务器。 此命令将 Site Recovery 服务器存储在 $Servers 数组变量中。

     $Servers = Get-AzureRmSiteRecoveryServer
    
  2. 运行以下命令,检索源 Virtual Machine Manager 服务器和目标 Virtual Machine Manager 服务器的网络。

     $PrimaryNetworks = Get-AzureRmSiteRecoveryNetwork -Server $Servers[0]        
    
     $RecoveryNetworks = Get-AzureRmSiteRecoveryNetwork -Server $Servers[1]
    

    Note

    在服务器数组中,源 Virtual Machine Manager 服务器可以是一个,也可以是第二个。 检查 Virtual Machine Manager 服务器名称,并相应地检索网络。

  3. 此 cmdlet 在主网络与恢复网络之间创建映射。 此 cmdlet 将主网络指定为 $PrimaryNetworks 的第一个元素。 此 cmdlet 将恢复网络指定为 $RecoveryNetworks 的第一个元素。

     New-AzureRmSiteRecoveryNetworkMapping -PrimaryNetwork $PrimaryNetworks[0] -RecoveryNetwork $RecoveryNetworks[0]
    

为 VM 启用保护

正确配置服务器、云和网络后,请在云中为 VM 启用保护。

  1. 若要启用保护,请运行以下命令以检索保护容器:

     $PrimaryProtectionContainer = Get-AzureRmSiteRecoveryProtectionContainer -friendlyName $PrimaryCloudName
    
  2. 获取保护实体 (VM),如下所示:

     $protectionEntity = Get-AzureRmSiteRecoveryProtectionEntity -friendlyName $VMName -ProtectionContainer $PrimaryProtectionContainer
    
  3. 为 VM 启用复制。

     $jobResult = Set-AzureRmSiteRecoveryProtectionEntity -ProtectionEntity $protectionentity -Protection Enable -Policy $policy
    

运行测试故障转移

若要测试部署,请针对单个虚拟机运行测试故障转移。 也可以创建包含多个 VM 的恢复计划,并针对该计划运行测试故障转移。 测试故障转移在隔离的网络中模拟用户的故障转移和恢复机制。

  1. 检索需要将 VM 故障转移到其中的 VM。

     $Servers = Get-AzureRmSiteRecoveryServer
     $RecoveryNetworks = Get-AzureRmSiteRecoveryNetwork -Server $Servers[1]
    
  2. 执行测试故障转移。

    对于单个 VM:

     $protectionEntity = Get-AzureRmSiteRecoveryProtectionEntity -FriendlyName $VMName -ProtectionContainer $PrimaryprotectionContainer
    
     $jobIDResult =  Start-AzureRmSiteRecoveryTestFailoverJob -Direction PrimaryToRecovery -ProtectionEntity $protectionEntity -VMNetwork $RecoveryNetworks[1]
    

    对于恢复计划:

     $recoveryplanname = "test-recovery-plan"
    
     $recoveryplan = Get-AzureRmSiteRecoveryRecoveryPlan -FriendlyName $recoveryplanname
    
     $jobIDResult =  Start-AzureRmSiteRecoveryTestFailoverJob -Direction PrimaryToRecovery -Recoveryplan $recoveryplan -VMNetwork $RecoveryNetworks[1]
    

若要检查作业是否完成,请遵循监视活动中的步骤。

运行计划内和计划外故障转移

  1. 执行计划内故障转移。

    对于单个 VM:

     $protectionEntity = Get-AzureRmSiteRecoveryProtectionEntity -Name $VMName -ProtectionContainer $PrimaryprotectionContainer
    
     $jobIDResult =  Start-AzureRmSiteRecoveryPlannedFailoverJob -Direction PrimaryToRecovery -ProtectionEntity $protectionEntity
    

    对于恢复计划:

     $recoveryplanname = "test-recovery-plan"
    
     $recoveryplan = Get-AzureRmSiteRecoveryRecoveryPlan -FriendlyName $recoveryplanname
    
     $jobIDResult =  Start-AzureRmSiteRecoveryPlannedFailoverJob -Direction PrimaryToRecovery -Recoveryplan $recoveryplan
    
  2. 执行计划外故障转移。

    对于单个 VM:

     $protectionEntity = Get-AzureRmSiteRecoveryProtectionEntity -Name $VMName -ProtectionContainer $PrimaryprotectionContainer
    
     $jobIDResult =  Start-AzureRmSiteRecoveryUnPlannedFailoverJob -Direction PrimaryToRecovery -ProtectionEntity $protectionEntity
    

    对于恢复计划:

     $recoveryplanname = "test-recovery-plan"
    
     $recoveryplan = Get-AzureRmSiteRecoveryRecoveryPlan -FriendlyName $recoveryplanname
    
     $jobIDResult =  Start-AzureRmSiteRecoveryUnPlannedFailoverJob -Direction PrimaryToRecovery -ProtectionEntity $protectionEntity
    

监视活动

使用以下命令来监视故障转移活动。 在执行不同的作业之前,请等待处理完成。

Do
{
    $job = Get-AzureSiteRecoveryJob -Id $associationJob.JobId;
    Write-Host "Job State:{0}, StateDescription:{1}" -f Job.State, $job.StateDescription;
    if($job -eq $null -or $job.StateDescription -ne "Completed")
    {
        $isJobLeftForProcessing = $true;
    }

if($isJobLeftForProcessing)
    {
        Start-Sleep -Seconds 60
    }
}While($isJobLeftForProcessing)

后续步骤

详细了解如何将 Site Recovery 和资源管理器 PowerShell cmdlet 配合使用。