In diesem Blogbeitrag finden Sie eine kurze Anleitung, wie Sie AlwaysOn Availability Groups einrichten und für die Citrix XenDesktop Infrastruktur bereitstellen.
AlwaysOn Availability Groups vs. Basic Availability Groups
Im Gegensatz zu der Basisversion, hat AlwaysOn Availability Groups keine Limitierungen wie z.B.:
- nur zwei Replicas (Primary und Secondary)
- nur eine Datenbank pro Basic Availability Groups
- kein Lesezugriff auf die zweite Replica.
- kein Backup der Secondary Replica möglich
- ein Integritätscheck der Secondary Replica nicht möglich
- Upgrade auf AlwaysOn Availability Groups ist nicht möglich
AlwaysOn Availability Groups sind nur in der Enterprise Edition nutzbar.
Konfigurierungsmethoden
Es existieren drei möglichen Optionen die Citrix-Datenbanken hochverfügbar bereitzustellen:
Option 1. Die Datenbanken werden durch den Citrix-Konfigurationswizard erstellt und danach zu einer AlwaysOn Availability Groups hinzugefügt. Voraussetzung: die Person, die den Wizard ausführen soll, verfügt über die erforderliche Berechtigung (sysadmin) auf dem DB-Server.
Konfigurationsschritte der Option 1
Die Konfiguration lässt sich in folgende Schritte unterteilen, wobei die Schritte von 1 bis 7 Option-unabhängig sind.
- Das Failoverclustering-Feature auf allen zukünftigen Cluster-Knoten validieren/ installieren.
- Einen freigegebenen Ordner (File Share Witness) anlegen und korrekt berechtigen.
Dieser Punkt ist in meiner Demo-Umgebung (bestehend aus drei Cluster-Knoten an einer Location) eher optional, da ein File Share Witness normalerweise für die Cluster vorgesehen ist, die eine gerade Anzahl der Cluster-Knoten beinhalten. Es wird empfohlen, dass die Anzahl der Cluster Knoten ungerade bleibt. Ein File Share Witness bekommt eine eigene Stimme und sorgt für, dass im Falle eines Ausfalls die Mehrheit gewinnt.
In einer realen Welt ist der Einsatz des File Share Witnesses von einigen Faktoren abhängig, wie z.B. Netzwerk Topologie, Windows Version und derer Cluster-Funktionalität (Site Awareness in 2016, LowerQuorumPriorityNodeID in 2012 R2), gesetzte Ziele HA und/oder DR, auch die SQL Lizensierung spielt eine Rolle. - File Share Witness für den Cluster konfigurieren.
- SQL Datenbank Server auf allen Cluster-Knoten installieren
- Eigenschaften des SQL Server Services anpassen. AlwaysOn Availability Groups aktivieren
- AlwaysOn Availability Groups erstellen
- Citrix XenDesktop installieren
- Site Creation Wizard auf dem Delivery Controller durchführen und die DBs erstellen
- Auf dem SQL-Server sollen die erstellten Citrix Datenbanken gesichert werden.
- Die Datenbanken werden zu der AG hinzugefügt.
- Der Machine Account des Delivery Controllers soll auf allen SQL-Knoten erstellt werden.
- Auf dem DDC wird die Kommunikation zwischen dem DDC und den Datenbanken getrennt
- Die Datenbanken werden erneut mit korrekten Parametern (MultiSubnetFailover=True) angebunden.
MultiSubnetFailover=true
Der Parameter (MultiSubnetFailover=true) laut Microsoft ab NET Framework 4.6.1 nicht mehr erforderlich. Trotzdem schreibt Citrix in der Dokumentation die Anpassung des Connection-Strings vor. Dieser Parameter soll ein schnelleres Failover für AlwaysOn Availability Groups mit einzelnen und mehreren Subnetzen ermöglichen. Ein interessanter Artikel zum Thema Leveraging Multi-Subnet failover.
- Microsoft: Festlegen von MultiSubnetFailover zu true ist nicht erforderlich, mit .NET Framework 4.6.1 oder höhere Versionen.
- z.B. Windows Server 2016 1607 (Bild 14393.2906) beinhaltet bereits die .NET Framework Version 4.6.2)
- CTX216504 - How to Configure XenApp and XenDesktop 7.x for AlwaysOn configuration
- CTX214738 - Database connection fails for AlwaysOn SQL Cluster using MultiSubnetFailover
- Citrix Blog - Updating Database Connection Strings in XenDesktop 7.x
Wie Sie die installierte .NET Framework-Version ermitteln können, ist in diesem Artikel "How to determine which versions are installed" vollständig beschrieben.
Option 2. Die Datenbanken werden manuell auf dem SQL-Server erstellt und zu einer AlwaysOn Availability Groups hinzugefügt. An der entsprechenden Stelle des Citrix-Configurationswizards werden die Datenbanken eingetragen.
Konfigurationsschritte der Option 2
Die Konfiguration lässt sich in folgende Schritte unterteilen, wobei die Schritte von 1 bis 6 Option-unabhängig sind.
- Erstellen der drei Citrix Datenbanken unter Beachtung der folgenden Voraussetzungen:
- Collation: Latin1_General_100_CI_AS_KS
- Recovery Model: Full
- Is Read Committed Snapshot On: True
- Die erstellten Datenbanken werden auf dem SQL-Server gesichert.
- Die Datenbanken werden zu der AG hinzugefügt.
- Site Creation Wizard auf dem Delivery Controller durchführen und die bestehende DBs anbinden
- Die Entscheidung zum Thema MultiSubnetFailover überlasse ich Ihnen, da diese von lokalen Gegebenheiten abhängig ist.
Option 3. Die dritte Option ist mehr oder weniger den Best-Practices eines großen Unternehmen entsprechend. Durch den Citrix-Configurationswizard werden die DB-Konfigurationsskripte erstellt und auf dem SQL-Server ausgeführt. Eine vollständige Anleitung finden Sie hier.
Konfigurationsschritte der Option 3
Die Konfiguration lässt sich in folgende Schritte unterteilen, wobei die Schritte von 1 bis 6 Option-unabhängig sind.
- Starten Sie den Konfigurationswizard und wählen Sie die Option “Generieren Sie Skripts, um die Datenbanken auf dem Datenbankserver manuell einzurichten“. Schließen Sie den Wizard nicht, die Konfiguration wird fortgesetzt.
- Die erstellten Skripte werden auf dem SQL-Server von DB-Admin ausgeführt, um die DBs zu erstellen.
- Die erstellten Datenbanken werden auf dem SQL-Server gesichert.
- Die Datenbanken werden zu der AG hinzugefügt.
- Site Creation Wizard auf dem Delivery Controller durchführen und die bestehende DBs anbinden.
- Die Entscheidung zum Thema MultiSubnetFailover überlasse ich Ihnen, da diese von lokalen Gegebenheiten abhängig ist.
Demo-Umgebung
Die oberen Optionen sind in diesem Blogbeitrag dokumentiert.
Eingesetzte Betriebssysteme:
Windows Server 2019 Englisch (1809 17763.437)
SQL-Server 2017 Englisch (Version
SQL Server Management Studio (SSMS) 17.9.1
Meine Demo-Umgebung besteht aus folgenden Komponenten:
Funktion | Name | IP-Adresse |
Cluster Node 01 (Primary) | SQL-2017-C01 | 192.168.2.101 |
Cluster Node 02 (Secondary) | SQL-2017-C02 | 192.168.2.102 |
Cluster Node 03 (Secondary) | SQL-2017-C03 | 192.168.2.103 |
Cluster Name | SQLCLUSTER | 192.168.2.104 |
AG Listener | AGLISTENER | 192.168.2.105 |
File Share Witness | \\dc2016\SQLCluster_FSW | |
XenDesktop | CTX-CVAD-01 | 192.168.2.106 |
Die SQL-Infrastruktur beinhaltet drei Cluster-Knoten und einen Shared Folder (File Share Witness)
Service Accounts
Service_SQL - Database Engine Service Account - diesen Account wird bei der initialen Datenbank-Konfiguration mit folgenden Diensten verknüpft:
- SQL Server Agent
- SQL Server Database Engine
In der Demo-Umgebung wird dieser Service Account zu der Gruppe Local Admins hinzufügt. In einer produktiven Umgebung wäre es zu empfehlen, das Prinzip von "Least Privilege" zu folgen und dem Service-Benutzer folgende Rechte zuzuweisen, bzw. zu den Gruppen hinzufügen:
- Computer Configuration > Windows Settings > Security Settings > Local Policies > User Right Assigment > Lock pages in memory
- Configuration > Windows Settings > Security Settings > Local Policies > User Right Assigment > Perform Volume maintenance tasks
Service_CTX - dieser Service User wird ausschließlich bei der Einrichtung der Datenbank verwendet. Folgende Berechtigung auf DB-Ebene ist notwendig: securityadmin, db_owner. Die weitere Kommunikation zwischen dem Delivery Controller und den DBs findet auf Basis des Computeraccount (Domain\Computername$) statt. Dieser Benutzer wird für die Installation / Konfiguration der Citrix Komponenten verwendet und ist Mitglieder der Local Admins.
Weitere Information zum Thema finden Sie hier: Database Access and Permission Model for XenDesktop
Firewall
- TCP 1433 (wenn nur eine Instanz existiert) & 5022 - eingehende Kommunikation zu den SQL-Cluster-Knoten erlauben
- Dynamic Ports – falls notwendig, die eingehende Kommunikation auf Basis der sqlservr.exe ermöglichen
Mehr zum Thema: Configure the Windows Firewall to Allow SQL Server Access
Cluster Feature Installation
Installieren Sie Failover Clustering Feature auf jedem SQL-Server: Add Roles and Features > Features > Failover Clustering
Am schnellsten geht es per PowerShell: Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools
1 Cluster Validierung
1.1. Führen Sie zuerst eine Cluster Validierung durch.
1.2. Klicken Sie auf Browse und fügen Sie nacheinander die FQDN der für die Einrichtung vorgesehenen Server hinzu.
1.3.Wählen Sie die passende Option aus:
1.4. Next
1.5. Wenn Sie die grün markierte Option auswählen, wird die Erstellung des Clusters fortgesetzt.
1.6. Cluster Konfiguration
Die weiteren Schritte führe ich in diesem Fall als Domain-Admin aus, andersfall ist das Recht zu Erstellung der Computernamen und DNS-Einträgen erforderlich.
Fügen Sie nacheinander die FQDN der validierten Cluster-Knoten hinzu.
1.7 Geben Sie den Clustername (z.B. SQLCLUSTER), sowie für diesen Zweck vorgesehene IP-Adresse ein.
1.8. Klicken Sie Weiter, wenn die eingegebenen Informationen korrekt sind.
1.9 Die Konfiguration ist erfolgreich abgeschlossen.
2 FileShare Witness - Konfiguration
In meiner Demo-Umgebung werde ich die FileShare-Freigabe auf einem Domain Controller einrichten. In einer produktiven Infrastruktur ist von solcher Platzierung abzuraten. Zu empfehlen wäre eine Freigabe auf einem hochverfügbaren FileServer einzurichten, an dem Standort wo sich die maximale Anzahl der Cluster Knoten befindet.
2.1. Richten Sie zuerst einen freigegebenen Ordner ein und weisen Sie dem Computerkonto des Clusters (SQLCLUSTER$) die Rechte (Full Control) zu.
3 FileShare Witness - Konfiguration
3.1. Starten Sie den Cluster Quorum Wizard.
3.2. Wählen Sie die markierte Option „Select the Quorum witness“
3.3. „Configure a file share witness” auswählen und Weiter
3.4. Geben Sie URL des freigegeben Ordner ein (File Share Path):
3.5 Weiter
3.6. Die Konfiguration ist erfolgreich abgeschlossen.
4 SQL Datenbank installieren
Eine Schritt-für-Schritt Einleitung finden Sie unter folgenden Link
5 SQL Server Services Eigenschaften anpassen
Nach der Installation der SQL-Server Komponenten passen Sie die Eigenschaften des SQL Server Services auf allen Cluster-Knoten an.
Starten Sie den SQL Server Configuration Manager > SQL Server Services > SQL Server
> rechte Maustaste > Eigenschaften > Registerkarte AlwaysOn High Availability auswählen > Enable AlwaysOn Avalibility Groups
6 AlwaysOn Availability Groups erstellen
Bevor wir mit der Erstellung der AlwaysOn Availibility Group starten, soll der Computeraccount des Cluster-Objekts die notwendigen Rechte (Create Computer Objekts) in der OU (wo er sich selbst befindet) bekommen. Auch ein DNS-Eintrag wird für den AG Listener benötigt. Eine manuelle Erstellung eines Host-Eintrages gestaltet sich einfacher, als den Service User eine Berechtigung aus dem DNS-Server zu erteilen.
Für die Erstellung einer Availability Groups wird eine Datenbank benötigt, zu diesem Zweck empfiehlt es sich eine Test-Datenbank zu erstellen. Nachdem die Datenbank erstellt wurde, führen Sie eine DB-Sicherung durch.
6.1. Starten Sie den Availability Group Wizard
6.2. Geben Sie den Group Name ein und wählen Sie den korrekten Cluster Typ „Windows Server Failover Cluster“ aus. Optional können Sie auch die „Database Level Health Detection“ auswählen. Weitere Information finden Sie hier: Failoveroption für die Integritätserkennung auf Datenbankebene
6.4. Auf der Registerkarte Select Databases wählen Sie eine Datenbank, die für die Erstellung der Availability Group verwendet wird. Status „Meets prerequisites“ zeigt, dass eine DB-Sicherung erstellt ist.
6.4. Klicken auf „Add Replica“, um weiteren Cluster-Knoten auszuwählen.
6.5. Aktivieren Sie die Option „Automatic Failover“.
An dieser Stelle werde ich keine weiteren Optionen, wie z.B. Listener konfigurieren. Der Listener wird in einem separaten Schritt konfiguriert.
6.6. Die Option „Automatic seeding“ scheint für mich optimal zu sein, um die Datenbank auf allen Knoten zu platzieren.
6.7. Wenn die Validierung fehlerfrei verlaufen ist, klicken Sie Weiter
6.8. An dieser Stelle empfiehlt es sich das Konfigurationsskript zu speichern, um die Availability Groups nächstes Mal schneller einrichten zu können. Klicken Sie auf Finish
6.9. Die Konfiguration ist erfolgreich abgeschlossen.
Availability Group Listener
6.10. Bevor Sie mit der Konfiguration starten, berechtigen Sie den SQL-Cluster Maschinenaccount wie folgt. Dies ermöglicht dem Wizard eine automatische Erstellung des Computeraccount für den Listener.
Bild hinzufügen!!!
6.11. Für den Listener wird ebenfalls ein DNS-Eintrag benötigt, diesen würde ich manuell erstellen.
6.12. Wählen Sie den Ordner „Availability Group Listener“ aus, klicken Sie mit der rechten Maustaste, und wählen Sie „Add Listener“.
6.13. Geben Sie den DNS-Name des Listeners ein und wählen Sie die Option Static IP im Bereich Network Mode. Klicken Sie weiter auf Add-Button
6.14 Geben Sie die IP-Adresse ein
6.15. Bestätigen Sie die Konfiguration mit OK
6.16. Die Availability Group ist erfolgreich eingerichtet.
Ein Computerkonto wurde erfolgreich automatisch erstellt.
Ein einfacher Ping-Test schadet nie…
Option 1 - Konfigurationsschritte
Des Weiteren konfigurieren wir die Citrix Datenbanken auf dem ersten Delivery Controller.
Der Benutzer, der für die Durchführung der Site-Konfiguration geplant ist, sollte minimal über folgenden DB-Rollen auf dem primären SQL Server verfügen: dbcreator, securityadmin. Eine Zuweisung der sysadmin-Rolle wird aber von Citrix empfohlen.
7. Installieren die Citrix Delivery Controller – Komponenten
8.1. Starten Citrix Studio und wählen Sie die Option „Deliver applications and desktops to your users“
8.2. Auf der Registerkarte Introduction wählen Sie die die Option „An empty, unconfigured Site“ und klicken Sie Weiter
8.3 Auf der Registerkarte Databases tragen Sie die Namen der Datenbanken und der Host-Name des primären SQL Servers ein.
8.4. In weiteren Schritten werden Sie nach einem verfügbaren Lizenz-Server gefragt.
8.5. Auf der Registerkarte Summary werden die eingegeben Konfigurationsdaten angezeigt. Der Wizard erkennt auch, dass keine hochverfügbaren Datenbanken konfiguriert sind.
Nach Abschluss der Konfiguration sieht die Datenbank-Anbindung wie folgt aus:
9. Bevor man die Citrix-Datenbanken zu der Availability Group hinzufügt, sollte diese gesichert werden.
10. In weiteren Schritten fügen wir die Citrix Datenbanken der Availability Group hinzu:
10.1. Wählen Sie den Ordner „Availability Databases“ aus, rechte Maustaste „Add Database“
10.2. Der Wizard führt Sie schrittweise durch den Konfigurationsvorgang.
10.3 Wählen Sie die Citrix Datenbanken aus.
10.4 Verbinden Sie zwei weitere Cluster-Knoten. Schneller geht es mit der Option „Connect All“
10.5. In meinem Fall wähle ich die Option „Automatic seeding“ aus.
10.6. Die Validierung ist fehlerfrei verlaufen, Weiter…
10.7. Schließen Sie den Wizard
10.8. Die Citrix DBs wurden erfolgreich hinzugefügt.
11. Erstellen Sie den DB-Login (Computerkonto des DDCs) auf zwei weiteren Cluster-Knoten und passen Sie die Berechtigung analog zu den ersten an.
12. Die abschließende Konfiguration wird auf dem Delivery Controller durchgeführt
- Auf dem DDC wird die Kommunikation zwischen dem DDC und den Datenbanken getrennt
- Die Datenbanken werden erneut mit korrekten Parametern (MultiSubnetFailover=True) angebunden.
1. Starten Sie die PowerShell ISE Konsole als Administrator und führen Sie nacheinander die folgenden Befehle aus (asnp citrix* nicht vergessen ;-)):
## Kommunikation zwischen DDCs und der Datenbank trennen:
Set-ConfigDBConnection -DBConnection $null
Set-AcctDBConnection -DBConnection $null
Set-AnalyticsDBConnection -DBConnection $null # 7.6 and newer
Set-AppLibDBConnection -DBConnection $null # 7.8 and newer
Set-OrchDBConnection -DBConnection $null # 7.11 and newer
Set-TrustDBConnection -DBConnection $null # 7.11 and newer
Set-HypDBConnection -DBConnection $null
Set-ProvDBConnection -DBConnection $null
Set-BrokerDBConnection -DBConnection $null
Set-EnvTestDBConnection -DBConnection $null
Set-SfDBConnection -DBConnection $null
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null
Set-MonitorDBConnection -DBConnection $null
Set-LogDBConnection -DataStore Logging -DBConnection $null
Set-LogDBConnection -DBConnection $null
Set-AdminDBConnection -DBConnection $null -force
2. Passen Sie das folgende Skript an und führen Sie es aus:
##
## Ersetzen Sie durch den neuen SQL-Server und die Instanz, falls vorhanden
## Ersetzen Sie durch den Namen Ihrer wiederhergestellten Datenbank
## Beispiel:
### $ServerName=”AG_Listener_DNSName.domain.com”
### $DBName =”CitrixSitekonfigurationDatenbank”
### $LogDBName = “CitrixProtokollierungDatanbank”
### $MonitorDBName = “CitrixMonitoringDatanbank”
##
$ServerName=”AGLISTENER.demo.lab”
$DBName =”CTX-DEMO-01Site”
$LogDBName = “CTX-DEMO-01Log”
$MonitorDBName = “CTX-DEMO-01Mon”
$cs=”Server=$ServerName;Initial Catalog=$DBName;Integrated Security=True;MultiSubnetFailover=True”
$csLogging= “Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True;MultiSubnetFailover=True”
$csMonitoring = “Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True;MultiSubnetFailover=True”
Set-AdminDBConnection -DBConnection $cs
Set-ConfigDBConnection -DBConnection $cs
Set-AcctDBConnection -DBConnection $cs
Set-AnalyticsDBConnection -DBConnection $cs
Set-HypDBConnection -DBConnection $cs
Set-ProvDBConnection -DBConnection $cs
#Set-PvsVmDBConnection -DBConnection $cs
Set-BrokerDBConnection -DBConnection $cs
Set-EnvTestDBConnection -DBConnection $cs
Set-LogDBConnection -DBConnection $cs
Set-LogDBConnection -DataStore Logging -DBConnection $null
Set-LogDBConnection -DBConnection $null
Set-LogDBConnection -DBConnection $cs
Set-LogDBConnection -DataStore Logging -DBConnection $csLogging
Set-MonitorDBConnection -DBConnection $cs
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null
Set-MonitorDBConnection -DBConnection $null
Set-MonitorDBConnection -DBConnection $cs
Set-MonitorDBConnection -DataStore Monitor -DBConnection $csMonitoring
Set-AppLibDBConnection –DBConnection $cs # 7.8 and newer
Set-SfDBConnection -DBConnection $cs
Damit ist die Konfiguration abgeschlossen.
Option 2 - Konfigurationsschritte
In diesem Fall werden drei Citrix Datenbanken manuell auf dem primeren SQL-Server erstellt und zur AG hinzugefügt. Bei der initialen Citrix Konfiguration werden diese Datenbank eingetragen.
Der Benutzer, der die Site-Konfiguration durchführen soll, wird wie folgt berechtigt:
• Delivery Controller: lokale Admin
• SQL-Server: securityadmin, db_owner
8.1. Starten Sie das Citrix Studio und wählen Sie die Option „Deliver applications and desktops to your users“
8.2. Auf der Registerkarte Introduktion wählen Sie die die Option „An empty, unconfigured Site“ und klicken Sie Weiter
8.3. Auf der Registerkarte Databases tragen Sie die Namen der Datenbanken und der Host- Name des primären SQL Servers ein.
Lassen Sie sich von der Option „Create and set up databases from Studio“ nicht irritieren.
Location: DNS-Name oder FQDN des Listeners eintragen
8.4. In weiteren Schritten werden Sie nach einem verfügbaren Lizenz-Server gefragt.
8.5. Auf der Registerkarte Summary werden die eingegeben Konfigurationsdaten angezeigt. Im diesem Fall erkennt der Wizard eine hochverfügbare Datenbank-Infrastruktur.
Nach Abschluss der Konfiguration sieht die Datenbank-Anbindung wie folgt aus:
Wir verifizieren die DB-Konfiguration mit dem Befehl: Get-BrokerDBConnection.
Wie man sieht wurde die Option MultiSubnetFailover=true nicht dem String beigefügt.
11. Erstellen Sie den DB-Login (Computerkonto des DDCs) auf weiteren Cluster-Knoten und passen Sie die Berechtigung analog zu den ersten an.
Option 3 - Konfigurationsschritte
Die Erstellung der Datenbank per Skript ist hier beschrieben: Citrix Datenbanken mit Hilfe von SQL-Skripten erstellen
Im groben lässt sich die Einrichtung wie folgt gliedern:
- Auf dem Delivery Controller werden die Konfigurationsskripten erstellt.
- Die Citrix Datenbanken werden per Skript angelegt.
- Alle weiteren Schritte stimmen mit der Option 2 überein.