ADC

Anwendungsfall 4: Datenbankspezifischer Lastausgleich

Bei einer Datenbankserverfarm muss der Lastausgleich nicht nur auf der Grundlage der Serverzustände, sondern auch anhand der Verfügbarkeit der Datenbank auf jedem Server erfolgen. Ein Dienst ist möglicherweise aktiv und ein Lastausgleichsgerät zeigt ihn möglicherweise als im Status UP an, aber die angeforderte Datenbank ist für diesen Dienst möglicherweise nicht verfügbar. Die Anfrage wird nicht bearbeitet, wenn eine Abfrage an einen Dienst weitergeleitet wird, für den die Datenbank nicht verfügbar ist. Daher muss ein Load-Balancing-Gerät die Verfügbarkeit einer Datenbank für jeden Dienst kennen. Und wenn es eine Load-Balancing-Entscheidung trifft, darf es nur die Dienste berücksichtigen, auf denen die Datenbank verfügbar ist.

Stellen Sie sich als Beispiel vor, dass die DatenbankServer1, server2 und server3 die Datenbanken mydatabase1 und mydatabase2 hosten. Wenn mydatabase1 auf Server2 nicht mehr verfügbar ist, muss das Load Balancing-Gerät über diese Statusänderung informiert sein. Es muss Anfragen für mydatabase1 nur auf Server1 und Server3 verteilen. Sobald mydatabase1 auf Server2 verfügbar ist, muss das Lastausgleichsgerät Server2 in die Lastausgleichsentscheidungen einbeziehen. In ähnlicher Weise muss das Gerät, wenn mydatabase2 auf Server3 nicht verfügbar ist, die Anforderungen für mydatabase2 nur auf Server1 und Server2 verteilen. Server3 darf nur dann in seine Load-Balancing-Entscheidungen einbezogen werden, wenn mydatabase2 verfügbar ist. Dieses Lastausgleichsverhalten muss für alle Datenbanken, die in der Serverfarm gehostet werden, konsistent sein.

Die NetScaler-Appliance implementiert dieses Verhalten, indem sie eine Liste aller Datenbanken abruft, die in einem Dienst aktiv sind. Um die Liste der aktiven Datenbanken abzurufen, 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 gewährleistet einen unterbrechungsfreien Service für Kunden.

Hinweis

Datenbankspezifischer Lastausgleich wird nur für MS SQL- und MySQL-Diensttypen unterstützt. Diese Unterstützung ist auch für MS SQL Server verfügbar, die in AlwaysOn-Hochverfügbarkeitsgruppen konfiguriert sind. Weitere Informationen finden Sie unter Unterstützte Datenbankversionen, Protokolle und Authentifizierungsmethoden.

Um einen datenbankspezifischen Load Balancing einzurichten, 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 der Server ein Datenbankbenutzerkonto konfigurieren und das Benutzerkonto dann der NetScaler-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, sollten Sie sich darüber im Klaren sein, wie der datenbankspezifische Lastausgleich funktioniert.

So funktioniert der datenbankspezifische Load Balancing

Für den datenbankspezifischen Lastausgleich konfigurieren Sie einen Monitor, der regelmäßig jeden Datenbankserver nach den Namen aller aktiven Datenbanken abfragt. Die NetScaler-Appliance speichert die Ergebnisse und aktualisiert die Datensätze regelmäßig auf der Grundlage der durch die Überwachung abgerufenen Informationen. Wenn ein Client eine bestimmte Datenbank abfragt, verwendet die Appliance die konfigurierte Load-Balancing-Methode, um einen Dienst auszuwählen, und überprüft dann ihre Datensätze, um festzustellen, ob die Datenbank für diesen Dienst verfügbar ist. Wenn aus den Datensätzen hervorgeht, dass die Datenbank nicht verfügbar ist, verwendet sie die konfigurierte Load Balancing-Methode, um den nächsten verfügbaren Dienst auszuwählen, und wiederholt dann die Überprüfung. Die Appliance leitet die Anfrage an den ersten verfügbaren Dienst weiter, auf dem die Datenbank aktiv ist.

Lastausgleich 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 die Funktion aktivieren.

Aktivieren Sie den Lastausgleich mithilfe 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
<!--NeedCopy-->

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
<!--NeedCopy-->

Aktivieren Sie den Lastausgleich mithilfe der GUI

Navigieren Sie zu System > Einstellungen und wählen Sie unter Configure Basic Featuresdie Option Load Balancingaus.

Konfigurieren Sie einen virtuellen Lastausgleichsserver für den datenbankspezifischen Lastausgleich

Um einen virtuellen Server für den Lastausgleich von Datenbanken auf der Grundlage der Verfügbarkeit zu konfigurieren, aktivieren Sie den datenbankspezifischen Load-Balancing-Parameter auf dem virtuellen Server. Durch die Aktivierung des Parameters wird die Load-Balancing-Logik geändert, sodass die NetScaler-Appliance die Ergebnisse der an den ausgewählten Dienst gesendeten Überwachungstests weiterleitet, bevor sie die Anfrage an diesen Dienst weiterleitet.

Konfigurieren Sie einen virtuellen Lastausgleichsserver für den datenbankspezifischen Lastausgleich mithilfe der CLI

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

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

show lb vserver <name>
<!--NeedCopy-->

Konfigurieren von Diensten

Nachdem Sie die Load-Balancing-Funktion aktiviert haben, müssen Sie mindestens einen Dienst für jeden Anwendungsserver erstellen, der in Ihr Load-Balancing-Setup aufgenommen werden soll. Die Dienste, die Sie konfigurieren, stellen die Verbindungen zwischen der NetScaler-Appliance und den Load Balancing-Servern bereit. Jeder Dienst hat einen Namen und gibt eine IP-Adresse, einen Port und den Datentyp an, der bereitgestellt wird.

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

Konfigurieren von Datenbankbenutzern

In Datenbanken ist eine Verbindung immer statusbehaftet, was bedeutet, dass eine Verbindung, wenn sie hergestellt wird, authentifiziert werden muss.

Konfigurieren Sie Ihren Datenbankbenutzernamen und Ihr Kennwort auf dem NetScaler. Wenn Sie beispielsweise einen Benutzer John in der Datenbank konfiguriert haben, müssen Sie den Benutzer John auch auf dem ADC konfigurieren. Dem ADC hinzugefügte Datenbankbenutzernamen und Kennwörter werden der nsconfig Datei 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.

Fügen Sie mithilfe der CLI einen Datenbankbenutzer hinzu

Geben Sie an der Eingabeaufforderung

add db user <username> - password <password>
<!--NeedCopy-->

Beispiel:

add db user nsdbuser -password dd260427edf
<!--NeedCopy-->

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

Navigieren Sie zu System > Benutzerverwaltung > Datenbankbenutzerund 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 NetScaler Appliance konfiguriert ist.

Setzen Sie das Kennwort eines Datenbankbenutzers mithilfe der CLI zurück

Geben Sie an der Eingabeaufforderung

set db user <username> -password <password>
<!--NeedCopy-->

Beispiel:

set db user nsdbuser -password dd260538abs
<!--NeedCopy-->

Setzen Sie das Kennwort von Datenbankbenutzern über die grafische Benutzeroberfläche 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 NetScaler-Appliance entfernen. Wenn der Benutzer jedoch weiterhin auf dem Datenbankserver existiert und Sie den Benutzer aus der ADC-Appliance entfernen, wird jede Anfrage des Clients mit diesem Benutzernamen nicht authentifiziert. Daher wird der Benutzername nicht an den Datenbankserver weitergeleitet.

Entfernen Sie einen Datenbankbenutzer mithilfe der CLI

Geben Sie an der Eingabeaufforderung

rm db user <username>
<!--NeedCopy-->

Beispiel:

rm db user nsdbuser
<!--NeedCopy-->

Entfernen Sie einen Datenbankbenutzer mithilfe der GUI

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

Konfigurieren Sie einen Monitor, um die Namen der aktiven 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-Serverbereitstellung ab. In einem MSSQL-Datenbankspiegelungs-Setup können Sie beispielsweise 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
<!--NeedCopy-->

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 so, dass er die Reaktion auf eine Fehlerbedingung auswertet und die Ergebnisse speichert, 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 Load-Balancing-Entscheidungen aus, bis kein Fehler mehr zurückgegeben wird.

Hinweis

Die datenbankspezifische Load-Balancing-Funktion 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 Befehlszeile die folgenden Befehle ein, um die Namen aller aktiven Datenbanken abzurufen, die auf einem Dienst gehostet werden, und um die Konfiguration zu überprüfen:

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

show lb monitor <monitorName>
<!--NeedCopy-->

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 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. Für MSSQL-ECV muss die Abfrage beispielsweise „select name from sys.databases where state=0”) lauten, und eine Regel muss MSSQL.RES.TYPE.NE (ERROR) lauten. Für MYSQL-ECV muss die Abfrage „show databases“ lauten und eine Regel muss MYSQL.RES.TYPE.NE (ERROR) lauten.

Unterstützung für die Bereitstellung von Verfügbarkeitsgruppen für MSSQL

Stellen Sie sich das folgende Szenario vor, in dem der datenbankspezifische Lastausgleich in einer Gruppenbereitstellung mit hoher Verfügbarkeit konfiguriert wird. S1 bis S5 sind die Dienste auf der ADC-Appliance. DB1 bis DB4 sind die Datenbanken auf den Servern, die durch die Dienste S1 bis S5 repräsentiert werden. AV1 und AV2 sind die Verfügbarkeitsgruppen. Jede Verfügbarkeitsgruppe enthält bis zu eine primäre Datenbankserverinstanz und bis zu vier sekundäre Datenbankserverinstanzen. Ein Dienst, der die Server in der Verfügbarkeitsgruppe repräsentiert, kann für eine Verfügbarkeitsgruppe primär und für eine andere Verfügbarkeitsgruppe sekundär sein. Jede Verfügbarkeitsgruppe enthält verschiedene Datenbanken und einen Listener, bei dem es sich um einen Dienst handelt. Alle Anfragen kommen auf dem Listener-Dienst an, der sich in der Primärdatenbank befindet. AVI enthält die Datenbanken DB1 und DB2. AV2 enthält die Datenbanken DB3 und DB4. L1 und L2 sind die Zuhörer 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 im Service
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

Die Abfragen laufen wie folgt ab:

  1. Bei einer READ-Abfrage für AV1 erfolgt ein Lastausgleich zwischen S4 und S5. S1 ist der primäre Wert für AV1.
  2. Eine WRITE-Abfrage für AV1 wird an L1 gerichtet.
  3. Bei einer READ-Abfrage für AV2 erfolgt ein Lastausgleich zwischen S1 und S3. S2 ist das Primärsystem für AV2.
  4. Eine WRITE-Abfrage für AV1 wird an L2 gerichtet.

Beispielkonfiguration

  1. Konfigurieren Sie virtuelle Server für Load Balancing und Content Switching.
    • 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 die Datenbanken DB1 bis DB4 repräsentieren.
    • 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 Load-Balancing-Server.
    • 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. Konfigurieren Sie Datenbankbenutzer.
    • 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 hinzu, monitor1, 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 Schreibrechtlinien.
    • 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 abzurufen, 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

Um einen virtuellen Lastausgleichsserver für den datenbankspezifischen Lastausgleich zu konfigurieren, gehen Sie wie folgtvor:

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
<!--NeedCopy-->

Um Dienste zu konfigurieren:

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
<!--NeedCopy-->

Konfigurationsbeispiele für den virtuellen MySQL-Server

Um einen virtuellen Lastausgleichsserver für den datenbankspezifischen Lastausgleich zu konfigurieren, gehen Sie wie folgtvor:

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
<!--NeedCopy-->

Um Dienste zu konfigurieren:

add service msservice1 5.5.5.5 MYSQL 3306
<!--NeedCopy-->

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
<!--NeedCopy-->