Citrix ADC

Anwendungsfall 4: Datenbankspezifischer Lastausgleich

Eine Datenbankserverfarm muss nicht nur basierend auf den Status der Server, sondern auch auf der Verfügbarkeit der Datenbank auf jedem Server Lastenausgleich sein. Ein Dienst ist möglicherweise hochgeladen, und ein Lastausgleichsgerät zeigt möglicherweise den Status UP an, aber die angeforderte Datenbank ist für diesen Dienst möglicherweise nicht verfügbar. Die Anforderung wird nicht gesendet, wenn eine Abfrage an einen Dienst weitergeleitet wird, für den die Datenbank nicht verfügbar ist. Daher muss ein Lastausgleichsgerät die Verfügbarkeit einer Datenbank für jeden Dienst bewusst sein. Und wenn Sie eine Lastausgleichsentscheidung treffen, müssen nur die Dienste berücksichtigt werden, auf denen die Datenbank verfügbar ist.

Betrachten Sie als Beispiel, dass Datenbankserver server1, server2 und server3 Datenbanken mydatabase1 und mydatabase2 host-Datenbanken. Wenn mydatabase1 auf server2 nicht verfügbar ist, muss das Lastausgleichsgerät diese Statusänderung beachten. Es muss Anforderungen für mydatabase1 nur auf server1 und server3 ausgleichen. Nachdem mydatabase1 auf server2 verfügbar ist, muss das Lastausgleichsgerät server2 in Lastausgleichsentscheidungen enthalten. Wenn mydatabase2 auf server3 nicht verfügbar ist, muss das Gerät Anforderungen für mydatabase2 nur auf server1 und server2 ausgleichen. Es muss server3 nur dann in seine Lastausgleichsentscheidungen einbeziehen, wenn mydatabase2 verfügbar ist. Dieses Lastenausgleichsverhalten muss in allen Datenbanken konsistent sein, die in der Serverfarm gehostet werden.

Die Citrix ADC Appliance implementiert dieses Verhalten, indem eine Liste aller Datenbanken abgerufen wird, die für einen Dienst aktiv sind. Zum Abrufen der Liste der aktiven Datenbanken verwendet die Appliance einen Monitor, der mit einer entsprechenden SQL-Abfrage konfiguriert ist. Wenn die angeforderte Datenbank für einen Dienst nicht verfügbar ist, schließt die Appliance den Dienst von Lastausgleichsentscheidungen aus, bis er verfügbar ist. Dieses Verhalten stellt einen ununterbrochenen Dienst für Clients sicher.

Hinweis:

Datenbankspezifischer Lastausgleich wird nur für MSSQL- und MySQL Diensttypen unterstützt. Diese Unterstützung ist auch für Microsoft SQL Server 2012 Hochverfügbarkeitsbereitstellung verfügbar.

Zum Einrichten eines datenbankspezifischen Lastenausgleichs müssen Sie Folgendes konfigurieren:

  • Aktivieren Sie die Lastausgleichsfunktion, und konfigurieren Sie einen virtuellen Lastausgleichsserver vom Typ MSSQL oder MySQL.
  • Konfigurieren Sie die Dienste, die die Datenbank hosten, und binden Sie die Dienste an den virtuellen Server. Der Monitor benötigt gültige Benutzeranmeldeinformationen, um sich am Datenbankserver anzumelden. Daher müssen Sie auf jedem Server ein Datenbankbenutzerkonto konfigurieren und dann das Benutzerkonto der Citrix ADC Appliance hinzufügen.
  • Anschließend konfigurieren Sie einen MSSQL-ECV- oder MYSQL-ECV-Monitor und binden den Monitor an jeden Dienst.
  • Schließlich müssen Sie die Konfiguration testen, um sicherzustellen, dass sie wie vorgesehen funktioniert. Bevor Sie diese Konfigurationsaufgaben ausführen, vergewissern Sie sich, wie datenbankspezifischer Lastenausgleich funktioniert.

Funktionsweise des datenbankspezifischen Lastenausgleichs

Für den datenbankspezifischen Lastenausgleich konfigurieren Sie einen Monitor, der jeden Datenbankserver regelmäßig nach den Namen aller aktiven Datenbanken abfragt. Die Citrix ADC Appliance speichert die Ergebnisse und aktualisiert die Datensätze regelmäßig basierend auf den durch die Überwachung abgerufenen Informationen. Wenn ein Client eine bestimmte Datenbank abfragt, verwendet die Appliance die konfigurierte Lastausgleichsmethode, um einen Dienst auszuwählen, und überprüft dann die Datensätze, um festzustellen, ob die Datenbank für diesen Dienst verfügbar ist. Wenn die Datensätze angeben, dass die Datenbank nicht verfügbar ist, verwendet sie die konfigurierte Lastausgleichsmethode, um den nächsten verfügbaren Dienst auszuwählen, und wiederholt die Überprüfung. Die Appliance leitet die Abfrage an den ersten verfügbaren Dienst weiter, auf dem die Datenbank aktiv ist.

Lastenausgleich aktivieren

Sie können Load Balancing-Entitäten wie Dienste und virtuelle Server konfigurieren, wenn die Lastausgleichsfunktion deaktiviert ist. Die Entitäten funktionieren erst, wenn Sie das Feature aktivieren.

So aktivieren Sie den Lastausgleich mit der Befehlszeilenschnittstelle

Geben Sie an der Eingabeaufforderung den folgenden Befehl ein, um den Lastausgleich zu aktivieren und die Konfiguration zu überprüfen:

enable ns feature LB

show ns feature

Beispiel:

> enable ns feature LoadBalancing
 Done
> show ns feature

        Feature                        Acronym              Status
        -------                        -------              ------
 1)     Web Logging                    WL                   OFF
 2)     Surge Protection               SP                   ON
 3)     Load Balancing                 LB                   ON
 .
 .
 .
 24)    NetScaler Push                 push                 OFF
 Done

So aktivieren Sie den Lastenausgleich mit dem Konfigurationsdienstprogramm

Navigieren Sie zu System > Einstellungen, und wählen Sie unter Grundfunktionen konfigurierendie Option Lastenausgleichaus.

Konfigurieren eines virtuellen Lastenausgleichsservers für datenbankspezifisches Lastenausgleich

Um einen virtuellen Server für den Lastausgleich von Datenbanken basierend auf Verfügbarkeit zu konfigurieren, aktivieren Sie den datenbankspezifischen Lastausgleichsparameter auf dem virtuellen Server. Durch Aktivieren des Parameters wird die Load Balancing-Logik so geändert, dass die Citrix ADC Appliance die Ergebnisse des an den ausgewählten Dienst gesendeten Monitoring-Prüfpunkts verweist, bevor die Abfrage an diesen Dienst weitergeleitet wird.

So konfigurieren Sie einen virtuellen Lastausgleichsserver für datenbankspezifisches Lastenausgleich

Geben Sie an der Eingabeaufforderung den folgenden Befehl ein, um einen virtuellen Lastausgleichsserver für den datenbankspezifischen Lastenausgleich zu konfigurieren und die Konfiguration zu überprüfen:

add lb vserver <name> <serviceType> <ipAddress> <port> -dbsLb ENABLED

show lb vserver <name>

Konfigurieren von Diensten

Nachdem Sie die Lastenausgleichsfunktion aktiviert haben, müssen Sie mindestens einen Dienst für jeden Anwendungsserver erstellen, der in das Lastausgleichs-Setup aufgenommen werden soll. Die von Ihnen konfigurierten Dienste stellen die Verbindungen zwischen der Citrix ADC Appliance und den Servern mit Lastausgleich bereit. Jeder Dienst hat einen Namen und gibt eine IP-Adresse, einen Port und den Typ der bereitgestellten Daten an.

Wenn Sie einen Dienst erstellen, ohne vorher ein Serverobjekt zu erstellen, ist die IP-Adresse des Dienstes auch der Name des Servers, der den Dienst hostet. Wenn Sie Server lieber nach Namen und nicht nach IP-Adresse identifizieren möchten, können Sie Serverobjekte erstellen und dann beim Erstellen eines Dienstes anstelle der IP-Adresse einen Servernamen angeben.

Datenbankbenutzer konfigurieren

In Datenbanken ist eine Verbindung immer statusbehaftet, was bedeutet, dass beim Herstellen einer Verbindung authentifiziert werden muss.

Sie müssen den Datenbankbenutzernamen und das Kennwort auf dem Citrix ADC konfigurieren. Wenn Sie beispielsweise einen Benutzer John in der Datenbank konfiguriert haben, müssen Sie den Benutzer John auch auf dem ADC konfigurieren. Wenn Sie die Datenbankbenutzernamen und -kennwörter auf dem ADC hinzufügen, werden diese der Datei nsconfig hinzugefügt.

Hinweis:

Bei Namen wird zwischen Groß- und Kleinschreibung unterschieden.

Der ADC verwendet diese Benutzeranmeldeinformationen, um die Clients zu authentifizieren und dann die Serververbindungen mit den Datenbankservern zu authentifizieren.

So fügen Sie einen Datenbankbenutzer mit der Befehlszeilenschnittstelle hinzu

Geben Sie an der Eingabeaufforderung

add db user <username> - password <password>

Beispiel:

add db user nsdbuser -password dd260427edf

So fügen Sie einen Datenbankbenutzer mit dem Konfigurationsdienstprogramm hinzu

Navigieren Sie zu System > Benutzerverwaltung > Datenbankbenutzer, und konfigurieren Sie einen Datenbankbenutzer.

Wenn Sie das Kennwort des Datenbankbenutzers auf dem Datenbankserver geändert haben, müssen Sie das Kennwort des entsprechenden Benutzers zurücksetzen, der auf der Citrix ADC Appliance konfiguriert ist.

So setzen Sie das Kennwort eines Datenbankbenutzers mit der Befehlszeilenschnittstelle zurück

Geben Sie an der Eingabeaufforderung

set db user <username> -password <password>

Beispiel:

set db user nsdbuser -password dd260538abs

So setzen Sie das Kennwort von Datenbankbenutzern mit dem Konfigurationsdienstprogramm zurück

Navigieren Sie zu System > Benutzerverwaltung > Datenbankbenutzer, wählen Sie einen Benutzer aus, und geben Sie neue Werte für das Kennwort ein.

Wenn auf dem Datenbankserver kein Datenbankbenutzer mehr vorhanden ist, können Sie den Benutzer aus der Citrix ADC Appliance entfernen. Wenn der Benutzer jedoch weiterhin auf dem Datenbankserver vorhanden ist und Sie den Benutzer aus der ADC-Appliance entfernen, wird jede Anforderung vom Client mit diesem Benutzernamen nicht authentifiziert. Daher wird der Benutzername nicht an den Datenbankserver weitergeleitet.

So entfernen Sie einen Datenbankbenutzer mit der Befehlszeilenschnittstelle

Geben Sie an der Eingabeaufforderung

rm db user <username>

Beispiel:

rm db user nsdbuser

So entfernen Sie einen Datenbankbenutzer mit dem Konfigurationsdienstprogramm

Navigieren Sie zu System > Benutzerverwaltung > Datenbankbenutzer, wählen Sie einen Benutzer aus, und klicken Sie auf Löschen.

Konfigurieren eines Monitors zum Abrufen der Namen aktiver Datenbanken

Sie können einen Monitor erstellen, um die Liste aller aktiven Datenbanken auf einer Datenbankinstanz abzurufen. Der Monitor meldet sich mit gültigen Benutzeranmeldeinformationen am Datenbankserver an und führt eine entsprechende SQL-Abfrage aus. Die SQL-Abfrage, die Sie verwenden müssen, hängt von Ihrer SQL Server-Bereitstellung ab. Beispielsweise können Sie in einem MSSQL-Datenbankspiegelungs-Setup die folgende Abfrage verwenden, um eine Liste der aktiven Datenbanken abzurufen, die auf einer Serverinstanz verfügbar sind.

select name from sys.databases where state=0

In einem MySQL Datenbank-Setup können Sie die folgenden Abfragen verwenden, um eine Liste der aktiven Datenbanken abzurufen, die auf einer Serverinstanz verfügbar sind.

Datenbanken anzeigen:

Sie konfigurieren den Monitor auch, um die Antwort auf eine Fehlerbedingung auszuwerten und die Ergebnisse zu speichern, wenn kein Fehler vorliegt. Wenn die Antwort einen Fehler enthält, markiert der Monitor den Dienst als DOWN. Die Appliance schließt den Dienst von Lastausgleichsentscheidungen aus, bis ein Fehler nicht mehr zurückgegeben wird.

Hinweis:

Die datenbankspezifische Lastenausgleichsfunktion wird nur für die Diensttypen MSSQL und MySQL unterstützt. Daher muss der Monitortyp MSSQL-ECV oder MYSQL-ECV sein.

So konfigurieren Sie einen Monitor zum Abrufen der Namen aller aktiven Datenbanken, die in einem Dienst gehostet werden, mithilfe der Befehlszeile

Geben Sie an der Eingabeaufforderung die folgenden Befehle ein, um die Namen aller aktiven Datenbanken abzurufen, die auf einem Dienst gehostet werden, und überprüfen Sie die Konfiguration:

add lb monitor <monitorName> <type> -userName <string> -sqlQuery <text> -evalRule <expression> -storedb ENABLED

show lb monitor <monitorName>

So konfigurieren Sie einen Monitor zum Abrufen der Namen aller aktiven Datenbanken, die in einem Dienst gehostet werden, mit dem Konfigurationsdienstprogramm

  1. Navigieren Sie zu Traffic Management > Load Balancing > Monitore, und konfigurieren Sie einen Monitor vom Typ MSSQL-ECV oder MYSQL-ECV.
  2. Geben Sie unter Spezielle Parametereinen Benutzernamen, eine Abfrage und eine Regel an. Beispiel: Bei MSSQL-ECV muss die Abfrage “Name aus sys.databases where state = 0 auswählen” sein, und eine Regel muss MSSQL.RES.TYPE.NE (ERROR) sein. Für MYSQL-ECV muss die Abfrage “Datenbanken anzeigen” sein und eine Regel muss MYSQL.RES.TYPE.NE (ERROR) sein.

Verfügbarkeitsgruppen Bereitstellungsunterstützung für MSSQL

Betrachten Sie das folgende Szenario, in dem datenbankspezifischer Lastausgleich in einer Hochverfügbarkeitsgruppenbereitstellung konfiguriert ist. S1 bis S5 sind die Dienste auf der ADC-Appliance. DB1 bis DB4 sind die Datenbanken auf den Servern, die von den Diensten S1 bis S5 dargestellt werden. AV1 und AV2 sind die Verfügbarkeitsgruppen. Jede Verfügbarkeitsgruppe enthält bis zu einer primären Datenbankserverinstanz und bis zu vier sekundäre Datenbankserverinstanzen. Ein Dienst, der die Server in der Verfügbarkeitsgruppe darstellt, kann primär für eine Verfügbarkeitsgruppe und sekundär für eine andere Verfügbarkeitsgruppe sein. Jede Verfügbarkeitsgruppe enthält verschiedene Datenbanken und einen Listener, bei dem es sich um einen Dienst handelt. Alle Anforderungen kommen im Listener-Dienst an, der sich in der primären Datenbank befindet. AVI enthält Datenbanken DB1 und DB2. AV2 enthält Datenbanken DB3 und DB4. L1 und L2 sind die Listener auf AV1 bzw. AV2. S1 ist der primäre Dienst für AV1 und S2 ist der primäre Dienst für AV2.

HA-Bereitstellung SQL

Service Liste der aktiven Datenbanken auf dem Dienst
S1 DB1, DB2, DB3, DB4
S2 DB3, DB4
S3 DB3, DB4
S4 DB1, DB2
S5 DB1, DB2
Verfügbarkeitsgruppe Datenbanken Dienste, die die Server in der Verfügbarkeitsgruppe darstellen
AV1 DB1, DB2 S1, S4, S5
AV2 DB3, DB4 S1, S2, S3

Abfragen werden wie folgt ausgeführt:

  1. Eine READ-Abfrage für AV1 ist Lastausgleich zwischen S4 und S5. S1 ist die primäre für AV1.
  2. Eine WRITE Abfrage für AV1 wird an L1 geleitet.
  3. Eine READ-Abfrage für AV2 ist Lastenausgleich zwischen S1 und S3. S2 ist die primäre für AV2.
  4. Eine WRITE Abfrage für AV1 wird an L2 geleitet.

Beispielkonfiguration

  1. Konfigurieren Sie den Lastenausgleich und die virtuellen Server zum Wechseln von Inhalten.
    • add lb vserver lbwrite -dbslb enabled
    • add lbvserver lbread MSSQL -dbslb enabled
    • add csvserver csv MSSQL 1.1.1.10 1433
  2. Konfigurieren Sie zwei Listener-Dienste, einen für jede Verfügbarkeitsgruppe und fünf Dienste S1 bis S5, die Datenbanken DB1 bis DB4 darstellen.
    • add service L1 1.1.1.11 MSSQL 1433
    • add service L2 1.1.1.12 MSSQL 1433
    • add service s1 1.1.1.13 MSSQL 1433
    • add service s2 1.1.1.14 MSSQL 1433
    • add service s3 1.1.1.15 MSSQL 1433
    • add service s4 1.1.1.16 MSSQL 1433
    • add service s5 1.1.1.17 MSSQL 1433
  3. Binden Sie die Dienste an die virtuellen Server mit Lastenausgleich.
    • bind lbvserver lbwrite L1
    • bind lbvserver lbwrite L2
    • bind lbvserver lbread s1
    • bind lbvserver lbread s2
    • bind lbvserver lbread s3
    • bind lbvserver lbread s4
    • bind lbvserver lbread s5
  4. Datenbankbenutzer konfigurieren.
    • add db user nsdbuser1 -password dd260427edf
    • add db user nsdbuser2 -password ccd1234xyzw
  5. Konfigurieren Sie zwei Monitore, Monitor_l1 und Monitor_l2 für jeden Listener-Dienst, um die Liste der aktiven Datenbanken in dieser Verfügbarkeitsgruppe abzurufen. Fügen Sie einen Monitor Monitor1 hinzu, um die Liste der Datenbanken für die sekundäre Datenbankserverinstanz abzurufen.
    • add lb monitor monitor_L1 MSSQL-ECV -userName user1 -sqlQuery "SELECT name FROM sys.databases a INNER JOIN sys.dm_hadr_availability_replica_states b ON a.replica_id=b.replica_id INNER JOIN sys.availability_group_listeners c on b.group_id = c.group_id INNER JOIN sys.availability_group_listener_ip_addresses d on c.listener_id = d.listener_id WHERE b.role = 1 and d.ip_address like '1.1.1.11'" -evalRule "MSSQL.RES.TYPE.NE(ERROR)” –storedb ENABLED
    • add lb monitor monitor_L2 MSSQL-ECV -userNameuser1 -sqlQuery "SELECT name FROM sys.databases a INNER JOIN sys.dm_hadr_availability_replicca_states b ON a.replica_id=b.replica_id INNER JOIN sys.availability_group_listeners c on b.group_id = c.group_id INNER JOIN sys.availability_group_listener_ip_addresses d on c.listener_id = d.listener_id WHERE b.role = 1 and d.ip_address like '1.1.1.12'" -evalRule "MSSQL.RES.TYPE.NE(ERROR)" -storedb ENABLED
    • add lb monitor monitor1 MSSQL-ECV -userNameuser1 -sqlQuery "SELECT name FROM sys.databases a INNER JOIN sys.dm_hadr_availability_replica_states b ON a.replica_id=b.replica_id WHERE b.role = 2" -evalRule "MSSQL.RES.TYPE.NE(ERROR)" -storedb ENABLED
  6. Konfigurieren Sie Lese- und Schreibrichtlinien.
    • add cs policy pol_write -rule "MSSQL.REQ.QUERY.TEXT.CONTAINS("insert")"
    • add cs policy pol_read -rule "MSSQL.REQ.QUERY.TEXT.CONTAINS("select")"
  7. Binden Sie die Richtlinien an den virtuellen Content Switching-Server.
    • bind csvserver csv -targetLBVserver lbwrite -policyName pol_write -priority 11
    • bind csvserver csv -targetLBVserver lbread -policyName pol_read -priority 12
  8. Binden Sie Monitore an die Dienste. Binden Sie Monitore an die Dienste L1 und L2, um die Liste der aktiven Datenbanken für die Verfügbarkeitsgruppe zu erhalten, für die sie der Listener ist. Binden Sie Monitore an alle Dienste, die an den schreibgeschützten virtuellen Server gebunden sind.
    • bind service L1 -monitorName monitor_L1
    • bind service L2 -monitorName monitor_L2
    • bind service s1 -monitorName monitor1
    • bind service s2 -monitorName monitor1
    • bind service s3 -monitorName monitor1
    • bind service s4 -monitorName monitor1
    • bind service s5 -monitorName monitor1

Konfigurationsbeispiele für den virtuellen MSSQL-Server

So konfigurieren Sie einen virtuellen Lastausgleichsserver für den datenbankspezifischen Lastenausgleich:

add lb vserver DBSpecificLB1 MSSQL 192.0.2.10 1433 -dbsLb ENABLED

Done

show lb vserver DBSpecificLB1

DBSpecificLB1 (192.0.2.10:1433) - MSSQL Type: ADDRESS
. . .
DBS_LB: ENABLED

Done

So konfigurieren Sie Dienste:

Dienst hinzufügen msservice1 5.5.5.5 MSSQL 1433

So konfigurieren Sie einen Monitor zum Abrufen der Namen aller aktiven Datenbanken, die in einem Dienst gehostet werden, mithilfe der Befehlszeile:

add lb monitor mssql-monitor1 MSSQL-ECV -userName user1 -sqlQuery "select name from sys.databases where state=0" -evalRule "MSSQL.RES.TYPE.NE(ERROR)" -storedb EN

Done

show lb monitor mssql-monitor1

1)   Name.......: mssql-monitor1    Type......: MSSQL-ECV

...

Special parameters: Database.....:""

User name.....:"user1"

Query..:select name from sys.databases where state=0 EvalRule...:MSSQL.RES.TYPE.NE(ERROR)

Version...:70 STORE_DB...:ENABLED

Done

Konfigurationsbeispiele für den virtuellen MySQL -Server

So konfigurieren Sie einen virtuellen Lastausgleichsserver für den datenbankspezifischen Lastenausgleich:

add lb vserver DBSpecificLB1 MYSQL 192.0.2.10 3306 -dbsLb ENABLED

Done

show lb vserver DBSpecificLB1

DBSpecificLB1 (192.0.2.10:3306) - MYSQL Type: ADDRESS

. . .

DBS_LB: ENABLED

Done

So konfigurieren Sie Dienste:

add service msservice1 5.5.5.5 MYSQL 3306

So konfigurieren Sie einen Monitor zum Abrufen der Namen aller aktiven Datenbanken, die in einem Dienst gehostet werden, mithilfe der Befehlszeile:

add lb monitor mysql-monitor1 MYSQL-ECV -userName user1 -sqlQuery "show databases" -evalRule "MYSQL.RES.TYPE.NE(ERROR)" -storedb ENABLED

Done

show lb monitor mysql-monitor1

1)     Name.......: mysql-monitor1  Type......: MYSQL-ECV  State....:  ENABLED

...

Special parameters: Database.....:""

User name.....:"user1" Query..:show databases

EvalRule...:MYSQL.RES.TYPE.NE(ERROR) STORE_DB...:ENABLED

Done