Hace un tiempo en un cliente que cuenta con una arquitectura 100 % maquinas virtuales en Microsoft Azure, tuvimos la necesidad de hacer Backup de las bases de datos SQL que se alojaban en ellas.
Un primer acercamiento fue hacer el Backup y dejar los archivos en el mismo Servidor, pero el metodo no servia debido a que si algo le pasaba a la maquina en cuestion el Backup no era posible de restaurar (no al menos de una manera rapida)
La version utilizada de SQL Server fue la 2014 y para hacer el procedimiento tuvimos que configurar lo siguiente:
* Una cuenta de almacenamiento dentro de la misma region donde se encuentra el Servidor
* Un plan de mantenimiento dentro de SQL Server con la configuracion de las bases de datos a reguardar, el horario para el Backup y el destino del mismo
* Una cuenta de automatizacion para borrar cada 15 dias los Backups viejos, de esta manera no mantenemos Backups no necesarios y ahorramos costos en el almacenamiento.
Definicion del plan de mantenimiento dentro de SQL Server:
En este plan se indica que haga un tipo de Backup full a una URL (que es la URL de la cuenta de almacenamiento con el path a la ubicacion de Backup) y luego se indica que utilice una compresion por default.
Luego si vamos a la configuracion del job dentro de SQL Server Agent podremos ver en detalle la configuracion del dia y horario en el cual se ejecuta la tarea:
Podemos observar que los Backups se estan ejecutando correctamente a la hora deseada:
Ahora debemos asegurarnos que solo queden disponibles en la cuenta de almacenamiento los ultimos 15 dias (Esta cantidad de dias obviamente esta determinada por el negocio), para esto vamos a necesitar ejecutar un script dentro de cuentas de automatizacion de Microsoft Azure:
El contenido del script que borra los archivos con mas de 15 dias es este:
$CleanupTime = [DateTime]::UtcNow.AddHours(-360)
$context = New-AzureStorageContext -StorageAccountName grupontg -StorageAccountKey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Get-AzureStorageBlob -Container "backups" -Context $context | Where-Object { $_.LastModified.UtcDateTime -lt $CleanupTime -and $_.BlobType -eq "PageBlob" -and $_.Name -like "*.bak"} |Remove-AzureStorageBlob
(*) Donde xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx es nuestra account key para acceder a la cuenta de almacenamiento
Con esto tendremos un Backup altamente disponible y que se rota cada 15 (o los dia que eligamos)
Podremos ver el status de la ejecucion de los jobs omo parte del dashboard de cuentas de automatizacion:
Espero que les sirva :)





No hay comentarios.:
Publicar un comentario