Hyper-V Replica
Recentemente ho sostituito dei server da diversi clienti e con Hyper-V la migrazione delle VM dal vecchio al nuovo server è un’operazione che può essere eseguita a caldo senza tempi di fermo.
La Replica può sfruttare due tipi di autenticazione:
- Kerberos
- HTTPS certificates
Nel nostro esempio useremo la seconda in quanto il primo tipo di autenticazione può essere usata solo nel caso che l’host Hyper-V sia unito al dominio.
La macchina sorgente (SRV-HYP01) ha Windows Server 2012 R2:

Mentre la macchina di destinazione (SRV-HYP02) ha Windows Server 2019:

Il primo passaggio è quello di creare due certificati per i due host, possiamo eseguire questa operazione su uno dei due server, nel caso specifico mi posizione sulla macchina più recente e tramite Powershell eseguo questi comandi:
New-SelfSignedCertificate -DnsName "srv-hyp01" -CertStoreLocation "cert:\LocalMachine\My" -TestRoot New-SelfSignedCertificate -DnsName "srv-hyp02" -CertStoreLocation "cert:\LocalMachine\My" -TestRoot

Come risultato verranno generati tre certificati, uno per ogni server con la proprietà Enhanced Usage Key set to Client and Server authentication e una CA di test chiamata CertReq Test Root


Se apriamo uno dei due certificati notiamo però che non sono riconosciuti come validi:

Questo perchè il certificato della CA non si trova nella cartella Trusted Root Certification Authorities, se lo spostiamo in questo percorso e riapriamo il certificato notiamo che ora è considerato valido:

Ora che i certificati sono considerati validi dobbiamo esportare il certificato del server srv-hyp01 e della CA:








Ora il certificato della CA:


Copiamo i due certificati nel server srv-hyp01:

Spostiamoci sul server srv-hyp01 e installiamo il certificato della CA con il tasto destro sul certificato e scegliamo l’opzione Install Certificate:



Allo stesso modo importiamo il certificato dell’host:



Una volta terminato il processo di importazione possiamo verificare che il certificato host è al suo posto:

Così come il certificato della CA:

A questo punto dobbiamo disabilitare la revoca dei certificati su entrambi gli host tramite il comando:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Replication" /v DisableCertRevocationCheck /d 1 /t REG_DWORD /f

Ora che abbiamo sistemato tutti i prerequisiti per la replica è ora di iniziare a configurare Hyper-V, iniziamo dal server di destinazione configurandolo per ricevere le repliche. Apriamo la console di gestione di Hyper-V e clicchiamo su Hyper-V Settings…, spostiamoci nel tab Replica Configuration e impostiamo i parametri come riportato nell’immagine:

Clicchiamo su Select Certificate… e selezioniamo il certificato che ci viene proposto relativo al server stesso:

Clicchiamo su Ok per terminare la configurazione, un warning ci avvertirà di configurare il firewall per accettare le connessioni sulla porta 443 nel caso fosse abilitato:

La configurazione del server di destinazione è terminata ora non ci resta che spostarci sul server sorgente e abilitare la replica per ogni singola VM.
Apriamo la console di gestione di Hyper-V, clicchiamo con il tasto destro del mouse su una VM e scegliamo Enable Replication…:

Clicchiamo Next nella finestra del Wizard:

Inseriamo il nome del server di destinazione che nel nostro caso è srv-hyp02:

E clicchiamo su Next. Se la connessione con l’host di destinazione è avvenuta correttamente dovremmo vedere la schermata seguente dove dobbiamo scegliere il certificato:

Nella schermata successiva possiamo scegliere quali dischi VHD replicare:

Scegliamo la frequenza di replica:

Nella prossima finestra possiamo scegliere s conservare solo l’ultimo punto di ripristino oppure aggiungere altri punti di ripristino orari, massimo 24 e se avvalerci o meno delle Shadow Copy per creare delle copie Application aware:

A questo punto dobbiamo scegliere come inviare la copia iniziale, nel caso di due host Hyper-V siano in Lan possiamo tranquillamente inviarla via rete, nel caso invece fossero in Lan differente e la VM fosse corposa possiamo anche usare un dispositivo esterno da spedire. Oltre questo possiamo anche impostare l’inizio della replica:

Se tutti i parametri sono corretti possiamo cliccare Finish nella schermata successiva per dar inizio alla replica:

Se tutto è andato a buon fine un messaggio ci informerà che la configurazione è terminata e la replica può iniziare:

Nella console del server di destinazione possiamo seguire lo stato di avanzamento della replica inziale:

Lo stesso nel server di destinazione:

Dopo qualche tempo possiamo visualizzare le statistiche:

Nel server di destinazione la VM sarà sempre spenta e aggiornata secondo la frequenza che abbiamo scelto nella configurazione della replica stessa:
