2
(Noch nicht bewertet)
17. März 2016

Exchange Server: Wartungsmodus und mitgelieferte Scripts

Seit Exchange Server 2016 werden alle Exchange Rollen mit Ausnahme der Edge Transport-Rolle auf dem gleichen System betrieben. Die aktuelle Version erlaubt also keine Rollentrennung mehr. So handelt es sich bei der Exchange Mailbox-Rolle nicht mehr nur um die Datenbank-Engine, sondern auch um Backend-Transport-Funktionen. Was muss nun bei Updates beachtet werden und wie geht man mit den mitgelieferten PowerShell-Scripts um?


Vorgehen

Um sicherzustellen, dass es bei der Installation von Updates auf einem Mailbox Server nicht zu Datenverlust kommt, reicht es daher nicht aus, die aktiven Datenbankkopien auf einen zweiten Mailbox Server innerhalb der DAG zu verschieben, sondern sind auch weitere Schritte notwendig, damit auch alle Transportwarteschlangen geleert und nicht mehr neu gefüllt werden.

Hierzu habe ich ein kleines PowerShell-Script zusammengestellt, das dafür sorgt, dass die Warteschlangen geleert, Nachrichten auf einen anderen, zufällig ausgewählten, Postfachserver verschoben und der Transport-Dienst neu gestartet werden. Im Failover Cluster werden der Server angehalten, alle aktiven Datenbankkopien innerhalb der DAG verschoben und gleichzeitig verhindert, dass diese wieder auf dem Server aktiviert werden. Danach wartet das Script 5 Minuten lang und prüft danach, ob alle Datenbankkopien verschoben wurden. Ist dies nicht der Fall, wird der Verschiebevorgang nochmal angestoßen. Danach erfolgt noch eine Ausgabe, aus der ersichtlich ist, ob der Server nun wirklich „offline“ ist, also keine Exchange-Funktionen mehr bereit stellt.

$Servername = $ENV:ComputerName
$Test = Test-Path "C:\Temp"
If (!$Test) {
mkdir C:\Temp
}
$Filename = "C:\Temp\" + $Servername + "_DatabaseCopyAutoActivationPolicy.txt"
$MailboxServers = Get-ExchangeServer | where {$_.ServerRole -like "*Mailbox*"}
$TargetMailboxServers = @()

$MailboxServers | where {$_.Name -ne $Servername} | Foreach {$TargetMailboxServers += $_}
$TargetServerFQDN = (Get-Random $TargetMailboxServers).FQDN

Set-ServerComponentState $Servername -Component HubTransport -State Draining -Requester Maintenance

Restart-Service MSExchangeTransport

Redirect-Message -Server $Servername -Target $TargetServerFQDN
Suspend-ClusterNode $Servername
Set-MailboxServer $Servername -DatabaseCopyActivationDisabledAndMoveNow $True
Wait-Event -Timeout 300
(Get-MailboxServer $Servername).DatabaseCopyAutoActivationPolicy > $Filename
Set-MailboxServer $Servername -DatabaseCopyAutoActivationPolicy Blocked
Set-ServerComponentState $Servername -Component ServerWideOffline -State Inactive -Requester Maintenance

Wait-Event -Timeout 300

If (Get-MailboxDatabaseCopyStatus -Server $Servername | where {$_.status -eq "Mounted"}) {
Move-ActiveMailboxDatabase -Server $Servername
}
Get-ServerComponentState $Servername | ft Component,State –Autosize

Danach kann der Server gepatcht oder mit einem neuen Exchange-CU versehen und neu gestartet werden.

Nach Abschluss der Arbeiten ist es wichtig, den Wartungsmodus zu beenden, damit der Server wieder seine Arbeit aufnehmen kann. Auch hierzu habe ich einzelne Schritte in einem Script zusammen gestellt.

$Servername = $ENV:ComputerName
$Filename = "C:\Temp\" + $Servername + "_DatabaseCopyAutoActivationPolicy.txt"
$OriginalDBCopyAutoActivationPolicy = Get-Content $Filename

Set-ServerComponentState $Servername -Component ServerWideOffline -State Active -Requester Maintenance
Resume-ClusterNode $Servername
Set-MailboxServer $Servername -DatabaseCopyActivationDisabledAndMoveNow $False
Set-MailboxServer $Servername -DatabaseCopyAutoActivationPolicy $OriginalDBCopyAutoActivationPolicy

Set-ServerComponentState $Servername -Component HubTransport -State Active -Requester Maintenance

Restart-Service MSExchangeTransport

Get-ServerComponentState $Servername | ft Component,State –Autosize

Mitgelieferte PowerShell-Scripts
Daneben liefert Exchange-Server fertige Scripts mit, beispielsweise zum Aktivieren oder Deaktivieren des Malware Scannings, zum Trennen einer Public Folder Mailbox oder eben zur Wartung eines Mailbox Servers innerhalb von DAGs. Die Scripts befinden sich bei Exchange Server 2013 und 2016 im Verzeichnis „C:\Program Files\Microsoft\Exchange Server\V15\Scripts“, unter Exchange Server 2010 handelt es sich um das Verzeichnis „C:\Program Files\Microsoft\Exchange Server\V14\Scripts“. Die Exchange Management Shell kennt dieses Verzeichnis als $exscripts.

Über das Script StartDagServerMaintenance.ps1 wird der Wartungsmodus auf einem DAG-Mitglied gestartet, StopDagServerMaintenance.ps1 beendet ihn wieder. Nach Abschluss der Wartung kann mit Hilfe des Scripts RedistributeActiveDatabases.ps1 dafür gesorgt werden, dass alle Datenbanken wieder auf den Servern mit der jeweils höchsten Activation Preference aktiviert werden.
Die Scripts sind parametrisiert, lassen sich also ähnlich wie CMDLETs bedienen. Der Aufruf

cd $exscripts
.\StartDagServerMaintenance.ps1 <ServerName>

wechselt in das Script-Verzeichnis und startet den Wartungsmodus auf dem Server, der als Parameter angegeben wird.

.\StopDagServerMaintenance.ps1 <ServerName>

beendet den Wartungsmodus wieder. Über den letzten Befehl werden alle Datenbanken wieder auf die Server mit der jeweils höchsten Activation Preference verteilt und das Ergebnis danach angezeigt.

.\ RedistributeActiveDatabases.ps1 -DagName <DAGName> -BalanceDbsByActivationPreference -ShowFinalDatabaseDistribution 

Wie Sie sehen, ist es einerseits wichtig, über den Wartungsmodus innerhalb von Exchange Server informiert zu sein und dass Exchange Server andererseits wichtige Funktionen bereits über vordefinierte Scripts out of the box liefert. Schauen Sie sich gerne mal in dem oben genannten Verzeichnis um und entdecken Sie vielleicht die ein oder andere Funktion, die Ihnen so noch nicht bekannt war.

2 Gedanken zu „Exchange Server: Wartungsmodus und mitgelieferte Scripts“

  1. Hallo Herr Janetscheck

    Ich war auf der Suche danach wie Exchange 2016 Server in einer DAG zum Update oder reboot in den Wartungsmodus gesetzt werden kann. Hier bin ich auf Ihren Artikel gestossen, den ich soweit sehr gut finde.
    Ich habe jedoch noch eine Frage dazu., vielleicht können Sie mir dazu die Antwort geben.
    Wenn ich es recht verstehe:
    Muss nach dem ersten Script erst der Update gemacht werden oder muss erst nach dem Script
    das StartDagServerMaintenance.ps1 ausgeführt werden
    Die Reihenfolge ist für mich nicht klar.

    Im Voraus Vielen Dank für die Antwort

  2. Guten Morgen Herr Weber,

    Vielen Dank für Ihre Anfrage. Sie können das Script StartDagServerMaintenance.ps1starten, was dazu führt, dass der Server in den Wartungsmodus versetzt wird. Das Script liefert Microsoft mit der Exchange-Installation mit und funktioniert sehr gut.

    Die Schritte sind also:
    1. StartDagServerMaintenance.ps1
    2. Patchen und/oder herunterfahren
    3. StopDagServerMaintenance.ps1
    4. RedistributeActiveDatabases.ps1

    Bei weiteren Fragen kommen Sie gerne nochmal auf mich zu.

    Beste Grüße und viel Erfolg,
    Thomas Janetscheck

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.