martes, 9 de julio de 2013

Resincronizar todos los snapmirrors rotos (DR Test II) con PowerShell

Esta es la segunda parte del test de DR. Una vez parados todos los snapmirror para hacer las pruebas de contingencia, hay que arrancar todas las relaciones paradas. En este script lo que se hace es:

1.- Para los servicios CIFS. Muchas veces el resync falla porque hay ficheros abiertos en los volúmenes.
2.- Busca los snapmirror que no se encuentren en la lista negra (te pueden interesar excepciones)
3.- Verifica que está en estado 'broken-off' e ignora el resto.
4.- Resyncroniza las relaciones de snapmirror que cumplen las condiciones.
5.- Arranca nuevamente los servicio CIFS.

¡OJO! si el filer de destino tiene algún volumen en producción, al parar CIFS se pueden ver afectado los ficheros abiertos que no tienen nada que ver con el test de DR. Hay que tener esto en cuenta antes de ejecutarlo en un entorno de trabajo.

# Inicio del script

$allNetAPP = @("NetappDR01", "NetappDR02" ) # <--- controladores_de_dominio_o_direccion_IP
@("vol0", "vol_test") # <--- excluidos_del_script
########################################################################################################################
$password = "76492d1116743f0423413b16050a5345MgB8AGgAbwA2AEwAWgBBAGIAcABQADEALwAyADYAbABuAEgAOQBGADYAcwBqAFEAPQA9AHwAOQBmADUANwAyADkAOABmAGEANgA5AGYAZAA1ADcANAA5ADkANQAzADEAMABkAGYANwA0AGEAYwBkADIAMAA5AGUAYQA2ADMANgBiAGYAYwA0AGIANwA0ADkAZAA3ADgANgA4AGUAZABiADIAYwBhADAAZgBiAGEAMwA5AGMAZQA="
$key = "155 43 100 117 110 219 64 220 246 113 218 12 7 233 143 111 25 241 206 16 209 132 60 235 108 215 245 140 103 215 23 210"
$passwordSecure = ConvertTo-SecureString -String $password -Key ([Byte[]]$key.Split(" "))
$cred = New-Object system.Management.Automation.PSCredential("root", $passwordSecure)
########################################################################################################################

Import-module DataONTAP

Write-Host "#########################################################################"
Write-Host "#########################################################################"
Write-Host "## ##"
Write-Host "## Este proceso va a resincronizar los snapmirrors rotos. ##"
Write-Host "## ##"
Write-Host "## Pulsar + C para abortar el script ##"
Write-Host "## ##"
Write-Host "#########################################################################"
Write-Host "#########################################################################"


foreach ($thisNetAPP in $allNetAPP)

{
Connect-NaController $thisNetAPP -Credential $cred |Out-null
$AllSnapMirrors = Get-NaSnapMirror


#Parando los servicios CIFS antes de resincronizar
Write-Host "Parando CIFS ......."
Invoke-NaSsh -Name $thisNetapp -Command 'cifs terminate -t 0' -Credential $Cred
Write-Host "Netapp: CIFS parado en: " $thisNetapp


foreach ($ThisSnapMirror in $AllSnapMirrors)
{
$Destination = $ThisSnapMirror.destination.split(":")
$State = $ThisSnapMirror.state
#$DestinationFiler = $Destination[0]
$DestinationVolName = $Destination[1]
#Si el volumen no está en la lista negra entonces...
if (($volUnused -NotContains $DetinationVolName) -and ($State -eq "broken-off"))
{
Write-Host "Estado actual ....... " $State
Write-Host "Resincronizando .... " $DestinationVolName
Invoke-NaSnapmirrorResync $DestinationVolName -Confirm:$false
Start-Sleep -s 1
}
}
}

Invoke-NaSsh -Name $thisNetapp -Command 'cifs restart' -Credential $Cred
Write-Host "Netapp: CIFS arrancado en : " $thisNetapp


Write-Host "#####################################################"
Write-Host "## ##"
Write-Host "## Los snapmirrors ya se han resincronizado ##"
Write-Host "## ##"
Write-Host "#####################################################"

$SnapMirror = Get-NaSnapmirror
$SnapMirror | format-table |Out-Default

Start-Sleep -s 10

#Fin del script

No hay comentarios: