KB2115997 – Otra de Snapshots

VMware publicó a principios de Julio el KB2115997 donde describe que una VM puede “congelarse” al momento de intentar crear un snapshot. Esto sucede con las siguientes versiones de VMware Tools y cuando el SO es Windows.

8.6.15
9.0.15
9.4.11
9.10.0
9.4.12

Hice un pequeño script de Powershell para ver las versiones de VMware Tools instalada en las VMs y determinar si hay alguna que corre riesgo.

Al momento no hay una solución para este problema en las versiones 5.x, aunque ya hay un parche para 6.0.

Liga al KB: http://kb.vmware.com/kb/2115997

¡Suerte!

spotify:track:186hvCTyrni4KT9nwIQ7zS

Respaldos automáticos de instancias de EC2 en Amazon AWS

Hasta donde sé, Amazon no tiene un método para programar respaldos automáticos de sus instancias en EC2, así que hice un pequeño script de PowerShell que me permite programar respaldos de un server, específicamente de volúmenes EBS (Elastic Block Storage).

La lógica del script es identificar todos los discos de la instancia, el script supone que tiene solo un disco, pero se puede modificar facilmente para encontrar y respaldar todos en caso de existir mas de uno.

Teniendo el disco, sacamos su “volume ID” y generamos el snapshot. Una cosa interesante del Cmdlet con el que hacemos el snapshot es que podemos ponerle una descripción, para este caso estoy incluyendo la fecha, la hora y el nombre de la instancia, pero podemos ponerle lo que queramos.

Otra cosa que hace el script es que mantiene solo un determinado número de puntos de restauración, en este caso estoy dejando únicamente 7 días. Recordemos que AWS cobra por GB, así que hay que cuidar los centavos 🙂

$nombre = "Mi_Instancia"
$instancia = Get-EC2Instance | select -expandproperty RunningInstance | ? {$_.Tag.Key -eq "Name" -and $_.Tag.Value -eq $nombre}
$id = $instancia.InstanceId
$disco = Get-EC2Volume | Where-Object {$_.Attachment.InstanceId -eq $id}
$fecha = Get-Date -Format "yyMMdd-HHmm"
$descripcion = "backup-$fecha-$nombre"

# Snapshots a mi !!
New-EC2Snapshot -VolumeId $disco.VolumeId -Description $descripcion

# Elimina el Snapshot que tienen mas de 7 días (Bueno, mas de 165 horas, o 6 días + 21 horas)
$7dias = (Get-Date).addhours(-165)
$oldsnapshot = Get-EC2Snapshot | ? {$_.VolumeId -eq $disco.VolumeId -and $_.StartTime -lt $7dias}
Remove-EC2Snapshot -SnapshotId $oldsnapshot.SnapshotId -Force

La manera en la que se programa la ejecución del script de respaldo es utilizando Task Scheduler de Windows, así puede ejecutarse con la frecuencia que queramos.

Si queremos ver todos los snapshots que tiene la instancia ejecutamos esta línea…

 Get-EC2Snapshot | ? {$_.VolumeId -eq $disco.VolumeId} | select description, starttime, state | ft

Algo así …

Captura_de_pantalla_2015-03-07_a_las_21_08_35

Espero lo encuentren útil, y si necesitan ayuda para customizar el script porfavor sólo déjenme un mensaje. Sería un gusto.

Referencias:
AWS Tools para PowerShell http://docs.aws.amazon.com/powershell/latest/reference/Index.html

Reporte Snapshots

En los últimos días me ha tocado apoyar en un par de casos de “monster Snapshots”, en un caso en particular el disco del snapshot consumió la totalidad del datastore y la máquina virtual no podía encender, afortunadamente la máquina virtual estaba configurada con 24GB de RAM por lo que bastó reservarle toda su memoria para liberar espacio suficiente y así se pudo encender la VM. Tuvimos suerte.

¿Pero que es un Snapshot?
Understanding virtual machine snapshots in VMware ESXi and ESX (1015180)

En corto, un snapshot es un disco “delta” que se crea cuando deseamos mantener un punto de restauración de una máquina virtual, NO ES BACKUP. Mientras exista dicho archivo “delta” todas las operaciones de I/O que tenga la VM se van a redirigir hacia el delta, dejando el disco original VMDK en un estado de “solo lectura”. Dicho archivo VMDK “delta” puede crecer hasta el tamaño provisionado de la VMDK original. He ahí la importancia de mantener los snapshot a raya.

La teoría dice que los snapshot deben de durar abiertos la menor cantidad de tiempo, sin embargo muchas veces se olvidan, o lo que he visto mas comunmente, las herramientas de respaldo dejan snapshots sin cerrar y si no los estamos monitoreando pueden tener graves consecuencias para nuestras VMs.

Hay mucha información en línea y vmware ha publicando documentación al respecto, sin embargo, sigue siendo muy común los casos de problemas con los mismos. No es la intención hacer un post de la teoría, mas bien quiero compartir un script de PowerCLI que hice para reportar snapshots abiertos, tamaño y cuanto tiempo llevan creados, con la idea de no tener que llegar al punto donde ya tenemos el problema encima.

Primero, el KB de mejores prácticas:

Best practices for virtual machine snapshots in the VMware environment (1025279)

Script:

$VMs = Get-Cluster -Name $MiCluster | Get-VM
foreach ($VM in $VMs) {
Get-Snapshot -VM $VM |FT VM,
@{Name="Tamaño GB";Expression={"{0:N1}" -f $_.SizeGB};a="center"},
@{Name="Fecha";Expression={"{0:dd-MMM-yyyy}" -f $_.Created};a="center"},
@{Name="Dias";Expression={"{0:N0}" -f ((get-date) - $_.Created).days};a="center"}, 
@{Name="Descripcion";Expression={$_.Description};a="left"} -a
}

Así se ve la salida del script y aprovecho para compartirles un ejemplo.

vm_1

Lo hice para que me arrojara la información de un cluster, pero puede ser editado para que arroje información de las VMs de todo el vCenter, Datacenter, Folder, Resource Pool, vApp, etc.. Con Task Scheduler se puede programar y que nos llegue el reporte por correo.

Es un pequeño script pero puede darnos información muy valiosa que nos puede ayudar a monitorear y así poder tomar medidas antes de que tengamos datastores completamente llenos o, en el peor de los casos, corrupción de discos de máquinas virtuales.

Espero les sea de utilidad.

spotify:track:07YhAU4StAFzsWv2gMCCPb