Um die AD FS (Active Directory Federation Services) ausfallsicher zu gestalten, ist es möglich, die verwendeten Datenbanken zu spiegeln und die gespiegelte Datenbank als Failover Partner zu konfigurieren. Im folgenden Schaubild soll die Anforderung deutlich gemacht werden.
In den beiden SQL Instanzen befinden sich die Datenbanken für die Konfiguration und die Artefakte der ADFS Farm. Im Normalfall verwendet die Farm die konfigurierte “Data Source” Verbindung. Im Fehlerfall dieser Verbindung oder der Datenbank soll die jeweils gespiegelte Datenbank über die Failover Verbindung verwendet werden. Dazu ist eine Anpassung des jeweiligen “ConnectionStrings” erforderlich. Die Einrichtung wird über folgende Schritte getätigt.
Beginnen wir mit der Konfigurationsdatenbank. Die folgenden Powershell Kommandos sind auf allen FarmServern auszuführen.
$ConfigDB = Get-WmiObject -Namespace root/ADFS -Class Securitytokenservice $ConfigDB_Old = $ConfigDB.ConfigurationDatabaseConnectionString $ConfigDB_New = "Data Source=SQL1;Failover Partner=SQL2;Initial Catalog=AdfsConfigurationV3;Integrated Security=True;Min Pool Size=20" $ConfigDB.ConfigurationDatabaseConnectionString=$ConfigBD_New $ConfigDB.Put()
Zunächst wird das WMI Objekt zur Konfigurationsdatenbank in eine Variable eingelesen ($ConfigBD).
Der ConfigurationDatabaseConnectionString kann zur Sicherheit noch einmal gespeichert werden ($ConfigDB_Old). Sollte beim Eintragen des neuen Strings etwas schief gehen, steht der alte String damit schnell zur Verfügung. Im neuen String wird dann der Failover Partner wie angegeben eingetragen ($ConfigBD_New). Dieser wird in die Variable der DB hinzugefügt und im letzten Schritt mit der Put Methode in das Objekt zurückgeschrieben.
Weiter geht es mit der Artefakt Datenbank. Diese Konfiguration muss nur einmal für die Farm ausgeführt werden, weil das Farm Objekt im AD gespeichert ist und nicht lokal im ADFS Server verwaltet wird.
$ArtifactDB_Old = (Get-AdfsProperties |select *conn*).artifactdbconnection $ArtifactDB_New = "Data Source=SQL1;Failover Partner=SQL1;Initial Catalog=AdfsArtifactStore;Integrated Security=True;Min Pool Size=20" Set-AdfsProperties -ArtifactDbConnection $ArtifactDB_new
Das Vorgehen ist im Prinzip ähnlich. Im ersten Schritt wird der ConnectionString ausgelesen und in einer Variablen zur Sicherheit gespeichert ($ArtifactDB_Old). Der neue String wird in eine Variable gesetzt ($ArtifactDB_New) und zum Schluss in das AD Objekt zurück geschrieben. Ja, das kann auch direkt geschehen, aber ich bin ein Freund von Variablen, die man auch noch weiter verwenden kann.
Als letztes müssen noch die ADFS Dienste auf allen Servern der Farm neu gestartet werden.
(Get-AdfsFarmInformation).farmnodes.fqdn |% {Get-Service -ComputerName $_ adfssrv} |Restart-Service
Damit ist der Failover Fall konfiguriert und verfügbar.
Das alles gilt für Windows Server 2016. Dieses Vorgehen sollte auch für Windows Server 2012 funktionieren, wurde aber von mir nicht getestet.