ADC

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

La charge d’un parc de serveurs de base de données doit être équilibrée non seulement en fonction de l’état des serveurs, mais également en fonction de la disponibilité de la base de données sur chaque serveur. Un service peut être actif et un dispositif d’équilibrage de charge peut indiquer qu’il est à l’état actif, mais la base de données demandée n’est peut-être pas disponible sur ce service. La demande n’est pas traitée si une requête est transmise à un service pour lequel la base de données n’est pas disponible. Par conséquent, un dispositif 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 doit uniquement prendre en compte les services sur lesquels la base de données est disponible.

À titre d’exemple, considérez que les serveurs de base de données serveur1, serveur2 et serveur3 hébergent les bases de données mydatabase1 et mydatabase2. Si mydatabase1 devient indisponible sur le serveur2, le dispositif d’équilibrage de charge doit être conscient de ce changement d’état. Il doit équilibrer la charge des demandes pour mydatabase1 uniquement sur le serveur1 et le serveur3. Une fois que mydatabase1 est disponible sur le serveur 2, le dispositif d’équilibrage de charge doit inclure le serveur 2 dans les décisions d’équilibrage de charge. De même, si mydatabase2 devient indisponible sur le serveur3, l’appareil doit équilibrer la charge des demandes pour mydatabase2 uniquement sur le serveur1 et le serveur2. Il doit inclure le serveur 3 dans ses décisions d’équilibrage de charge uniquement lorsque mydatabase2 sera disponible. Ce comportement d’équilibrage de charge doit être cohérent sur toutes les bases de données hébergées sur la batterie de serveurs.

L’appliance NetScaler met en œuvre ce comportement en récupérant la 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 soit disponible. Ce comportement garantit 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 services MS SQL et MySQL. Cette prise en charge est également disponible pour MS SQL Server configuré dans les groupes de haute disponibilité Always On. Pour plus d’informations, voir Versions de base de données, protocoles et méthodes d’authentification pris en charge.

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

  • Activez la fonctionnalité 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 au serveur virtuel. Le moniteur a besoin d’informations d’identification utilisateur valides pour se connecter au serveur de base de données. Vous devez donc configurer un compte utilisateur de base de données sur chacun des serveurs, puis ajouter le compte utilisateur à l’appliance NetScaler.
  • Ensuite, vous configurez un moniteur MSSQL-ECV ou MYSQL-ECV et vous 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.

Comment fonctionne l’équilibrage de charge spécifique à la base de données

Pour un équilibrage de charge spécifique à une base de données, vous configurez un moniteur qui interroge régulièrement chaque serveur de base de données pour connaître les noms de toutes les bases de données actives qu’il contient. L’appliance NetScaler stocke les résultats et met régulièrement à jour les enregistrements en fonction des informations extraites lors de 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 prochain service disponible, 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 des services et des serveurs virtuels lorsque la fonctionnalité d’équilibrage de charge est désactivée. Les entités ne fonctionnent pas tant que vous n’activez pas la fonctionnalité.

Activer l’équilibrage de charge à l’aide de l’interface de ligne de commande

À l’invite de commande, 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, puis dans Configurer les fonctionnalités de base, sélectionnez Équilibrage de charge.

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

Pour configurer un serveur virtuel afin d’é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 afin que l’appliance NetScaler renvoie les résultats de la sonde de surveillance envoyée au service sélectionné, avant de transmettre la requête à ce service.

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

À l’invite de commandes, tapez la commande suivante pour configurer un serveur virtuel d’équilibrage de charge pour un équilibrage de charge spécifique à la base de données et vérifier 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 à inclure dans votre configuration d’équilibrage de charge. Les services que vous configurez fournissent les connexions entre l’appliance NetScaler et les serveurs d’équilibrage de charge. Chaque service possède 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 au préalable un objet serveur, 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 leur nom plutôt que par leur adresse IP, vous pouvez créer des objets serveur, puis spécifier le nom d’un serveur plutôt que son adresse IP lorsque vous créez un service.

Configuration des utilisateurs de la base

Dans les bases de données, une connexion est toujours active, 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 NetScaler. Par exemple, si vous avez configuré un utilisateur John sur la base de données, vous devez également configurer l’utilisateur John sur l’ADC. Les noms d’utilisateur et les mots de passe de base de données ajoutés à l’ADC sont ajoutés au nsconfig fichier.

Remarque

Les noms distinguent les majuscules et minuscules.

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

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

À 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, puis 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 NetScaler.

Réinitialisez le mot de passe d’un utilisateur de base de données à l’aide de l’interface de ligne de commande

À l’invite de commandes, tapez

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

Exemple :

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

Réinitialisez le mot de passe des utilisateurs de base de données à l’aide de l’interface graphique

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

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

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

À 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 basede 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 se connecte au 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 bases de données MSSQL, vous pouvez utiliser la requête suivante pour récupérer la liste des 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 la liste des 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 étant hors service. L’appliance exclut le service des décisions d’équilibrage de charge jusqu’à ce qu’aucune erreur ne soit renvoyée.

Remarque

La fonctionnalité 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 > Moniteurs 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 la règle doit être MSSQL.RES.TYPE.NE (ERROR). Pour MYSQL-ECV, la requête doit être « Afficher les bases de données » et la règle doit être MYSQL.RES.TYPE.NE (ERROR).

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

Envisagez le scénario suivant dans lequel un équilibrage de charge spécifique à la base de données est configuré dans un déploiement de groupe de haute disponibilité. S1 à S5 sont les services de l’appliance ADC. DB1 à DB4 sont 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 principal et jusqu’à quatre instances de serveur de base de données secondaire. 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 les bases de données DB1 et DB2. AV2 contient les bases de données DB3 et DB4. L1 et L2 sont les auditeurs d’AV1 et AV2 respectivement. S1 est le service principal pour AV1 et S2 est le service principal pour AV2.

SQL de 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 se déroulent comme suit :

  1. Une requête READ pour AV1 est équilibrée en 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 en 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 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 d’écoute, afin de 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 pour 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é dont ils sont 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 un équilibrage de charge spécifique à une base de données, procédez commesuit :

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 afin de 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 un équilibrage de charge spécifique à une base de données, procédez commesuit :

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