使用 PowerShell 和 Azure Resource Manager,針對 Hyper-V VM 設定 Azure 的災害復原

Azure Site Recovery 可藉由協調 Azure 虛擬機器 (VM)、內部部署 VM 與實體伺服器的複寫、容錯移轉及復原,為您的商務持續性與嚴重損壞修復 (BCDR) 策略做出貢獻。

本文說明如何搭配 Azure Resource Manager 使用 Windows PowerShell,將 Hyper-V VM 複寫到 Azure。 本文使用的範例示範如何將 Hyper-V 主機上執行的單一 VM 複寫到 Azure。

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要了解如何移轉至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 移轉至 Az

Azure PowerShell

Azure PowerShell 提供 Cmdlet,讓您使用 Windows PowerShell 管理 Azure。 Azure PowerShell for Azure Resource Manager 提供的 Site Recovery PowerShell Cmdlet 可讓您在 Azure 中保護與復原伺服器。

您不需要是 PowerShell 專家也能使用本文,但您必須了解模組、Cmdlet 和工作階段等基本概念。 如需詳細資訊,請參閱PowerShell 文件搭配使用 Azure PowerShell 與 Azure Resource Manager

注意

雲端方案提供者 (CSP) 計畫的 Microsoft 合作夥伴,可以在其客戶各自的 CSP 訂用帳戶 (租用戶訂用帳戶) 設定和管理客戶的伺服器保護。

在您開始使用 Intune 之前

確認您已備妥這些必要條件:

此外,本文所述的特定範例有下列先決條件:

  • 執行 Windows Server 2012 R2 或 Microsoft Hyper-V Server 2012 R2 且包含一或多部 VM 的 Hyper-V 主機。 Hyper-V 伺服器應該直接或透過 Proxy 連接到網際網路。
  • 您想要複寫的 VM 都應該符合這些必要條件

步驟 1:登入您的 Azure 帳戶

  1. 開啟 PowerShell 主控台並執行這個命令,登入您的 Azure 帳戶。 此 Cmdlet 會開啟網頁,提示您輸入帳戶認證:Connect-AzAccount

    • 或者,您可以使用 Credential 參數,以參數形式將您的帳戶認證加入 Connect-AzAccount Cmdlet。
    • 如果您是代表租用戶工作的 CSP 合作夥伴,請使用其租用戶識別碼或租用戶主要網域名稱,將客戶指定為租用戶。 例如:Connect-AzAccount -Tenant "fabrikam.com"
  2. 由於一個帳戶可以有多個訂用帳戶,因此您必須將要使用的訂用帳戶與帳戶建立關聯:

    Set-AzContext -Subscription $SubscriptionName
    
  3. 使用下列命令確認您的訂用帳戶已註冊使用 Azure 復原服務提供者和 Site Recovery:

    Get-AzResourceProvider -ProviderNamespace  Microsoft.RecoveryServices
    
  4. 確認 RegistrationState 在命令輸出中設為 [已註冊],您可以繼續執行步驟 2。 如果未設定,請執行下列命令來註冊訂用帳戶中遺漏的提供者:

    Register-AzResourceProvider -ProviderNamespace Microsoft.RecoveryServices
    
  5. 確認提供者成功使用下列命令註冊:

    Get-AzResourceProvider -ProviderNamespace  Microsoft.RecoveryServices
    

步驟 2:設定保存庫

  1. 建立將在其中建立保存庫的 Azure Resource Manager 資源群組,或使用現有的資源群組。 建立新的資源群組,如下所示。 $ResourceGroupName 變數包含您想要建立的資源群組名稱,而 $Geo 變數包含要在其中建立資源群組的 Azure 區域 (例如:巴西南部)。

    New-AzResourceGroup -Name $ResourceGroupName -Location $Geo
    
  2. 若要在訂用帳戶中取得資源群組的清單,執行 Get-AzResourceGroup Cmdlet。

  3. 建立新的 Azure 復原服務保存庫,如下所示:

    $vault = New-AzRecoveryServicesVault -Name <string> -ResourceGroupName <string> -Location <string>
    

您能以 Get-AzRecoveryServicesVault Cmdlet 擷取現有保存庫的清單。

步驟 3:設定復原服務保存庫內容

設定保存庫內容,如下所示:

Set-AzRecoveryServicesAsrVaultContext -Vault $vault

步驟 4:建立 Hyper-V 網站

  1. 建立新的 Hyper-V 站台,如下所示:

    $sitename = "MySite"                #Specify site friendly name
    New-AzRecoveryServicesAsrFabric -Type HyperVSite -Name $sitename
    
  2. 這個 Cmdlet 會啟動 Site Recovery 作業來建立網站,並傳回 Site Recovery 作業物件。 等待作業完成,並確認作業已成功完成。

  3. 使用 Get-AzRecoveryServicesAsrJob Cmdlet 來擷取作業物件,並檢查作業的目前狀態。

  4. 產生並下載網站的註冊金鑰,如下所示:

    $SiteIdentifier = Get-AzRecoveryServicesAsrFabric -Name $sitename | Select-Object -ExpandProperty SiteIdentifier
    $path = Get-AzRecoveryServicesVaultSettingsFile -Vault $vault -SiteIdentifier $SiteIdentifier -SiteFriendlyName $sitename
    
  5. 將下載的金鑰複製到 Hyper-V 主機。 您需要金鑰向網站註冊 Hyper-V 主機。

步驟 5:安裝提供者和代理程式

  1. Microsoft下載最新版提供者的安裝程式。

  2. 在 Hyper-V 主機上執行安裝程式。

  3. 在安裝結尾繼續註冊步驟。

  4. 當系統提示時,請提供下載金鑰,並完成 Hyper-V 主機註冊。

  5. 確認 Hyper-V 主機向網站註冊,如下所示:

    $server = Get-AzRecoveryServicesAsrFabric -Name $siteName | Get-AzRecoveryServicesAsrServicesProvider -FriendlyName $server-friendlyname
    

如果您執行的是 Hyper-V 核心伺服器,請下載安裝檔案並執行下列步驟:

  1. 藉由執行下列命令,從 AzureSiteRecoveryProvider.exe 將檔案解壓縮到本機目錄:

    AzureSiteRecoveryProvider.exe /x:. /q
    
  2. 執行以下命令:

    .\setupdr.exe /i
    

    結果會記錄到 %Programdata%\ASRLogs\DRASetupWizard.log

  3. 執行下列命令以註冊伺服器:

    cd  C:\Program Files\Microsoft Azure Site Recovery Provider\DRConfigurator.exe" /r /Friendlyname "FriendlyName of the Server" /Credentials "path to where the credential file is saved"
    

步驟 6:建立複寫原則

啟動前,指定的儲存體帳戶應與保存庫位於相同的 Azure 區域中,而且應該啟用異地複寫。

  1. 建立複寫原則,如下所示︰

    $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
    
  2. 請檢查傳回的作業,以確保複寫原則建立成功。

  3. 擷取對應至網站的保護容器,如下所示:

    $protectionContainer = Get-AzRecoveryServicesAsrProtectionContainer
    
  4. 建立保護容器與複寫原則的關聯,如下所示:

    $Policy = Get-AzRecoveryServicesAsrPolicy -FriendlyName $PolicyName
    $associationJob = New-AzRecoveryServicesAsrProtectionContainerMapping -Name $mappingName -Policy $Policy -PrimaryProtectionContainer $protectionContainer[0]
    
  5. 等到關聯工作順利完成。

  6. 擷取保護容器對應。

    $ProtectionContainerMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $protectionContainer
    

步驟 7:啟用 VM 保護

  1. 擷取對應至您想要保護之 VM 的可保護項目,如下所示:

    $VMFriendlyName = "Fabrikam-app"          #Name of the VM
    $ProtectableItem = Get-AzRecoveryServicesAsrProtectableItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
    
  2. 保護 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
    
  3. 在初始複寫後,等待 VM 達到受保護的狀態。 所需時間長短,受到要複寫的資料量和可用的 Azure 上游頻寬等因素影響。 達到受保護的狀態時,作業的 State 和 StateDescription 就會更新,如下所示:

    PS C:\> $DRjob = Get-AzRecoveryServicesAsrJob -Job $DRjob
    
    PS C:\> $DRjob | Select-Object -ExpandProperty State
    Succeeded
    
    PS C:\> $DRjob | Select-Object -ExpandProperty StateDescription
    Completed
    
  4. 更新復原屬性 (例如 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 和更新版本,執行下列步驟:

  1. 藉由更新 VM 屬性來啟用容錯移轉至受控磁碟
  2. 使用 Get-AzRecoveryServicesAsrReplicationProtectedItem Cmdlet 來擷取受保護項目每個磁碟的磁碟識別碼
  3. 使用 New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]" Cmdlet 建立字典物件,以包含磁碟識別碼與磁碟加密集的對應。 這些磁碟加密集是由您在目標區域中預先建立的。
  4. 使用 Set-AzRecoveryServicesAsrReplicationProtectedItem Cmdlet,藉由在 DiskIdToDiskEncryptionSetMap 參數中傳遞字典物件,來更新 VM 屬性。

步驟 8:執行測試容錯移轉

  1. 執行測試容錯移轉,如下所示:

    $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
    
  2. 確認已在 Azure 中建立測試 VM。 在 Azure 中建立測試 VM 之後,測試容錯移轉作業已經暫停。

  3. 若要清除和完成測試容錯移轉,請執行:

    $TFjob = Start-AzRecoveryServicesAsrTestFailoverCleanupJob -ReplicationProtectedItem $rpi -Comment "TFO done"
    

下一步

深入了解 使用 Azure Resource Manager PowerShell Cmdlet 進行 Azure Site Recovery 的相關資訊。