HyperV réplication

De BlaxWiki
Révision datée du 7 février 2021 à 17:15 par Admin (discussion | contributions) (Page créée avec « <pre> <# .SYNOPSIS Script de monitoring de la réplication Hyper-V d'Agarik vers le client Eco-mobilier La réplication a lieu toute les nuits, elle est en suspend la jour... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche
<#
.SYNOPSIS
Script de monitoring de la réplication Hyper-V d'Agarik vers le client Eco-mobilier
La réplication a lieu toute les nuits, elle est en suspend la journée
#>

# Listes des HVs :
$hypervs = @( "hyperv01", "hyperv02")

# Liste des VMs repliquées :
$replicatedVMS = @( "simm-sql1.ecomobilier.fr", 
                    "simm-www1.ecomobilier.fr", 
                    "voyager01.ecomobilier.fr", 
                    "sicol-sql1.ecomobilier.fr",
                    "sicol-www1.ecomobilier.fr" )

# Heure de début et fin de plage de maintenance
$replStartTime = 21
$replStopTime = 07 #Doit toujours etre le jour d'apres que le script fonctionne


$ErrorActionPreference = "Stop"
Import-Module "$PSScriptRoot\agarik.psm1" -DisableNameChecking



if (((get-date).Hour -ge $replStartTime) -or ((get-date).Hour -lt $replStopTime)) {
    $canReplicate = $true
}
else {
    $canReplicate = $false
}

# Guess servername by parsing options of the VisionClient Service
try {
    $visionService=(gwmi win32_service|?{$_.name -eq "VisionClient"}).pathname
    $name=[regex]::match($visionService,'-H ([^\s]+)').Groups[1].Value
}
catch {
    throw("Could not guess serverName from Vision Service")
}
if ([string]::IsNullOrEmpty($name)) {
    throw("Could not guess serverName from Vision Service")
}
$global:server=$name
$global:service="appli"

Append-Supervision("Status de la réplication : ")
if ($canReplicate) {
    Append-Supervision("     &green Active")
}
else {
    Append-Supervision("     &clear Suspendue")
}
Append-Supervision("     Plage de réplication : {0}h - {1}h" -f $replStartTime,$replStopTime)
Append-Supervision("`n")

Append-Supervision("Etat de la réplication des VMs :")

Foreach ($vm in $replicatedVMS) {
    $rep =  Get-VM -ComputerName $hypervs -VMName $vm -ErrorAction SilentlyContinue| Get-VMReplication -ErrorAction Continue
    if (!$rep) {
        Append-Supervision(" - &red {0,-30} - Pas de configuration de replication" -f $vm)
        Raise-Error
    }
    elseif (($rep.State -eq "Suspended")) {
        if (!$canReplicate) {
            Append-Supervision(" - &clear {0,-30} - Replication en suspend." -f $vm)
        }
        else {
            Append-Supervision(" - &red {0,-30} - Replication suspendue pendant une periode de replication." -f $vm)
            Raise-Error
        }
    }
    elseif (($rep.State -eq "Replicating")) {
        if (!$canReplicate) {
            Append-Supervision(" - &red {0,-30} - Replication en cours pendant la journee." -f $vm)
            Raise-Error
        }
        else {
            Append-Supervision(" - &green {0,-30} - Replication activée." -f $vm)
        }
    }
    else {
        Append-Supervision(" - &red {0,-30} - Erreur de replication" -f $vm)
        Append-Supervision("           Status : {0} Health : {1} " -f $rep.State,$rep.Health)
        Raise-Error
    }


    # Verification derniere replication
    if ($rep) {
        if ((New-TimeSpan ($rep.LastReplicationTime) (Get-Date)).Hours -gt 24) {
            Append-Supervision("           &red Dernière réplication : {0} " -f $rep.LastReplicationTime)
            Raise-Error
        }
        else { 
            Append-Supervision("           &green Dernière réplication : {0} " -f $rep.LastReplicationTime)
        }
    }
    Append-Supervision("")
}



Send-Supervision
$global:outputMon=""