Patrick Heyde

Coming from SharePoint Support & Living in SQL BI & Moving to Windows Azure

How To: Migrate HyperV VM nach Azure VM

How To: Migrate HyperV VM nach Azure VM

  • Comments 17
  • Likes

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
  • nochmals kurz nun, eingelogged

    Chris

  • 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

  • Hi Chris,

    es ist extreme wichtig das deine VHD, die du hochgeladen hast auf dynamic IP-Adressen in der Netzwerkarte eingestellt ist. Weiterhin kann die Firewall-Einstellung noch immer RDP blocken... hast du RDP in der Firewall Settings freigeschaltet?

    Das wichtigste jedoch: Sei dir sicher die VM ist überhaupt gestartet. Kannst du die VM starten? weiterhin kannst du überprüfen ob das Image überhaupt hochfährt, schau dir an:

    - im Management Portal bekommt die VM eine interne IP

    - kannst du die VM von einer zweiten Maschines im gleichen Netzwerk (Subnetz) anpingen?

    - ist der VM-Status "Running" oder gestartet?

    Liebe Grüße

    Patrick

  • Hi Patrick

    Das war ja eine sehr schnelle Antwort. Danke.

    Also NW Karte ist dynamic.

    Firewall komplett OFF

    VM Läuft. Kann sie vom DC im selben Netz / NW Gruppe / Affinitätsgruppe pingen.

    Ich habe in der alten Doku nachgeschaut, was es alles Braucht um eine VM vorzubereiten.

    Aber dies ist für Azure 2008 also die erste Version wo eher auf PaaS ausgelegt war.

    Dort sagen Sie Schritt 1 Zertifikat installieren, dann bei Schritt 4 das HPC Pack installieren?

    Dann Schritt 5 waconnect.blob.core.windows.net/.../wacendpointpackagefull.exe

    Windows Azure Tools usw?

    Monster Anleitung: technet.microsoft.com/.../hh184312(v=ws.10).aspx

    Also die Anleitung ist relativ kompliziert, ich hoffe doch es gibt einen einfacheren Weg. Weil du hast ja dies alles nicht beschrieben.

    Ok Vielleicht noch zur Info. Ich habe ein dynamisches VHD, da ich glaube irgendwo gelesen zu haben, dass CSUPLOAD dies in ein Fixes konvertiert. aber vielleicht ist dem auch nicht so)

    Dann noch was. Ich versuche dies mit Windows 8!

    Danke Dir!

  • 1. mir ist nicht bekannt das csupload eine disc von dynamisch auf fix ändert.

    2. die zusätzlichen Schritte hatte ich alle nicht gemacht, sondern einfach nur so wie es dort im Blg-post steht. versucht doch mal eines, eine 2. machines im gleichen azure Netzwerk pingt die vm. Versucht doch mal die RDP-Verbindung von dort aufzumachen?

    LG Patrick

  • 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

  • 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

  • Vielen Dank fürs klären.

    Was mir jedoch nicht gelungen ist, ist ein Sysprep lokal zu machen, ûnd dann das Image mit Add-PersisentVMImage hochzuladen.  Die aus diesen Images erstellen Maschinen waren endlos im Status "Provisioning".

    Ich weiss nicht woran es lag, mit einer Konsole hätte ich sehen können wo der Client stecken blieb ;-)

    Ist geplant so eine Konsole einzubauen?

    Gruss

  • 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....

  • 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.

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment