Was tun wenn ein Exchange 2010 DAG Member Server ausfällt und nicht mehr erreichbar ist? Neu installieren? Ja, aber wie? Und was passiert mit den Datenbank Repliken?

Mein heutiger “Noteinsatz” bei einem Kunden ist mir, da dieses Problem in meiner Exchange 2010 Historie zwischenzeitlich bereits einige Male vorgekommen ist, jedenfalls einen Eintrag im MAXblog wert!

Die Exchange 2010 Server in meinem Beispiel heißen EX1 und EX2, die Exchange DAG heißt DAG. Die betroffenen Exchange Mailbox Datenbanken heißen MBDB10-1, MBDB10-2. Die Namen, sowie die Anzahl der Datenbanken spielen allerdings keine Rolle.

 

Erster Schritt: Datenbankkopien vom ausgefallenen Server löschen

Zunächst ist es wichtig sich anzusehen von welchen Datenbanken Kopien vorhanden waren, und wie die Parameter (activation preference und replay lag time) konfiguriert waren:

[PS] C:\>Get-MailboxDatabase | fl name, servers, activ*, *lag* Name : MBDB10-1 Servers : {EX2, EX1} ActivationPreference : {[EX2, 1], [EX1, 2]} ReplayLagTimes : {[EX2, 00:00:00], [EX1, 00:00:00]} TruncationLagTimes : {[EX2, 00:00:00], [EX1, 00:00:00]} Name : MBDB10-2 Servers : {EX1, EX2} ActivationPreference : {[EX1, 1], [EX2, 2]} ReplayLagTimes : {[EX1, 00:00:00], [EX2, 00:00:00]} TruncationLagTimes : {[EX1, 00:00:00], [EX2, 00:00:00]}

Man kann sich noch den Status der einzelnen Datenbankkopien ansehen – hier jener von der ersten Mailbox Datenbank. Der Zweite Server ist down. Das ist interessant, um es später vergleichen zu können.

[PS] C:\>Get-MailboxDatabaseCopyStatus -Identity "MBDB10-1"

Name                                          Status          CopyQueue
                                                              Length
----                                          ------          ---------
MBDB10-1\EX1                                  Mounted         0
MBDB10-1\EX2                                  ServiceDown     0

Jetzt den nicht mehr erreichbaren Server von jenen Mailboxdatenbanken von denen er eine Kopie hielt entfernen:

[PS] C:\>Remove-MailboxDatabaseCopy "MBDB10-1\EX2"

[PS] C:\>Remove-MailboxDatabaseCopy "MBDB10-2\EX2"

Es werden Fehlermeldungen angezeigt, weil der Server EX2 nicht erreichbar ist. Die erfolgreiche Änderung kann aber durch nochmaliges Absetzen des ersten Kommandos überprüft werden:

[PS] C:\>Get-MailboxDatabase | fl name, servers, activ*, *lag*

Name                 : MBDB10-1
Servers              : {EX1}
ActivationPreference : {[EX1, 1]}
ReplayLagTimes       : {[EX1, 00:00:00]}
TruncationLagTimes   : {[EX1, 00:00:00]}

Name                 : MBDB10-2
Servers              : {EX1}
ActivationPreference : {[EX1, 1]}
ReplayLagTimes       : {[EX1, 00:00:00]}
TruncationLagTimes   : {[EX1, 00:00:00]}

Zweiter Schritt: Den ausgefallenen Server aus der DAG entfernen

Um den ausgefallenen Server aus der DAG zu entfernen einfach folgendes Kommando ausführen:

[PS] C:\>Remove-DatabaseAvailabilityGroupServer -Identity DAG -MailboxServer EX2

In manchen DAG Topologien wird das mit der Fehlermeldung “A quorum of cluster nodes was not present to form a cluster” abbrechen:

[PS] C:\>Remove-DatabaseAvailabilityGroupServer -Identity DAG -MailboxServer EX2

Confirm
Are you sure you want to perform this action?
Removing Mailbox server "EX2" from database availability group "dag".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [?] Help (default is "Y"): y
WARNING: The operation wasn't successful because an error was encountered. You may find more details in log file
"...".
There was a problem changing the quorum model for database availability group dag. Error: An Active Manager operation f
ailed. Error: An error occurred while attempting a cluster operation. Error: Cluster API '"SetClusterQuorumResource() f
ailed with 0x1725. Error: A quorum of cluster nodes was not present to form a cluster"' failed..
    + CategoryInfo          : InvalidArgument: (:) [Remove-DatabaseAvailabilityGroupServer], DagTaskProblemChangingQuo
   rumException
    + FullyQualifiedErrorId : 80D96894,Microsoft.Exchange.Management.SystemConfigurationTasks.RemoveDatabaseAvailabili
   tyGroupServer

Um die Node dennoch zu entfernen einfach den -configurationonly Parameter verwenden:

[PS] C:\>Remove-DatabaseAvailabilityGroupServer -Identity DAG -MailboxServer EX2 -ConfigurationOnly

Danach die nicht mehr erreichbare Node aus dem Cluster entfernen (zuvor das Failover Cluster Modul in der PowerShell laden):

[PS] C:\>Import-Module FailoverClusters
[PS] C:\>Get-ClusterNode EX2 | Remove-ClusterNode -Force

Dritter Schritt: Den Server neu installieren

Nun den ausgefallenen Server (oder eine neue Hardware/VM) neu installieren.

Die folgenden Einstellungen vornehmen:

  • Zeitzone einstellen
  • Automatische Updates konfigurieren
  • Die selben TCP/IP Einstellungen wie beim alten Server konfigurieren
  • Den selben Namen wie beim alten Server konfigurieren (WICHTIG!!)
  • Den Server zur Domain hinzufügen.

Aufpassen die Prerequesites für Exchange 2010 zu erfüllen: http://technet.microsoft.com/en-US/library/bb691354(v=exchg.141)

Zur Installation von Exchange 2010 nun in einem Eingabefenster zum Verzeichnis wechseln welches die Exchange Installationsdateien beinhaltet und folgendes Kommando ausführen:

setup /m:recoverserver

Letzter Schritt: Den neuen Server zur DAG hinzufügen

Mit folgendem Befehl den Server wieder zur DAG hinzufügen:

[PS] C:\>Add-DatabaseAvailabilityGroupServer -Identity DAG -MailboxServer EX2

Und abschließend noch die Replikation für die einzelnen Datenbanken unter Rücksichtnahme auf die zuvor notierten Parameter (Activation Preference und Replay lag time) wieder einrichten (Achtung: Das kann abhängig von DB Größe und Bandbreite sehr lange dauern, da das Reseeden sofort startet.):

[PS] C:\>Add-MailboxDatabaseCopy -Identity "MBDB10-1" -MailboxServer EX2
[PS] C:\>Add-MailboxDatabaseCopy -Identity "MBDB10-2" -MailboxServer EX2 -ActivationPreference 1

Danach hat alles wieder die selben Einstellungen wie vorher:

[PS] C:\>Get-MailboxDatabase | fl name, servers, activ*, *lag*

Name                 : MBDB10-1
Servers              : {EX2, EX1}
ActivationPreference : {[EX2, 1], [EX1, 2]}
ReplayLagTimes       : {[EX2, 00:00:00], [EX1, 00:00:00]}
TruncationLagTimes   : {[EX2, 00:00:00], [EX1, 00:00:00]}

Name                 : MBDB10-2
Servers              : {EX1, EX2}
ActivationPreference : {[EX1, 1], [EX2, 2]}
ReplayLagTimes       : {[EX1, 00:00:00], [EX2, 00:00:00]}
TruncationLagTimes   : {[EX1, 00:00:00], [EX2, 00:00:00]}

Ich wünsche zwar niemandem in diese Situation zu kommen, dennoch aber gutes Gelingen sollte es doch mal so weit sein!