Estimados lectores,
Hace unas semanas realicé un pequeño desarrollo en Microsoft PowerShell basado en la NetApp Data OnTap PowerShell Toolkit para integrar los SnapManagers de Exchange y/o SQL con SnapVault transfiriendo los snapshots consistentes hacia una cabina de backup. El objetivo de PS Script v1 para Vaulting de SnapShots SME y SMSQL es seleccionar los snapshots recientes del backup consistente de las bases de datos y logs, ubicados en una lista de volúmenes que pasamos como parámetro, para mantener un conjunto de backups en la cabina de destino a modo de archivado.
El script, en su primera versión, está pensado para iniciar las actualizaciones de SnapVault de forma secuencial sobre cada volumen. Este razonamiento se basa en la necesidad de transferir un número relativamente elevado de snapshots sobre enlaces WAN lentos que comparten otros servicios. Con una pequeña modificación del código conseguimos que las actualizaciones se realicen de forma simultánea tal y como veremos en la versión v2.
Para el correcto funcionamiento de PS Script v1 para Vaulting de SnapShots SME y SMSQL se ha diseñado la siguiente lista de parámetros:
[0] ----> Establecer "SMSQL" o "SME" según si transferimos snapshots de SQL o Exchange [1] ----> Número de snapshots a retener en la controladora de Destino [2] ----> Nombre de la planificación de snapshots: por ejemplo "Backup_SME" o "Backup_SMSQL" [3] ----> Controladora de Origen: "NetApp-Produccion" [4] ----> Controladora de Destino: "NetApp-Backup" [5] ----> Volumen de Origen: "Vol_Produccion" [6] ----> Volumen de Destino: "Vol_Produccion_SnapVault" [7] ----> Path de Destino: "/vol/Vol_Produccion_SnapVault/Backup" [n-2] --> Recursividad Volumen de Origen [n-1] --> Recursividad Volumen de Destino [n] ----> Recursividad Path de Destino
El código del script es el siguiente:
# Importar el Módulo DataONTAP instalado previamente en el servidor Import-Module DataONTAP # Inicializar variables para SMSQL o SME if ($args[0] -eq "SMSQL") { $SMBBDD = "sqlsnap" $SMLOG = "sqlinfo" } elseif ($args[0] -eq "SME") { $SMBBDD = "exchsnap" $SMLOG = "eloginfo" } # Establecer la retención de snapshots en la controladora de Destino Connect-NaController $args[4] for($i=6;$i -lt $args.count;$i=$i+3) { Set-NaSnapvaultSecSnapshotSchedule $args[$i] $args[2] -AutoUpdate $false -RetentionCount $args[1] -DaysOfWeek "-" -HoursOfDay "0"} # Iniciar la transferencia de SV seleccionando el snapshot más reciente de SnapManager sobre cada volumen # de Origen. Esperar a que finalice y generar un snapshot en la controladora de Destino. El bucle está diseñado # para ejecutar todas las transferencias secuencialmente. for ($i=5;$i -lt $args.count;$i=$i+3) { Connect-NaController $args[3] $SnapName = get-nasnapshot $args[$i] | ? { $_.Name -imatch $SMBBDD -Or $_.Name -imatch $SMLOG } | Sort-Object AccessTimeDT -Descending | Select-Object -first 1 Connect-NaController $args[4] Start-NaSnapVaultSecTransfer $args[$i+2] -PrimarySnapshot $SnapName.Name $EndSleep = $FALSE while (!$EndSleep) { $SVstate = Get-NaSnapvaultSecStatus -Path $args[$i+2] if ($SVstate.status -eq "idle") { $EndSleep = $TRUE Start-NaSnapvaultSecSnapshot -VolumeName $args[$i+1] $args[2] } } }
El script puede integrarse con los Jobs de SMSQL y los de SME añadiendo pasos adicionales sea el caso de trabajos de SQL (SQL Agent) o bien tareas programadas de Windows. En el caso de usar el agente de SQL podemos configurar el paso adicional directamente con el script y su correspondiente paso de argumentos. Para las tareas programadas de Windows nos podemos apoyar de un proceso por lotes (CMD o BAT) y añadir como segunda acción éste mismo. Veamos un ejemplo:
powershell.exe C:\SnapVaultScripts\SV-SME-SMSQL.ps1 "SME"/"SMSQL" 30 Backup_Exchange/SQL NetApp-ORIGEN NetApp-DESTINO Vol_ORI1 Vol_DST1_SV /vol/Vol_DST1_SV/Backup Vol_ORI2 Vol_DST2_SV /vol/Vol_DST2_SV/Backup Vol_ORIn Vol_DSTn_SV /vol/Vol_DSTn_SV/Backup
El archivo .bat del ejemplo hace una llamada a la PowerShell para ejecutar el script recibiendo la lista de parámetros, separados por un espacio en blanco, en el orden diseñado.
This Post by David Solé Pérez is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License
Excelente script, muy útil para replicar los backups de forma sencilla sin necesidad de Protection Manager.