Configura il disaster recovery per Azure per Hyper-V VM usando PowerShell e Azure Resource Manager

Azure Site Recovery contribuisce alla tua strategia di continuità aziendale e disaster recovery (BCDR) orchestrando replica, failover e recupero di macchine virtuali Azure (VM), VM on-premises e server fisici.

Questo articolo descrive come utilizzare Windows PowerShell, insieme a Azure Resource Manager, per replicare Hyper-V VM in Azure. L'esempio usato in questo articolo mostra come replicare una singola VM che gira su un host Hyper-V, per Azure.

Note

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo Az PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Azure PowerShell

Azure PowerShell fornisce cmdlet per gestire Azure usando Windows PowerShell. I cmdlet PowerShell di Site Recovery, disponibili con Azure PowerShell for Azure Resource Manager, ti aiutano a proteggere e recuperare i tuoi server in Azure.

Non è necessario essere esperti di PowerShell per usare questo articolo, ma bisogna comprendere concetti di base, come moduli, cmdlet e sessioni. Per maggiori informazioni, consulta la Documentazione PowerShell e l'uso di Azure PowerShell con Azure Resource Manager.

Note

I partner Microsoft nel programma Cloud Solution Provider (CSP) possono configurare e gestire la protezione dei server dei clienti ai rispettivi abbonamenti CSP (abbonamenti tenitari).

Prima di iniziare

Assicurati di avere questi prerequisiti:

Inoltre, l'esempio specifico descritto in questo articolo prevede i seguenti prerequisiti:

  • Un host Hyper-V che esegue Windows Server 2012 R2 o Microsoft Hyper-V Server 2012 R2 contenente una o più VM. Hyper-V server dovrebbero essere collegati a Internet, direttamente o tramite un proxy.
  • Le VM che vuoi replicare dovrebbero rispettare questi prerequisiti.

Passo 1: Accedi al tuo account Azure

  1. Apri una console PowerShell ed esegui questo comando per accedere al tuo account Azure. Il cmdlet apre una pagina web che ti chiede le credenziali dell'account: Connect-AzAccount.

    • In alternativa, puoi includere le credenziali del tuo account come parametro nel Connect-AzAccount cmdlet, usando il parametro Credential .
    • Se si è un partner CSP che lavora per conto di un tenant, specificare il cliente come tenant usando il proprio tenantID o il nome di dominio primario del tenant. Ad esempio: Connect-AzAccount -Tenant "fabrikam.com"
  2. Associare la sottoscrizione che si vuole usare all'account perché un account può avere molte sottoscrizioni:

    Set-AzContext -Subscription $SubscriptionName
    
  3. Verifica che il tuo abbonamento sia registrato per utilizzare i provider Azure per Recovery Services e Site Recovery, utilizzando questi comandi:

    Get-AzResourceProvider -ProviderNamespace  Microsoft.RecoveryServices
    
  4. Verifica che nell'output del comando, il Stato di Registrazione sia impostato su Registrato, puoi procedere al Passo 2. In caso contrario, dovresti registrare il provider mancante nel tuo abbonamento, eseguendo questi comandi:

    Register-AzResourceProvider -ProviderNamespace Microsoft.RecoveryServices
    
  5. Verifica che i Provider si siano registrati correttamente, utilizzando i seguenti comandi:

    Get-AzResourceProvider -ProviderNamespace  Microsoft.RecoveryServices
    

Passo 2: Preparare il caveau

  1. Crea un gruppo di risorse Azure Resource Manager in cui creare il vault, oppure usa un gruppo di risorse esistente. Crea un nuovo gruppo di risorse come segue. La $ResourceGroupName variabile contiene il nome del gruppo di risorse che si vuole creare, mentre la variabile $Geo contiene la regione Azure in cui creare il gruppo di risorse (ad esempio, "Brazil South").

    New-AzResourceGroup -Name $ResourceGroupName -Location $Geo
    
  2. Per ottenere un elenco dei gruppi di risorse nel tuo abbonamento, esegui il Get-AzResourceGroup cmdlet.

  3. Crea un nuovo vault Azure Recovery Services come segue:

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

Puoi recuperare una lista dei vault esistenti con il Get-AzRecoveryServicesVault cmdlet.

Passo 3: Impostare il contesto del vault dei Servizi di Recupero

Imposta il contesto della cassaforte come segue:

Set-AzRecoveryServicesAsrVaultContext -Vault $vault

Passo 4: Crea un sito Hyper-V

  1. Crea un nuovo sito Hyper-V come segue:

    $sitename = "MySite"                #Specify site friendly name
    New-AzRecoveryServicesAsrFabric -Type HyperVSite -Name $sitename
    
  2. Questo cmdlet avvia un lavoro Site Recovery per creare il sito e restituisce un oggetto di lavoro Site Recovery. Aspetta che il lavoro venga completato e verifica che sia stato completato con successo.

  3. Usa il Get-AzRecoveryServicesAsrJob cmdlet per recuperare l'oggetto del lavoro e controlla lo stato attuale del lavoro.

  4. Genera e scarica una chiave di registrazione per il sito, come segue:

    $SiteIdentifier = Get-AzRecoveryServicesAsrFabric -Name $sitename | Select-Object -ExpandProperty SiteIdentifier
    $path = Get-AzRecoveryServicesVaultSettingsFile -Vault $vault -SiteIdentifier $SiteIdentifier -SiteFriendlyName $sitename
    
  5. Copia la chiave scaricata sull'host Hyper-V. Ti serve la chiave per registrare il Hyper-V host sul sito.

Passo 5: Installa il Fornitore e l'agente

  1. Scarica l'installatore per l'ultima versione del Provider da Microsoft.

  2. Esegui l'installer sull'host Hyper-V.

  3. Al termine dell'installazione si prosegue fino al passaggio di registrazione.

  4. Quando richiesto, fornisci la chiave scaricata e completa la registrazione dell'host Hyper-V.

  5. Verifica che l'host Hyper-V sia registrato sul sito come segue:

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

Se stai gestendo un server core Hyper-V, scarica il file di configurazione e segui questi passaggi:

  1. Estrarre i file da AzureSiteRecoveryProvider.exe a una directory locale eseguendo questo comando:

    AzureSiteRecoveryProvider.exe /x:. /q
    
  2. Esegui questo comando:

    .\setupdr.exe /i
    

    I risultati sono registrati su %ProgramData%\ASRLogs\DRASetupWizard.log.

  3. Registrare il server eseguendo questo comando:

    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"
    

Passo 6: Crea una politica di replicazione

Prima di iniziare, l'account di archiviazione specificato dovrebbe trovarsi nella stessa regione Azure del vault e avere la geo-replicazione attivata.

  1. Crea una politica di replica come segue:

    $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. Controlla il lavoro restituito per assicurarti che la creazione della policy di replica abbia successo.

  3. Recupera il contenitore di protezione corrispondente al sito, come segue:

    $protectionContainer = Get-AzRecoveryServicesAsrProtectionContainer
    
  4. Associa il contenitore di protezione alla policy di replicazione, come segue:

    $Policy = Get-AzRecoveryServicesAsrPolicy -FriendlyName $PolicyName
    $associationJob = New-AzRecoveryServicesAsrProtectionContainerMapping -Name $mappingName -Policy $Policy -PrimaryProtectionContainer $protectionContainer[0]
    
  5. Aspetta che il lavoro dell'associazione si concluda con successo.

  6. Recupera la mappatura del contenitore di protezione.

    $ProtectionContainerMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $protectionContainer
    

Passo 7: Abilita la protezione delle VM

  1. Recupera l'elemento protettibile che corrisponde alla VM che vuoi proteggere, come segue:

    $VMFriendlyName = "Fabrikam-app"          #Name of the VM
    $ProtectableItem = Get-AzRecoveryServicesAsrProtectableItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
    
  2. Proteggere la macchina virtuale. Se la VM che stai proteggendo ha più di un disco collegato, specifica il disco del sistema operativo usando il parametro 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. Per far sì che Azure Site Recovery crei dischi gestiti per la VM replicata in Azure, usa il seguente comando:

    $DRjob = New-AzRecoveryServicesAsrReplicationProtectedItem -ProtectableItem $VM -Name $VM.Name -ProtectionContainerMapping $ProtectionContainerMapping -LogStorageAccountId $StorageAccountId -OSDiskName $OSDiskNameList[$i] -OS $OSType -RecoveryResourceGroupId $ResourceGroupID -Size "Standard_D4s_v3" -UseManagedDisksForReplication $true -UseManagedDisk $true
    

    Note

    Per utilizzare Azure Managed Disks per la VM replicata, specificare sia -UseManagedDisksForReplication $true che -UseManagedDisk $true. L'account di archiviazione specificato da -LogStorageAccountId è utilizzato per i log di replicazione, mentre i dischi replicati in Azure sono creati come dischi gestiti.

  4. Attendere che le macchine virtuali raggiungano uno stato protetto dopo la replica iniziale. Questo può richiedere tempo, a seconda di fattori come la quantità di dati da replicare e la larghezza di banda disponibile a monte verso Azure. Quando è presente uno stato protetto, lo Stato del lavoro e la Descrizione dello Stato vengono aggiornati come segue:

    PS C:\> $DRjob = Get-AzRecoveryServicesAsrJob -Job $DRjob
    
    PS C:\> $DRjob | Select-Object -ExpandProperty State
    Succeeded
    
    PS C:\> $DRjob | Select-Object -ExpandProperty StateDescription
    Completed
    
  5. Aggiornare le proprietà di recupero (come la dimensione del ruolo della VM) e la rete Azure a cui collegare la scheda di rete della VM dopo il failover.

    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
    

Note

Se desideri replicare dischi gestiti abilitati a CMK in Azure, esegui i seguenti passaggi utilizzando Az PowerShell 3.3.0 in su:

  1. Abilita il failover ai dischi gestiti aggiornando le proprietà della VM
  2. Usa il Get-AzRecoveryServicesAsrReplicationProtectedItem cmdlet per recuperare l'ID disco per ogni disco dell'elemento protetto
  3. Crea un oggetto dizionario usando New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]" cmdlet per contenere la mappatura dell'ID disco al set di crittografia disco. Questi set di crittografia disco devono essere pre-creati da te nella regione di destinazione.
  4. Aggiorna le proprietà della VM usando Set-AzRecoveryServicesAsrReplicationProtectedItem cmdlet passando l'oggetto dizionario nel parametro DiskIdToDiskEncryptionSetMap .

Passaggio 8: Eseguire un failover di prova

  1. Esegui un failover di test come segue:

    $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. Verifica che la VM di test sia stata creata in Azure. Il lavoro di failover del test viene sospeso dopo aver creato la VM di test in Azure.

  3. Per pulire e completare il failover del test, esegui:

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

Passaggi successivi

Scopri di più su Azure Site Recovery con i cmdlet PowerShell di Azure Resource Manager.