next

Exchange Server: Wartungsmodus und mitgelieferte Scripts

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.

[code lang=“powershell“]

$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

[/code]

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.

[code lang=“powershell“]

$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

[/code]

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

[code lang=“powershell“]cd $exscripts
.\StartDagServerMaintenance.ps1 <ServerName>[/code]

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

[code lang=“powershell“].\StopDagServerMaintenance.ps1 <ServerName>[/code]

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.

[code lang=“powershell“].\ RedistributeActiveDatabases.ps1 -DagName <DAGName> -BalanceDbsByActivationPreference -ShowFinalDatabaseDistribution [/code]

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.

Beitrag teilen
next

Ihr Feedback ist uns wichtig

Kommentieren und bewerten

    next

    Kommentare

    • Thomas Janetscheck

      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.ps1Bei weiteren Fragen kommen Sie gerne nochmal auf mich zu.Beste Grüße und viel Erfolg, Thomas Janetscheck

      Antworten
    • HaJoWe

      Hallo Herr JanetscheckIch 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

      Antworten

      Diese Website verwendet Cookies. Wenn Sie diese Website weiterhin nutzen, stimmen Sie der Verwendung von Cookies zu. Weitere Infos

      Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um Ihnen das beste Surferlebnis zu ermöglichen. Wenn Sie diese Website ohne Änderung Ihrer Cookie-Einstellungen verwenden oder auf "Akzeptieren" klicken, erklären Sie sich damit einverstanden.

      Schließen