Blog
Tuesday, 04. April 2023

Konfiguration einer domain-independent AlwaysOn Availability Group

Henrik
Werkstudent

Mit diesem Artikel wollen wir Ihnen einen Step-by-Step Guide bieten, mit dem Sie eine Availabilty Group (AG) erstellen können. Die Besonderheit hierbei ist, dass sich die eingefügten Instanzen nicht in einer Domäne befinden müssen.

Einige Worte vorweg

Die Möglichkeit, eine Domänen-unabhängige AG zu erstellen, ist erst seit der MS SQL Server 16 Version möglich. Aus diesem Grund ist eine Voraussetzung, dass sich auf den Instanzen diese Version, oder eine spätere befindet. Wie auch bei einer “normalen” AG gilt aber auch hier, dass jede Replika dieselbe Version besitzen muss.

Das folgende Vorgehen wird sein, alle Instanzen vorzubereiten, damit man aus ihnen erst ein Failover Cluster erstellen kann. Wenn dieser Punkt erreicht ist, fehlt nicht mehr viel, um eine domain-independent AG zu erzeugen.

Wir haben die Availability Groups Cluster in drei Varianten unterteilt:

  • Single-Domain Cluster: Das ist eine “normale” AlwaysOn AG. Alle Instanzen befinden sich in derselben Domain. Wie man diese erstellen kann, können Sie in einem anderen Artikel zu AlwaysOn Availability Group von uns nachlesen. Jedoch wollen wir in diesem Artikel nicht weiter darauf eingehen.

  • Workgroup Cluster: Hier befinden sich alle Instanzen, die im Cluster zusammen geschlossen werden sollen in einer Workgroup. Dabei ist die Benennung der Group irrelevant. Wer sicher gehen möchte, kann jede Instanz einer Workgroup desselben Namens zugeteilt werden.

  • Multi-Domain Cluster: In dieser Konfiguration können sich manche Instanzen in einer Domain befinden. Die Anzahl der Instanzen ist egal und auch ob es sich um eine oder mehr Domains handelt. Auch Instanzen aus einer Workgroup können verwendet werden. Worauf man hier achten muss, wird später gezeigt.

Vorbereitung

Bevor wir eine AG erstellen, müssen einige Vorbereitungen getroffen werden. Zunächst sollte sichergestellt sein, wie oben bereits erwähnt, dass auf jeder Instanz dieselbe SQL Server Version installiert ist. Da nicht alle Instanzen in einer Domain sind, kann nicht jeder User auf die Server zugreifen. Darum sollte direkt bei der Installation von MS SQL eingestellt werden, dass ein lokaler User die Rolle des Admin erhält. Hier hat man die Wahl entweder das automatisch erstellte Dienstkonto zu nehmen, oder Sie erstellen sich einen neuen User, den Sie der Administrator Gruppe hinzufügen. Im besten Fall, ist der Name und das Passwort auf allen Instanzen dasselbe.

An der markierten Stelle im Bild können Sie direkt den zuständigen Account hinterlegen. In unserem Beispiel haben wir den Administrator Account gewählt. Durch die Einstellung an dieser Stelle, müssen diese später nicht im Nachhinein gemacht werden.

Einstellen des User Accounts
Einstellen des User Accounts

Sobald die SQL Installation getätigt wurde, muss noch das Feature des Failover Clustering auf jedem Server installiert werden. Hierfür benutzen wir den Server-Manager. Unter dem Punkt ‘Manage’ wird die Option ‘Add Roles and Features’ ausgewählt. Folgt man dem sich öffnenden Dialogfeld, muss schlicht ein Häkchen bei ‘Failover Cluster’ gesetzt werden. Wenn diese Installation ebenfalls fertig ist, geht es im nächsten Schritt darum, ein Failover Cluster zu erstellen.

Erstellen des Failover Clusters

Versucht man an dieser Stelle, mit den Nodes untereinander eine Verbindung herzustellen, werden diese wahrscheinlich nicht erreichbar sein. Der erste Schritt zu einer Lösung ist, jeder Node des Clusters ein DNS Suffix zuzuweisen. Hier wird zwischen den oben stehenden Varianten unterschieden.

Fall: Workgroup Cluster

Der einfachste Fall ist, wenn sich alle Nodes in einer Workgroup befinden. Denn hier kann sich ein beliebiger DNS Suffix ausgedacht werden. Dazu öffnet man die Computerbeschreibung im Server-Manager. In dem Dialogfeld, in dem die Domain geändert werden kann, wählt man die Option “mehr”. An dieser Stelle kann der primäre DNS Suffix geändert werden. In unserem Beispiel habe wir ‘test.de’ gewählt. Diese Einstellung muss auf jeder Node vorgenommen werden.

Einstellen eines DNS Suffix
Einstellen eines DNS Suffix

Fall: Multi-Domain Cluster

In diesem Fall, wie oben schon beschrieben, sind manche Instanzen einer Domain zugehörig und andere wiederum nicht. Um die Integrität der Domain Instanzen zu erhalten, werden wir die DNS Suffixe von ihnen nicht ändern. Stattdessen wollen wir dafür sorgen, dass jede Instanz alle Suffixe kennt. Dies passiert in einer DNS SearchList. In dieser Liste können DNS Suffixe angegeben werden. Wenn der PC nur einen Namen erhält, mit dem er sich verbinden soll, geht er diese Liste der Reihe nach durch. Dabei hängt er einen Suffix der Liste hinter den Namen und probiert eine Verbindung herzustellen. Gelingt dies nicht, nimmt er sich den nächsten Eintrag.

Eine Möglichkeit diese Liste zu erstellen, ist über den Registrierungseditor. In diesem wird der Pfad ‘HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\DNSClient’ geöffnet. Falls Teile des Pfades nicht existieren, müssen diese erstellt werden. In dem DNSClient Ordner wird eine neue ‘Zeichenfolge' erstellt. Diese haben wir in unserem Beispiel 'SearchList’ benannt. Diesem Key werden die Suffixe als Werte übergeben, getrennt mit einem Komma.

Anlegen einer DNS SeachList
Anlegen einer DNS SeachList

Wenn die DNS Einstellungen fertig sind, kann ein erster Test zur Erreichbarkeit gemacht werden. Hierzu die Nodes über die Kommandozeile anpingen. Es ist auch möglich, dass jede Node bereits mit allen anderen kommunizieren kann.

Falls dies noch nicht der Fall ist, haben wir auch dafür eine Lösung. Zuerst muss die ‘hosts’ Datei geöffnet werden. Diese liegt standardmäßig bei ‘C:\Windows\System32\drivers\etc\hosts’. Wenn man diese Datei öffnet, sieht der Inhalt folgendermaßen aus. An der markierten Stelle können die IP-Adressen eingetragen werden, die von der aktuellen Node aus nicht zu erreichen sind. Damit sollte dieses Problem gefixt werden.

Speichern der IP-Adressen in der Hosts-Datei
Speichern der IP-Adressen in der Hosts-Datei

Zu diesem Zeitpunkt kann bereits das Failover-Cluster erstellt werden. Wenn Sie den built-in Administrator Account verwenden, wird das auch funktionieren. Jedoch kann es zu einem Fehler kommen, wenn Sie einen neuen Account erstellt haben. Dieser wird keine Rechte haben, auf die Instanzen remote zuzugreifen. Um das zu ändern, muss der ‘LocalAccountTokenFilterPolicy’ auf 1 gesetzt werden. Hierzu die Winows-Powershell öffnen und folgenden Befehl ausführen. Das müssen entsprechend auf jeder Node gemacht werden.

new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1

Erstellen der Availability Group

Der erste Schritt zur Availability Group sollte sein, das AlwaysOn Feature auf allen Instanzen zu aktivieren. Diese Einstellung kann im SQL Server 2022 Configuration Manager vorgenommen werden. Hierfür müssen die Servereigenschaften geöffnet und im Reiter ‘AlwaysOn’ ein Häkchen gesetzt werden. Damit die Änderungen übernommen werden, muss der SQL Server neu starten.

Es sollte darauf geachtet werden, dass die benötigten Ports in der Firewall freigegeben wurden. Standardmäßig ist das 1433 und 5022.

Die nächsten Schritte, werden innerhalb von SSMS ausgeführt.

Schritt 1:

Auf jeder Node muss ein privates Zertifikat erstellt werden. Zuerst wird ein Passwort festgelegt, welches auf jeder Node dasselbe sein sollte. Im Anschluss wird ein Zertifikat erstellt. Im Bereich WITH SUBJECT wird beschrieben, wofür das Zertifikat verwendet werden soll. Wenn das Zertifikat gespeichert wird, ist ein freigegebener Ordner als Speicherort vorteilhaft. So bleibt das Kopieren der Zertifikate auf andere Nodes erspart.

Beispielhaft wird der Code für Node1 gezeigt.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'P@ssw0rd123'
GO

CREATE CERTIFICATE Node1PrivateCert
WITH SUBJECT = 'Certificate for domain-independent AO AG'
GO

BACKUP CERTIFICATE Node1PrivateCert
TO FILE = '\\Node1\Certificates\Node1PrivateCert.cert'
GO

Im Anschluss muss auf jeder Node noch ein Endpoint erstellt werden, über den andere Instanzen auf diese zugreifen können. Zur Kommunikation wird der Port 5022 verwendet. Das erstellte Zertifikat wird zur Authentifizierung benutzt.

Der Code ist wieder beispielhaft für Node1.

CREATE ENDPOINT AGEndpoint
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE Node1PrivateCert,
ROLE = ALL,
ENCRYPTION = REQUIRED ALGORITHM AES)
GO

Schritt 2:

Nun sollte jede Node ein Zertifikat, sowie ein Endpoint besitzen. Im nächsten Schritt wird auf der primären Replika für jede Sekundäre ein Login und User erstellt. Diese Logins und User erhalten Zugriff auf den Endpoint. Das wird erneut mit einem Zertifikat autorisiert.

Der Code ist beispielhaft für eine sekundäre Instanz Node2.

CREATE LOGIN Node2Login WITH PASSWORD = 'P@ssw0rd123'
GO

CREATE USER Node2User FOR LOGIN Node2Login
GO

CREATE CERTIFICATE Node1PublicCert
AUTHORIZATION Node2User
WITH FILE = '\\Node2\Certificates\Node2PrivateCert.cert'
GO

GRANT CONNECT ON ENDPOINT::AGEndpoint TO Node2Login
GO

Schritt 3:

Damit die primäre Instanz auch Zugriff auf ihre Sekundären bekommt, muss Schritt 2 analog auf jeder sekundären Node ausgeführt werden. Jedoch muss hier nur der Zugriff der Primären und nicht jeder sekundären Instanz gewährt werden.

Der Code ist beispielhaft für die primäre Node1 auf der sekundären Node2.

CREATE LOGIN Node1Login WITH PASSWORD = 'P@ssw0rd123'
GO

CREATE USER Node1User FOR LOGIN Node1Login
GO

CREATE CERTIFICATE Node2PublicCert
AUTHORIZATION Node1User
WITH FILE = '\\Node1\Certificates\Node1PrivateCert.cert'
GO

GRANT CONNECT ON ENDPOINT::AGEndpoint TO Node1Login
GO

Schritt 4:

Zu diesem Zeitpunkt kann der ‘New Availability Group Wizard’ ausgeführt werden. Wenn der Name angegeben werden kann, sollte als Cluster Type darunter bereits Failover Cluster ausgewählt sein. Danach müssen Sie eine oder mehrere Datenbanken auswählen, die gespiegelt werden sollen. Falls die Datenbanken nicht zulässig sind, können über einen eigeblendeten Link nähere Informationen eingeholt werden. Im Schritt danach sollte darauf geachtet werden, dass jede Instanz hinzugefügt wird und der synchrone Commitmodus ausgewählt ist. Sobald der Wizard ausgeführt wurde, sollte die Availability Group fertig sein. Wenn das Dashboard zur Group geöffnet wird, sollte im Status ‘SYNCHRONIZED’ stehen, sowie die Rollenverteilung richtig angegeben.

Erstellen eines Listeners

Soll zudem noch ein Listener hinzugefügt werden, kann das entweder bei der Erstellung der Availability Group gemacht werden oder hinterher. Will man es direkt bei der Erstellung machen, gelingt es über das Fenster, in dem die Repliken ausgewählt wurden. Hier gibt es eine Reiter, der 'Listener' heißt. Hier den Namen und den zu Port angeben, der verwendet werden soll. Standardmäßig kann 1433 genommen werden.

Option einen Listener zu erstellen
Option einen Listener zu erstellen

Soll der Listener hinterher hinzugefügt werden, muss man dafür das Verzeichnis der AG öffnen. In dem Verzeichnis werden weitere Optionen des Ordners ‘Availability Group Listener’ geöffnet. Hier gibt es die Option ‘Add Listener’. Wird diese ausgewählt öffnet sich ein Fenster, in dem alle Angaben zum Listener gemacht werden können. Will man testen, ob der Listener auch funktioniert, kann er über die Kommandozeile angepingt werden.

Fazit

Mit diesen Schritten können Sie eine domain-independent Availability Group bauen. Es ist anzumerken, dass dieses Vorgehen für statische IP-Adressen funktioniert. Sollte sich die IP ändern, muss diese Änderung in die ‘hosts’-Datei übertragen werden. Wenn Sie darüber hinaus noch weiterführende Fragen haben, stehen Ihnen unsere Expert:innen gerne zur Verfügung. Vereinbaren Sie ein unverbindliches Beratungsgespräch über unser Kontaktformular.

Interesse geweckt?

Unsere Expert:innen stehen Ihnen bei allen Fragen rund um Ihre IT Infrastruktur zur Seite.

Kontaktieren Sie uns gerne über das Kontaktformular und vereinbaren ein unverbindliches Beratungsgespräch mit unseren Berater:innen zur Bedarfsevaluierung. Gemeinsam optimieren wir Ihre Umgebung und steigern Ihre Performance!
Wir freuen uns auf Ihre Kontaktaufnahme!

Taunusstraße 72
55118 Mainz
info@madafa.de
+49 6131 3331612
Bürozeiten
Montag bis Donnerstag:
9:00 - 17:00 Uhr MEZ

Freitags:
9:30 - 14:00 Uhr MEZ
Wir sind Ihre SQL Expert:innen!
Noch Fragen? - Wir haben immer die passende Antwort für Sie!