Migration automatique de VM via PowerShell : Vider automatiquement une salle Informatique DataCore-VMware avant coupure totale de courant

Product by:
Pascal Pucci

Reviewed by:
Rating:
5 Stars
On 26 avril 2012
Last modified:26 avril 2012

Summary:

Example of use of PowerShell script with Vsphere to script automatic downtime and VM migration between tow data-center using DataCore SAN.

à quoi ça sert ?

Imaginer deux salles informatiques connectées et équipées de la solution DataCore (en réplication synchrone) et d’une d’une infrastructure VMware reposant dessus.

Salle Ouest : 1 DataCore + 1 ESXi

Salle Est : 1 DataCore +  1 ESXi

Si une salle perd accès au courant électrique, les onduleurs prennent le relais. Cependant, si une coupure prolongée intervient, par exemple, sur la salle Est. Oui, le stockage DataCore restera disponible, mais cependant les VMs situés à l’Est devront redémarrer à l’Ouest (via Vmware HA). Ce qui provoquera une coupure d’activité.

Aussi, l’idée est la suivante : « Détecter la coupure de courant et migrer automatiquement les VMs à l’Ouest puis tout éteindre à l’Est proprement dans le temps ondulé ». On évite ainsi une coupure d’activité des VMs.

Comment faire ? Coupler les serveurs aux onduleurs, configurer le Powershut à exécuter un script et enfin écrire le script réalisant les opérations. Nous utiliserons un script Batch exécuté automatiquement par le PowerShut de l’onduleur. Ce script exécute ensuite un script PowerShell devant exécuter les opérations.

Voir ci-dessous :

script stopEst.bat :

@echo off
set PATH=C:Program Files (x86)VMwareVMware vSphere CLIPerlsitebin;C:Program Files (x86)VMwareVMware vSphere CLIPerlbin;%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;%SYSTEMROOT%System32WindowsPowerShellv1.0;C:Program Filesipmiutil

cd c:temp
move logMigration.txt logMigration.old
set LogFileExt=C:templogMigration.txt

cd C:UsersAdministrateurDesktopbin
powershell -ExecutionPolicy Unrestricted -File stop_est.ps1 >> %LogFileExt%

Ce script batch exécute le script PowerShell ci-dessous.

script : stop_est.ps1

######################################
# Programme de migration automatique de VM        #
# suite à détection de perte de courant.                       #
# A installer sur un serveur (ici installé                        #
# sur un serveur DataCore connecté à l’onduleur)    #
# Programme exécuté par le powershut                    #
# Pascal Pucci – Mars 2012                                          #
#####################################
# migre_vm vers Ouest et stop Est

$vcenter= »ipVcenter »
$vmOuest= »ipVmOuest »
$vmEst= »ipVmEst »

$expediteur = « from@domain.com »
$destinataire = « to.admin@domain.com »
$smtpServer = « ipServerSmtp »

# Chargement des librairies VMware
Add-PSSnapin VMware.VimAutomation.Core

# Connexion au Vcenter : Exécution, bien entendu, via un utilisateur

# ayant le droit administrateur Vcenter
Connect-VIServer -Server $vcenter

«  »
« Migration des VMs vers Ouest… :  » + (Get-Date)
«  »
Get-VM | Move-VM -Destination $vmOuest

«  »
« Arrêt de vm-Est :  » + (Get-Date)
«  »
# Maintenance
Set-VMHost $vmEst -State Maintenance -Confirm:$false
Start-Sleep -s 5
Stop-VMHost $vmEst -Confirm:$false
# on force au cas où !
Start-Sleep -s 5
Stop-VMHost $vmEst -Confirm:$false -Force

«  »
« Arrêt du service datacore-Est :  » + (Get-Date)
«  »
Get-Service -name Dcsx
Stop-Service -name Dcsx
Get-Service -name Dcsx

# Envoi du mail d’info
$fichier = « C:templogMigration.txt »
$objet = « [ Salle Est ] Migration des VMs vers Ouest  » + [System.DateTime]::Now
$texte = « En raison de la perte courant en salle Est, toutes les VM de la salle Est sont migrées vers la salle Ouest.
Datacore-Est et vm-Est sont arrêtes.
Merci d’intervenir. »

$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
$attachment = new-object System.Net.Mail.Attachment $fichier
$message.Attachments.Add($attachment)
$SMTPclient = new-object System.Net.Mail.SmtpClient $smtpServer
$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
# envoi du message
$SMTPclient.Send($message)

# Arrêt propre du serveur DataCore Est
Stop-Computer -computerName datacore_Est
Start-Sleep -s 20
# On force l’arrêt
Stop-Computer -computerName datacore_Est -Force
# Pascal Pucci – Pascal dot Pucci at Pascalou dot org

Et voilà, quelques lignes de PowerShell et le tour est joué. Vive le scripting… Enjoy !

Example of use of PowerShell script with Vsphere to script automatic downtime and VM migration between tow data-center using DataCore SAN.
Ce contenu a été publié dans Virtualisation, avec comme mot(s)-clé(s) , , , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.