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