Konfiguration SQL Server 2017 AlwaysOn Availability Groups für XenDesktop 7.x

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.:

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.

  1. Das Failoverclustering-Feature auf allen zukünftigen Cluster-Knoten validieren/ installieren.
  2. 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.
  3. File Share Witness für den Cluster konfigurieren.
  4. SQL Datenbank Server auf allen Cluster-Knoten installieren
  5. Eigenschaften des SQL Server Services anpassen. AlwaysOn Availability Groups aktivieren
  6. AlwaysOn Availability Groups erstellen
  7. Citrix XenDesktop installieren
  8. Site Creation Wizard auf dem Delivery Controller durchführen und die DBs erstellen
  9. Auf dem SQL-Server sollen die erstellten Citrix Datenbanken gesichert werden.
  10. Die Datenbanken werden zu der AG hinzugefügt.
  11. Der Machine Account des Delivery Controllers soll auf allen SQL-Knoten erstellt werden.
  12. Auf dem DDC wird die Kommunikation zwischen dem DDC und den Datenbanken getrennt
  13. 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.

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.

  1. 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
  1. Die erstellten Datenbanken werden auf dem SQL-Server gesichert.
  2. Die Datenbanken werden zu der AG hinzugefügt.
  3. Site Creation Wizard auf dem Delivery Controller durchführen und die bestehende DBs anbinden
  4. 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.

  1. 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.
  2. Die erstellten Skripte werden auf dem SQL-Server von DB-Admin ausgeführt, um die DBs zu erstellen.
  3. Die erstellten Datenbanken werden auf dem SQL-Server gesichert.
  4. Die Datenbanken werden zu der AG hinzugefügt.
  5. Site Creation Wizard auf dem Delivery Controller durchführen und die bestehende DBs anbinden.
  6. 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.

AlwaysOn Citrix

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 Services

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:

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

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.

101 Cluster Validate

1.2. Klicken Sie auf Browse und fügen Sie nacheinander die FQDN der für die Einrichtung vorgesehenen Server hinzu.

103 Cluster Validate

1.3.Wählen Sie die passende Option aus:

104 Cluster Validate

1.4. Next

105 Cluster Validate

1.5. Wenn Sie die grün markierte Option auswählen, wird die Erstellung des Clusters fortgesetzt. 

106 Cluster Validate

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.

201 Create Cluster

1.7 Geben Sie den Clustername (z.B. SQLCLUSTER), sowie für diesen Zweck vorgesehene IP-Adresse ein.

202 Create Cluster

1.8. Klicken Sie Weiter, wenn die eingegebenen Informationen korrekt sind. 

203 Create Cluster

1.9 Die Konfiguration ist erfolgreich abgeschlossen.

205 Create Cluster

 

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.

300 FileShare Wintness Freigabe

3 FileShare Witness - Konfiguration

3.1. Starten Sie den Cluster Quorum Wizard.

301 FileShare Wintness Cluster

3.2. Wählen Sie die markierte Option „Select the Quorum witness“

302 FileShare Wintness Cluster

3.3. „Configure a file share witness” auswählen und Weiter

303 FileShare Wintness Cluster

3.4. Geben Sie URL des freigegeben Ordner ein (File Share Path):

305 FileShare Wintness Cluster

3.5 Weiter

306 FileShare Wintness Cluster

3.6. Die Konfiguration ist erfolgreich abgeschlossen.

309 FileShare Wintness Cluster

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

SQL Services

> rechte Maustaste > Eigenschaften > Registerkarte AlwaysOn High Availability auswählen > Enable AlwaysOn Avalibility Groups

401 SQL Server Properties

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.

02 Test DB

6.1. Starten Sie den Availability Group Wizard

601 Availability Group Setup

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

603 Availability Group Setup

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.

604 Availability Group Setup

6.4. Klicken auf „Add Replica“, um weiteren Cluster-Knoten auszuwählen.

605 Availability Group Setup

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.

606 Availability Group Setup

6.6. Die Option „Automatic seeding“ scheint für mich optimal zu sein, um die Datenbank auf allen Knoten zu platzieren.

607 Availability Group Setup

6.7. Wenn die Validierung fehlerfrei verlaufen ist, klicken Sie Weiter

608 Availability Group Setup

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

609 Availability Group Setup

610 Availability Group Setup

6.9. Die Konfiguration ist erfolgreich abgeschlossen.

611 Availability Group Setup

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.

613 Availability Group Setup

6.12. Wählen Sie den Ordner „Availability Group Listener“ aus, klicken Sie mit der rechten Maustaste, und wählen Sie „Add Listener“.

612 Availability Group Setup

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

614 Availability Group Setup

6.14 Geben Sie die IP-Adresse ein

615 Availability Group Setup

6.15. Bestätigen Sie die Konfiguration mit OK

616 Availability Group Setup

6.16. Die Availability Group ist erfolgreich eingerichtet.

617 Availability Group Setup

Ein Computerkonto wurde erfolgreich automatisch erstellt.

619 Availability Group Setup

Ein einfacher Ping-Test schadet nie…

618 Availability Group Setup

 

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“

01 Citrix Initial Config

8.2. Auf der Registerkarte Introduction wählen Sie die die Option „An empty, unconfigured Site“ und klicken Sie Weiter

02 Citrix Initial Config

8.3 Auf der Registerkarte Databases tragen Sie die Namen der Datenbanken und der Host-Name des primären SQL Servers ein.

 Option1 01 Citrix Initial Config

8.4. In weiteren Schritten werden Sie nach einem verfügbaren Lizenz-Server gefragt.

04 Citrix Initial Config

8.5. Auf der Registerkarte Summary werden die eingegeben Konfigurationsdaten angezeigt.  Der Wizard erkennt auch, dass keine hochverfügbaren Datenbanken konfiguriert sind.

05 Citrix Initial Config

Nach Abschluss der Konfiguration sieht die Datenbank-Anbindung wie folgt aus:

Option1 02 Citrix Initial Config

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:

Option1 03 Citrix Initial Config

10.1. Wählen Sie den Ordner „Availability Databases“ aus, rechte Maustaste „Add Database“

700 add DB to AG

10.2. Der Wizard führt Sie schrittweise durch den Konfigurationsvorgang.

701 add DB to AG

10.3 Wählen Sie die Citrix Datenbanken aus.

702 add DB to AG

10.4 Verbinden Sie zwei weitere Cluster-Knoten. Schneller geht es mit der Option „Connect All“

703 add DB to AG

704 add DB to AG

10.5. In meinem Fall wähle ich die Option „Automatic seeding“ aus.

705 add DB to AG

10.6. Die Validierung ist fehlerfrei verlaufen, Weiter…

706 add DB to AG

10.7. Schließen Sie den Wizard

708 add DB to AG

10.8. Die Citrix DBs wurden erfolgreich hinzugefügt.

709 add DB to AG

11. Erstellen Sie den DB-Login (Computerkonto des DDCs) auf zwei weiteren Cluster-Knoten und passen Sie die Berechtigung analog zu den ersten an.

 Option1 04 Citrix Initial Config

 

12. Die abschließende Konfiguration wird auf dem Delivery Controller durchgeführt

  1. Auf dem DDC wird die Kommunikation zwischen dem DDC und den Datenbanken getrennt
  2. 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.

Option1 05 Citrix Initial Config

 

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

 Option2 02 Citrix Initial Config

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.

Option2 03 Citrix Initial Config

Nach Abschluss der Konfiguration sieht die Datenbank-Anbindung wie folgt aus:

Option2 04 Citrix Initial Config

Wir verifizieren die DB-Konfiguration mit dem Befehl: Get-BrokerDBConnection.
Wie man sieht wurde die Option MultiSubnetFailover=true nicht dem String beigefügt.

Option2 05 Citrix Initial Config

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:

  1. Auf dem Delivery Controller werden die Konfigurationsskripten erstellt.
  2. Die Citrix Datenbanken werden per Skript angelegt.
  3. Alle weiteren Schritte stimmen mit der Option 2 überein.