How To: Migrate HyperV VM nach Azure VM

Hallo @all,

[translate to English: bingTranslate]

[Update18.10.2012:Azure Workshops Microsoft Cloud Event für Infrastructure as a Service: Dynamic Infrastructure Day ]

hier kommt mein nächster Schritt in Richtung Azure Infrastructure as a Service. Mit dem folgenden Blogpost beschreibe ich wie man die eigene VM (gehostet auf meinem HyperV-Server) in die Windows Azure Cloud migriert.

Warum habe ich den Schritt in die Azure Cloud gewählt:

1. Pay As I Use. Ich werde die VM mit der AzureVM-Config wie in meinem BlogPost Export all AzureVM Config still legen und keine Kosten produzieren. Wenn ich diese Umgebnung nicht mehr benötige, treten maximal ein paar Cent Storage Kosten auf oder ich lagere sogar noch diese Kosten auf eine Externe USB-Platte aus. Komme ich morgens zur Arbeit und möchte die Umgebung verwenden, benötige ich nur 3 Schritte in einem Powershell-Script oder im Azure Portal um die Umgebung wieder zum Leben zu erwecken. Ist die Umgebung gestartet dann produziert man erst ab dem Zeitpunkt Kosten für die Compute Ressourcen. Nachdem man Projektaufgaben beendet hat, starte ich mein PowerShell-Skript - ich bin halt bequem - und fahre wieder alles runter und produzierte keine Kosten mehr. Smile

2. Scale on Demand: Bei SharePoint und SQL benötigt man nicht selten mehr als 4 CPU-Kerne pro VM. Wenn dann noch die Entwicklungsumgebung ähnlich der Produktivumgebung sein muss, dann besteht die Development-Umgebung aus mehr als einem SharePoint und SQL Server. Die meisten Laptops sind dann zu klein. Mein Laptop und auch mein mein HyperV-Server kann gegen diese Hardware-Übermacht aus der Cloud nicht mithalten. Mit einem Mouse-Click wächst die VM an CPU, RAM oder Festplattenspeicher. Das Azure VM Data Center bietet dem Entwickler und Tester ganz neue Möglichkeiten effizient zuarbeiten. Nachdem das Projekt beendet ist, kann ich mit einem Knopfdruck die Hardware-Ressourcen in der Azure-Cloud zurückgeben. Smile

image  image image
Im Windows Azure Rechenzentrum

3. Schneller Aufbau von Development-, Test-Umgebungen als direktes Abbild der Produktions-Umgebung: Die VHD-Dateien kann man von onPremise nach Azure Virtual Machines einspielen. Eine AzureVM-Umgebung kann ein direktes Abbild der Produktionsumgebung sein und reduziert Projektaufwendungen beim Aufbau der Entwicklungs- und Test-Umgebung.

image

4. Bidirektionale Migration: Die Migration von onPremise-VMs nach AzureVM funktioniert auch in die andere Richtung. D.h. man kann die VMs aus der Azure Cloud verschieben in ein onPremise Rechenzentrum. Die VHD wird nicht konvertiert oder vom Dateiformat verändert. Damit bleibt die Möglichkeit erhalten zu einem späteren Zeitpunkt aus der AzureVM Cloud in eine onPremise-Umgebung zu migrieren.

So zurück zum Thema, wie funktioniert das jetzt im Detail.

Als Ausgangsbasis habe ich eine VM mit einer VHD-Größe von 250 GB. Auf dem Image sind installiert:

  • SQL Server 2012
  • SharePoint 2010 + SP1
  • Visual Studio 2010
  • SharePoint Designer 2010

Es ist eine reine Developer-Umgebung, daher ist alles auf C installiert.

Mein Ziel ist es die VM nach Windows Azure VM zu migrieren, um künftig die Development und Test-Umgebung mit den Möglichkeiten von Azure VM zu skalieren. Frei nach dem Motto: Scale on Demand. Doch bevor es losgeht hier ein paar wichtige Details, um die folgenden Schritte zu verdeutlichen.

In der onPremise Virtualisierung und der Windows Azure Virtual Maschines gibt es ein paar Unterschiede bei den Rahmenparameter. Einige Überlappen und andere nicht:

Eigenschaften

onPremise virutalisiert (HyperV)

Window Azure Virutal Maschine

C Drive (OSDisk)  Größe

0 … 2 … TB

0…128 GB

vhd-DiskType für OS

fix oder dynamisch

fix

Daten Disk Größe / DataDisk Size

1 …. n TB pro Disk

max. 1 TB

DataDisk Typ

fix oder dynamisch

fix

IP Adresse dynamisch oder statisch dynamisch, mit unbegrenzter Leasezeit. D.h. die IP wird dynamisch vergeben aber bleibt für immer an der VM. Sozusage eine nie ablaufende dynamische IPAdresse, die so gut ist wie Statitisch IP Smile

Wie man sieht, es kann vorkommen, dass man die VHD erst vorbereiten muss. In meinem Fall ist die VHD vom Typ dynamisch, hat eine Größe von 250 GB, wobei die VHD nur mit 66 GB effektiven Daten gefüllt ist. Mein Image läuft mit statischen IP-Adressen und muss vor dem Move nach AzureVM auf Dynamische IP-Adressen umgestellt werden.

In meinem Fall ist die OSDisk mit 250 GB zu groß. Ich komme also nicht drumherum die VHD zu verkleinern und den DiskType von dynamisch nach Fix zu ändern. Und  los gehts….

How to steps:

0. IP Adresse der VM von Static auf Dynamisch ändern.

imageimage

1. In der VM aufräumen und die Fragmentierung der Daten beseitigen: defrag disc c-drive
image

2. Anpassen der 250 GB-Partition über das Disk Management in der VM–> partition reduzieren/shrink volume auf unter 128 GB.
image
Ich habe mich für eine OSDisk-Größe von 65 GB entschieden. Damit hat das Betriebssystem noch 2 GB freien Speicherplatz. Ist die VM erst einmal in der Azure Cloud, werden die Temp-Daten wie das PageFile nach D-Drive ausgelagert.
Tipp: das D-Drive ist in Azure eine Temporäre Disk, extreme schnell und produziert keine Kosten Smile. Vorsicht ist dennoch geboten da die Temp-Disk nicht vor Datenverlust gesichert wird. Daher gut für Temporäre Daten wie dem Pagefile.

image

3. VM herunterfahren

4. Jetzt kommt ein altes Tool zum Einsatz um die dynamische Disk in eine Fix-Disk zu konvertieren und auch die VHD-Größe wird angepaßt: VHD Resizer starten:
- Konfig anpassen für das Ziel:

  • Disktyp: fix
  • Disk Size: 70 GB

image

 

6. Mit csupload aus dem Windows Azure SDK lädt man die VHD nach Azure hoch. csupload Add-Disk

c:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-06\bin>
csupload Add-Disk
-Destination "https://portalvhdsltq57fh1b3hp7.blob.core.windows.net/vhds/sq
l2012ImageX12.vhd" -Label "SP2010SQL2012Dev" -LiteralPath "E:\_VM\ImageX
II\Virtual Hard Disks\sql_Image2012_XII_Fix.vhd" -OS Windows

OPTIONAL: Optimierung von csupload für einen Schnelleren Upload Winking smile: anpassen von csupload.config:
Achtung: die Konfiguration ist abhängig von der vorhandenen Internetanbindung, je stabiler die Leitung und größer die Bandbreite desto mehr Threads und größere Pakete sind möglich.

Ich verwende bspw:
- Thread Anzahl erhöhen von 8 auf 15   –>   maxUploadThreads
- Packetgröße 1024 auf 4096   –>   uploadBlockSizeInKb 
- maxVHDSize von 66560 auf 75000   –>   maxVHDMountedSizeInMB
Azure IaaS erlaubt eine OSDisk-VHD von bis zu 128 GB. CSUPLOAD erlaubt in der Config 66.560 MB. Damit muss der Wert angepaßt werden, sonst akzeptiert csupload meine 70 GB-VHD-Datei nicht. Smile

image

 

7. auf Azure erstellt man die VM mit PowerShell oder dem Management Portal: 
Menü-Pfad: NEW / Virtual Machine / From Gallery / My Disk

image 

Da ist meine Disk: sqlImage2012XIIFix.vhd Smile

image

image image

Die VM ist ready to use.

8.[optional] Letztes FineTuining:

8.1. Die temp-Files auf D-Drive auslagern

image

 

8.2. eine zusätzliche DataDisk hinzufügen: bspw. über das Azure Management Portal und die DataDisk verwenden um die SQL Datenbanken auszulagern.

imageimage

Jetzt noch im Disk Management der VM die Disk einbinden und die Datenbanken im SQL Server bewegen:

imageimage

image

So fertig, SharePoint 2010 und SQL Server 2012 Developmentumgebung ist auf Azure Virtual Machines. Smile

image

 

Liebe Grüße

Patrick

Comments

  • Anonymous
    January 01, 2003
    The comment has been removed
  • Anonymous
    January 01, 2003
    The comment has been removed
  • Anonymous
    January 01, 2003
    Hi Chris, ja der Unterschied in csupload von Add-Disk und Add-PersistentVMImage ist groß.
  1. Add-Disk benötigt kein sysprep. wenn die VHD herunterfahren wird diese einfach in Azure wieder aufwachen.
  2. Add-PersistentVMImage benötigt ein Sysprep das diese VHD in die Image Library hinterlegt wird. Damit wird jedes mal wenn eine neue VM auf Basis des Image erstellt wird eine Kopie der VHD erstellt. Danach wird die Kopie gestartet. Beim Starten bekommt dann die neue VM neue Initiale IDs wie SID, MachineID etc.... Fazit: Add-Disk verwendet man zum einfachen verschieben der VM Add-PersistentVMImage verwendet man wenn man eine VM als Vorlage in Azure hochladen möchte. Liebe Grüße Patrick
  • Anonymous
    January 01, 2003
    The comment has been removed

  • Anonymous
    January 01, 2003
    Ok Merkwürdig. War nicht angemeldet vorhin. Es hat wohl den ganzen Kommentar geschluckt. Ich habe versucht VHD Files auf Azure zu laden. Dies funktionierte. Jedoch kann ich mich nicht auf die generierten VMs verbinden. Ich habe die VMs aus dem hochgeladenen VHD erstellt. Auf VMs die mit den vorgegebenen Templates erstellt wurden, kann ich problemlos eine RDP Session öffnen. Ich habe die VHDs aus meiner Hyper-V Virtual Maschine Manager Konfiguration exportiert und danach mit CSUPLOAD hochgeladen. Ich habe sogar Remote Desktop aktiviert und den lokalen Admin in die Gruppe der Remote Desktop Services aufgenommen. Leider blieb mein Versuch erfolglos. Vielleicht bleibt die Maschine nur irgendwo stecken und ich kann nicht zugreifen, da ich keine "Konsole" habe. Wie waren deine Netzwerk Einstellungen, seitens Azure? Hast du das Image irgendwie noch bearbeitet oder zusätzliche Treiber installiert? Danke für deine Hilfe

  • Anonymous
    January 01, 2003
    nochmals kurz nun, eingelogged Chris

  • Anonymous
    January 01, 2003
    Diese Frage müssen wir nach Redmond stellen. zwecks Provisiongdauer, das kann schon einige Minuten dauern und ich würde da auch schon mal 10-30+ min warten, jetzt in der beta/preview zeit. In der Regel bin ich zu ungeduldig und es würde eigentlich durchlaufen....

  • Anonymous
    January 01, 2003
    The comment has been removed

  • Anonymous
    January 01, 2003
    Auch ich konnte nach dem Hochladen nicht per RDP auf meine Instanz zugreifen. Die Webserver antworteten jedoch. Auch Ping hat funktioniert. Also der wichtige Hinweis: "Enable Remote Desktop" nicht Vergessen! Und schon kann man seinen Server auch wieder administrieren ;-) Super Artikel, Danke Patrick.

  • Anonymous
    January 01, 2003
    Hi Patrick Ich habe es finalmente hinbekommen. Danke für deine Inputs. Also es geht auch mit dynamischen VHDs. Wichtigste Erkenntnis: Die Windows 8 Maschine nicht als Image hochladen sondern mit dem Add-Disk Command. Danach, den Client starten. Sysprep ausführen und mit "Capture Image" das Image erstellen. So hat es aufjedenfall funktioniert. Jetzt laufen 10 Win 8 Clients in der Domäne. Ich habe nun ebenfalls einen Blog Eintrag geschrieben und mein "Experiment" darin dokumentiert. Vielleicht hilfts jemandem weiter. Informationen zu Azure IaaS sind noch nicht so viele vorhanden... Schritt 1 Link: www.cloudtec.ch/.../create-vhd-image-for-azure.html Schritt 2 Link: www.cloudtec.ch/.../upload-vhd-to-azure.html Schritt 3 Link: www.cloudtec.ch/.../create-virtual-machine-vhd-in-azure.html Schritt 4 Link: www.cloudtec.ch/.../capture-image-in-azure-after-sysprep.html Schritt 5 Link: www.cloudtec.ch/.../installing-windows-8-on-windows-azure.html Beste Grüsse Chris

  • Anonymous
    December 29, 2013
    Pingback from How to Setup/Einrichten einer Azure Management Machine : Windows Server Customer Engineering (Customer Advisory Team) : The Official Microsoft IIS Site

  • Anonymous
    December 29, 2013
    Hallo@all, die folgende Anleitung erklärt wie man sich als Cloud-Administrator eine Arbeitsumgebung zusammenstellt

  • Anonymous
    December 29, 2013
    Pingback from How to Setup/Einrichten einer Azure Management Machine - Windows Virtualization Team Blog - TechNetKlub

  • Anonymous
    December 29, 2013
    Pingback from How to Setup/Einrichten einer Azure Management Machine - Exchange Team Blog - TechNetKlub

  • Anonymous
    December 29, 2013
    Pingback from How to Setup/Einrichten einer Azure Management Machine - Windows Server Division weblog - TechNetKlub

  • Anonymous
    December 29, 2013
    Pingback from How to Setup/Einrichten einer Azure Management Machine - System Center Team Blog - TechNetKlub

  • Anonymous
    December 29, 2013
    Pingback from How to Setup/Einrichten einer Azure Management Machine - Forefront TMG Team Blog - TechNetKlub