Citrix ADC

Anwendungsfall 4: Datenbankspezifischer Lastenausgleich

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.

Aktivieren des Load Balancing mit der CLI

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:

>启用ns特性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 

Aktivieren des Lastenausgleichs mit der GUI

Navigieren Sie zuSystem > Einstellungenund wählenSie unter Configure Basic FeaturesLoad Balancingaus.

Konfigurieren eines virtuellen Lastausgleichsservers für datenbankspezifisches Load Balancing

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.

Konfigurieren eines virtuellen Lastausgleichsservers für datenbankspezifisches Load Balancing mit der CLI

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     -dbsLb ENABLED show lb vserver  

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.

Konfigurieren von Datenbankbenutzern

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

Konfigurieren Sie den Benutzernamen und das Kennwort Ihrer Datenbank auf dem Citrix ADC. Wenn Sie beispielsweise einen Benutzer John in der Datenbank konfiguriert haben, müssen Sie den Benutzer John auch auf dem ADC konfigurieren. Die dem ADC hinzugefügten Benutzernamen und Kennwörter der Datenbank werden dernsconfigDatei 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.

Hinzufügen eines Datenbankbenutzers mit der CLI

Geben Sie an der Eingabeaufforderung

add db user  - password  

Beispiel:

add db user nsdbuser -password dd260427edf 

Fügen Sie einen Datenbankbenutzer über die grafische Benutzeroberfläche hinzu

Navigieren Sie zuSystem > 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.

Zurücksetzen des Kennworts eines Datenbankbenutzers mit der CLI

Geben Sie an der Eingabeaufforderung

set db user  -password  

Beispiel:

set db user nsdbuser -password dd260538abs 

Setzen Sie das Kennwort von Datenbankbenutzern über die grafische Benutzeroberfläche zurück

Navigieren Sie zuSystem > 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.

Entfernen eines Datenbankbenutzers mit der CLI

Geben Sie an der Eingabeaufforderung

rm db user  

Beispiel:

rm db user nsdbuser 

Entfernen eines Datenbankbenutzers mit der GUI

Navigieren Sie zuSystem > Benutzerverwaltung > Datenbankbenutzer, wählen Sie einen Benutzer aus, und klicken Sie aufLöschen.

Konfigurieren Sie einen Monitor, um die Namen aktiver Datenbanken abzurufen

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.

Konfigurieren Sie einen Monitor, um die Namen aller aktiven Datenbanken abzurufen, die in einem Dienst über die Befehlszeilenschnittstelle gehostet werden

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:

加磅我itor   -userName  -sqlQuery  -evalRule  -storedb ENABLED show lb monitor  

Konfigurieren Sie einen Monitor, um die Namen aller aktiven Datenbanken abzurufen, die in einem Dienst über die grafische Benutzeroberfläche gehostet werden

  1. Navigieren Sie zuTraffic Management > Load Balancing > Monitore, und konfigurieren Sie einen Monitor vom Typ MSSQL-ECV oder MYSQL-ECV.
  2. Geben Sie unterSpezielle 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.

Unterstützung für Bereitstellungsgruppen 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 repräsentieren
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 die virtuellen Lastenausgleichs- und Content Switching-Server.
    • 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.
    • 加磅我itor 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
    • 加磅监控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
    • 加磅我itor 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ügenmsservice1 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:

加磅我itor 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:

加磅我itor 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