Citrix ADC

Cas d’utilisation 4 : équilibrage de charge spécifique à la base de données

Une batterie de serveurs de base de données doit être équilibrée non seulement en fonction des états des serveurs, mais également de la disponibilité de la base de données sur chaque serveur. Un service peut être en service et un périphérique d’équilibrage de charge peut l’afficher comme étant à l’état UP, mais la base de données demandée peut être indisponible sur ce service. La demande n’est pas servie si une requête est transférée à un service sur lequel la base de données n’est pas disponible. Par conséquent, un périphérique d’équilibrage de charge doit être conscient de la disponibilité d’une base de données sur chaque service. Et lorsqu’il prend une décision d’équilibrage de charge, il ne doit tenir compte que des services sur lesquels la base de données est disponible.

À titre d’exemple, considérez que les serveurs de base de données server1, server2 et server3 hébergent les bases de données mydatabase1 et mydatabase2. Si mydatabase1 devient indisponible sur server2, le périphérique d’équilibrage de charge doit être conscient de ce changement d’état. Il doit équilibrer la charge des requêtes pour mydatabase1 sur uniquement server1 et server3. Une fois que mydatabase1 est disponible sur server2, le périphérique d’équilibrage de charge doit inclure server2 dans les décisions d’équilibrage de charge. De même, si mydatabase2 devient indisponible sur server3, le périphérique doit effectuer des demandes d’équilibrage de charge pour mydatabase2 uniquement sur server1 et server2. Il ne doit inclure server3 dans ses décisions d’équilibrage de charge que lorsque mydatabase2 devient disponible. Ce comportement d’équilibrage de charge doit être cohérent dans toutes les bases de données hébergées sur la batterie de serveurs.

L’appliance Citrix ADC implémente ce comportement en récupérant une liste de toutes les bases de données actives sur un service. Pour récupérer la liste des bases de données actives, l’appliance utilise un moniteur configuré avec une requête SQL appropriée. Si la base de données demandée n’est pas disponible sur un service, l’appliance exclut le service des décisions d’équilibrage de charge jusqu’à ce qu’il devienne disponible. Ce comportement assure un service ininterrompu aux clients.

Remarque

L’équilibrage de charge spécifique à la base de données est pris en charge uniquement pour les types de service MSSQL et MySQL. Cette prise en charge est également disponible pour le déploiement haute disponibilité de Microsoft SQL Server 2012.

Pour configurer l’équilibrage de charge spécifique à la base de données, vous devez configurer les éléments suivants :

  • Activez la fonction d’équilibrage de charge et configurez un serveur virtuel d’équilibrage de charge de type MSSQL ou MySQL.
  • Configurez les services qui hébergent la base de données et liez les services au serveur virtuel. Le moniteur a besoin d’informations d’identification d’utilisateur valides pour ouvrir une session sur le serveur de base de données. Vous devez donc configurer un compte d’utilisateur de base de données sur chacun des serveurs, puis ajouter le compte d’utilisateur à l’appliance Citrix ADC.
  • Ensuite, vous configurez un moniteur MSSQL-ECV ou MYSQL-ECV et liez le moniteur à chaque service.
  • Enfin, vous devez tester la configuration pour vous assurer qu’elle fonctionne comme prévu. Avant d’effectuer ces tâches de configuration, assurez-vous de bien comprendre le fonctionnement de l’équilibrage de charge spécifique à la base de données.

Fonctionnement de l’équilibrage de charge spécifique de base de données

Pour l’équilibrage de charge spécifique à la base de données, vous configurez un moniteur qui interroge périodiquement chaque serveur de base de données pour les noms de toutes les bases de données actives sur celui-ci. L’appliance Citrix ADC stocke les résultats et met à jour régulièrement les enregistrements en fonction des informations récupérées grâce à la surveillance. Lorsqu’un client interroge une base de données particulière, l’appliance utilise la méthode d’équilibrage de charge configurée pour sélectionner un service, puis vérifie ses enregistrements pour déterminer si la base de données est disponible sur ce service. Si les enregistrements indiquent que la base de données n’est pas disponible, elle utilise la méthode d’équilibrage de charge configurée pour sélectionner le service disponible suivant, puis répète la vérification. L’appliance transmet la requête au premier service disponible sur lequel la base de données est active.

Activer l’équilibrage de charge

Vous pouvez configurer des entités d’équilibrage de charge telles que les services et les serveurs virtuels lorsque la fonctionnalité d’équilibrage de charge est désactivée. Les entités ne fonctionnent pas tant que vous n’avez pas activé la fonction.

Activer l’équilibrage de charge à l’aide de la CLI

À l’invite de commandes, tapez la commande suivante pour activer l’équilibrage de charge et vérifier la configuration :

enable ns feature LB

show ns feature
<!--NeedCopy-->

Exemple :

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

Activer l’équilibrage de charge à l’aide de l’interface graphique

Accédez à Système > Paramètres et, dans Configurer les fonctionnalités de base, sélectionnez Équilibrage de charge.

Configurer un serveur virtuel d’équilibrage de charge pour l’équilibrage de charge spécifique à la base de données

Pour configurer un serveur virtuel pour équilibrer la charge des bases de données en fonction de la disponibilité, vous activez le paramètre d’équilibrage de charge spécifique à la base de données sur le serveur virtuel. L’activation du paramètre modifie la logique d’équilibrage de charge de sorte que l’appliance Citrix ADC renvoie les résultats de la sonde de surveillance envoyée au service sélectionné, avant de transférer la requête à ce service.

Configurer un serveur virtuel d’équilibrage de charge pour l’équilibrage de charge spécifique à la base de données à l’aide de la CLI

À l’invite de commandes, tapez la commande suivante pour configurer un serveur virtuel d’équilibrage de charge pour l’équilibrage de charge spécifique à la base de données et vérifiez la configuration :

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

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

Configurer les services

Après avoir activé la fonctionnalité d’équilibrage de charge, vous devez créer au moins un service pour chaque serveur d’applications qui doit être inclus dans votre configuration d’équilibrage de charge. Les services que vous configurez fournissent les connexions entre l’appliance Citrix ADC et les serveurs équilibrés de charge. Chaque service a un nom et spécifie une adresse IP, un port et le type de données qui est servi.

Si vous créez un service sans créer d’objet serveur au préalable, l’adresse IP du service est également le nom du serveur qui héberge le service. Si vous préférez identifier les serveurs par nom plutôt que par adresse IP, vous pouvez créer des objets serveur, puis spécifier le nom d’un serveur au lieu de son adresse IP lorsque vous créez un service.

Configurer les utilisateurs de base

Dans les bases de données, une connexion est toujours avec état, ce qui signifie que lorsqu’une connexion est établie, elle doit être authentifiée.

Configurez le nom d’utilisateur et le mot de passe de votre base de données sur Citrix ADC. Par exemple, si vous avez un utilisateur John configuré sur la base de données, vous devez également configurer l’utilisateur John sur ADC. Les noms d’utilisateur et mots de passe de base de données ajoutés à ADC sont ajoutés au fichier nsconfig.

Remarque

Les noms sont sensibles à la casse.

ADC utilise ces informations d’identification utilisateur pour authentifier les clients, puis authentifier les connexions serveur avec les serveurs de base de données.

Ajouter un utilisateur de base de données à l’aide de la CLI

À l’invite de commandes, tapez

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

Exemple :

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

Ajouter un utilisateur de base de données à l’aide de l’interface graphique

Accédez à Système > Administration des utilisateurs > Utilisateurs de base de données et configurez un utilisateur de base de données.

Si vous avez modifié le mot de passe de l’utilisateur de base de données sur le serveur de base de données, vous devez réinitialiser le mot de passe de l’utilisateur correspondant configuré sur l’appliance Citrix ADC.

Réinitialiser le mot de passe d’un utilisateur de base de données à l’aide de la CLI

À l’invite de commandes, tapez

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

Exemple :

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

Réinitialiser le mot de passe des utilisateurs de base de données en utilisant l’interface graphique

Accédez à Système > Administration des utilisateurs > Utilisateurs de base de données, sélectionnez un utilisateur et entrez de nouvelles valeurs pour le mot de passe.

Si un utilisateur de base de données n’existe plus sur le serveur de base de données, vous pouvez le supprimer de l’appliance Citrix ADC. Toutefois, si l’utilisateur continue d’exister sur le serveur de base de données et que vous supprimez l’utilisateur de l’appliance ADC, toute demande du client portant ce nom d’utilisateur n’est pas authentifiée. Par conséquent, le nom d’utilisateur n’est pas routé vers le serveur de base de données.

Supprimer un utilisateur de base de données à l’aide de la CLI

À l’invite de commandes, tapez

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

Exemple :

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

Supprimer un utilisateur de base de données à l’aide de l’interface graphique

Accédez à Système > Administration des utilisateurs > Utilisateurs de base de données, sélectionnez un utilisateur et cliquez sur Supprimer.

Configurer un moniteur pour récupérer les noms des bases de données actives

Vous pouvez créer un moniteur pour récupérer la liste de toutes les bases de données actives sur une instance de base de données. Le moniteur ouvre une session sur le serveur de base de données à l’aide d’informations d’identification utilisateur valides et exécute une requête SQL appropriée. La requête SQL que vous devez utiliser dépend du déploiement de votre serveur SQL. Par exemple, dans une configuration de mise en miroir de base de données MSSQL, vous pouvez utiliser la requête suivante pour récupérer une liste de bases de données actives disponibles sur une instance de serveur.

select name from sys.databases where state=0
<!--NeedCopy-->

Dans une configuration de base de données MySQL, vous pouvez utiliser les requêtes suivantes pour récupérer une liste de bases de données actives disponibles sur une instance de serveur.

Afficher les bases de données :

Vous configurez également le moniteur pour évaluer la réponse à une condition d’erreur et pour stocker les résultats s’il n’y a pas d’erreur. Si la réponse contient une erreur, le moniteur marque le service comme DOWN. L’appliance exclut le service des décisions d’équilibrage de charge jusqu’à ce qu’une erreur ne soit plus renvoyée.

Remarque

La fonction d’équilibrage de charge spécifique à la base de données est prise en charge uniquement pour les types de service MSSQL et MySQL. Par conséquent, le type de moniteur doit être MSSQL-ECV ou MYSQL-ECV.

Configurer un moniteur pour récupérer les noms de toutes les bases de données actives hébergées sur un service à l’aide de l’interface de ligne de commande

À l’invite de commandes, tapez les commandes suivantes pour récupérer les noms de toutes les bases de données actives hébergées sur un service et vérifier la configuration :

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

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

Configurer un moniteur pour récupérer les noms de toutes les bases de données actives hébergées sur un service à l’aide de l’interface graphique

  1. Accédez à Gestion du trafic > Équilibrage de charge > Surveille et configurez un moniteur de type MSSQL-ECV ou MYSQL-ECV.
  2. Dans Paramètres spéciaux, spécifiez un nom d’utilisateur, une requête et une règle. Par exemple, pour MSSQL-ECV, la requête doit être « select name from sys.databases where state=0 ») et une règle doit être MSSQL.RES.TYPE.NE (ERROR). Pour MYSQL-ECV, la requête doit être « show databases » et une règle doit être MYSQL.RES.TYPE.NE (ERROR).

Prise en charge du déploiement des groupes de disponibilité pour MSSQL

Considérons le scénario suivant dans lequel l’équilibrage de charge spécifique à la base de données est configuré dans un déploiement de groupe haute disponibilité. S1 à S5 sont les services de l’appliance ADC. DB1 à DB4 est les bases de données sur les serveurs représentés par les services S1 à S5. AV1 et AV2 sont les groupes de disponibilité. Chaque groupe de disponibilité contient jusqu’à une instance de serveur de base de données principale et jusqu’à quatre instances de serveur de base de données secondaires. Un service, représentant les serveurs du groupe de disponibilité, peut être principal pour un groupe de disponibilité et secondaire pour un autre groupe de disponibilité. Chaque groupe de disponibilité contient différentes bases de données et un écouteur, qui est un service. Toutes les demandes arrivent sur le service d’écoute qui réside dans la base de données principale. AVI contient des bases de données DB1 et DB2. AV2 contient des bases de données DB3 et DB4. L1 et L2 sont les écouteurs sur AV1 et AV2 respectivement. S1 est le service principal pour AV1 et S2 est le service principal pour AV2.

SQL, déploiement HA

Service Liste des bases de données actives sur le service
S1 DB1, DB2, DB3, DB4
S2 DB3, DB4
S3 DB3, DB4
S4 DB1, DB2
S5 DB1, DB2
Groupe de disponibilité Bases de données Services représentant les serveurs du groupe de disponibilité
AV1 DB1, DB2 S1, S4, S5
AV2 DB3, DB4 S1, S2, S3

Les requêtes s’écoulent comme suit :

  1. Une requête READ pour AV1 est équilibrée de charge entre S4 et S5. S1 est le principal pour AV1.
  2. Une requête WRITE pour AV1 est dirigée vers L1.
  3. Une requête READ pour AV2 est équilibrée de charge entre S1 et S3. S2 est le principal pour AV2.
  4. Une requête WRITE pour AV1 est dirigée vers L2.

Exemple de configuration

  1. Configurez les serveurs virtuels d’équilibrage de charge et de commutation de contenu
    • add lb vserver lbwrite -dbslb enabled
    • add lbvserver lbread MSSQL -dbslb enabled
    • add csvserver csv MSSQL 1.1.1.10 1433
  2. Configurez deux services de processus d’écoute, un pour chaque groupe de disponibilité, et cinq services S1 à S5 représentant les bases de données DB1 à DB4.
    • 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. Liez les services aux serveurs virtuels d’équilibrage de charge.
    • 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. Configurer les utilisateurs de base de données.
    • add db user nsdbuser1 -password dd260427edf
    • add db user nsdbuser2 -password ccd1234xyzw
  5. Configurez deux moniteurs, Monitor_L1 et Monitor_L2 pour chaque service de processus d’écoute, pour récupérer la liste des bases de données actives dans ce groupe de disponibilité. Ajoutez un moniteur, monitor1 pour récupérer la liste des bases de données de l’instance de serveur de base de données secondaire.
    • 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. Configurez les stratégies de lecture et d’écriture.
    • 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. Liez les stratégies au serveur virtuel de commutation de contenu.
    • bind csvserver csv -targetLBVserver lbwrite -policyName pol_write -priority 11
    • bind csvserver csv -targetLBVserver lbread -policyName pol_read -priority 12
  8. Liez les moniteurs aux services. Liez les moniteurs aux services L1 et L2 pour obtenir la liste des bases de données actives pour le groupe de disponibilité pour lequel il est l’écouteur. Liez les moniteurs à tous les services liés au serveur virtuel en lecture seule.
    • 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

Exemples de configuration pour le serveur virtuel MSSQL

Pour configurer un serveur virtuel d’équilibrage de charge pour l’équilibrage de charge spécifique à la base de données :

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

Pour configurer les services :

ajouter le service msservice1 5.5.5.5 MSSQL 1433

Pour configurer un moniteur pour récupérer les noms de toutes les bases de données actives hébergées sur un service à l’aide de la ligne de commande :

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

Exemples de configuration pour le serveur virtuel MySQL

Pour configurer un serveur virtuel d’équilibrage de charge pour l’équilibrage de charge spécifique à la base de données :

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

Pour configurer les services :

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

Pour configurer un moniteur pour récupérer les noms de toutes les bases de données actives hébergées sur un service à l’aide de la ligne de commande :

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