wprocopio
Contributor
Contributor

Effettuare shutdown di emergenza di tutte le vm in un cluster HA vcenter 7

Salve ,

abbiamo un cluster in HA con vcenter 7, ci siamo trovati nell'esigenza di dovere forzatamente spegnere tutti gli host per via di un incendio per evitare che i server aspirassero fumi e ceneri , dopo il passato pericolo abbiamo cercato la voce per impostare lo spegnimento in automatico delle VM allo spegnimento dell'host senza che queste facessero lo spostamento su altri host o venissero killate malamente, ovviamente abbiamo trovato la voce che recita che in un cluster HA le voci di start-up e shutdown da impostare manualmente sono disabilitate.

Documentandoci abbiamo visto che si possono creare delle regole su gruppi host e in granulare agire con degli overraid sulle singole VM ma questo ci sembra di capire molto utile  per la ripartenza delle VM senza che queste si spostino o dando delle priorità di accesso a servizi..

In sostanza la domanda é : come posso spegnere in automatico e in sequenza le vm e poi l'host senza che queste si spostino su altri host ?

Grazie dell'attenzione

E.B.

 

0 Kudos
2 Replies
fabio1975
Expert
Expert

Ciao 

Io in da alcuni clienti utilizzo uno script powercli dove procedo in questo maniera:

Si collega al vCenter e:

- Esporta l'elenco di tutte le VM accese 

- Spegne tutte le VM ad eccezzione del vCenter

- Spegne tutti gli host a parte quello che ospita il vCenter

Si collega ll'host che ospita il vCenter e:

- Spegne la VM del vCenter 

-Spegne l'host che ospita il vCenter 

 

Lo script è questo (se vuoi avere un ordine per spegnere le VM puoi passargli un file CSV con le VM da spegnere, basta una piccola modifica allo script che se vuoi ti posso fare). Ovvimente prima di lanciarlo sulla produzione provalo in un ambiente di test 

########################################

#Script di poweroff e poweron delle VM di una infrastruttura VMware Cluster
#Verione 0.1
# Attualmente lo script ha insieme sia la parte di shutdown che poweron
#La parte di shutdown spegne nell'ordine:
# - VM (no vcenter)
# - Hosts (escluso quello del vcenter)
# - vCenter
# - Host del vCenter
# Prima di spegnere esporta il tutto in un file csv (le vm accesse) per poi utilizzarlo per riaccenderle
#Parametri
# Nome vCenter
$vcName = '<nome del vCenter>'
# Nome della VM del vCenter
$vcVmName = '<Nome della VM del vCenter'
# Richiedo le credenziali del vCenter
$vCenterPassword = Get-Credential
# Richiedeo le credenziali dell'HostEsxi che ospita il vCenter
$esxiPassword = Get-Credential
# Stop every VM and ESXi, except the vCenter and the ESXi node hosting the vCenter
Connect-VIServer -Server $vcName -Credential $vCenterPassword
# Find the vCenter
$vcVm = Get-VM -Name $vcVMName
#Export list of poweredOn VM to file for powerOn
$vmservers=Get-VM | Where-Object{$_.powerstate -eq "PoweredOn" -and ($_.Name -ne $vcVMName)}
$vmservers | select Name | export-csv d:\Attimo\VMservers.csv -NoTypeInformation

#Spengo le VM accesse e attendo che siano spente tutte

$vmservers | Shutdown-VMGuest -Confirm:$false
while((Get-VM -Server $vmservers | where{$_.PowerState -ne 'PoweredOff'}).Count -ne 0){
sleep 5
}


# Shut down all ESXi, except the one hosting the vCenter
Get-VMHost -Server $vmservers | where{(Get-VM -Location $_).Count -eq 0} | Stop-VMHost -Confirm:$false
while((Get-VMHost | where{(Get-VM -Location $_).Count -eq 0}).Count -ne 0){
sleep 5
}

Disconnect-VIServer -Server $vcName -Confirm:$false
Connect-VIServer -Server $vcVm.VMHost.Name -Credential $esxiPassword
Get-VM -Server $vcVm.VMHost.Name | Shutdown-VMGuest -Confirm:$false
while((Get-VM -Server $vcVm.VMHost.Name | where{$_.PowerState -ne 'PoweredOff'}).Count -ne 0){
sleep 5
}
Get-VMHost -Name $vcVm.VMHost.Name | Stop-VMHost -Confirm:$false
Disconnect-VIServer -Server $vcVm.VMHost.Name -Confirm:$false -Force

######################################

Fabio
BLOG: https://vmvirtual.blog

if satisfied give me a kudos
wprocopio
Contributor
Contributor

Ciao..

mi sembra una buona soluzione e la sperimenteremo..

ti ringrazio

saluti

0 Kudos