Caso de uso 4: Equilibrio de carga específico de la base de datos

Una granja de servidores de base de datos debe equilibrarse la carga no solo sobre la base de los estados de los servidores, sino también sobre la base de la disponibilidad de la base de datos en cada servidor. Un servicio puede estar activo y un dispositivo de equilibrio de carga puede mostrarlo como en estado UP, pero la base de datos solicitada puede no estar disponible en ese servicio. Si se reenvía una consulta a un servicio en el que la base de datos no está disponible, la solicitud no se sirve. Por lo tanto, un dispositivo de equilibrio de carga debe ser consciente de la disponibilidad de una base de datos en cada servicio y, al tomar una decisión de equilibrio de carga, debe tener en cuenta únicamente aquellos servicios en los que está disponible la base de datos.

Como ejemplo, considere que los servidores de base de datos server1, server2 y server3 hospedan bases de datos mydatabase1 y mydatabase2. Si mydatabase1 deja de estar disponible en server2, el dispositivo de equilibrio de carga debe tener en cuenta ese cambio en el estado, y debe recibir solicitudes de equilibrio de carga para mydatabase1 solo en server1 y server3. Después de que mydatabase1 esté disponible en server2, el dispositivo de equilibrio de carga debe incluir server2 en las decisiones de equilibrio de carga. Del mismo modo, si mydatabase2 deja de estar disponible en server3, el dispositivo debe equilibrar las solicitudes de carga para mydatabase2 solo en server1 y server2, y debe incluir server3 en sus decisiones de equilibrio de carga solo cuando mydatabase2 esté disponible. Este comportamiento de equilibrio de carga debe ser coherente en todas las bases de datos alojadas en la granja de servidores.

El dispositivo Citrix ADC implementa este comportamiento recuperando una lista de todas las bases de datos activas en un servicio. Para recuperar la lista de bases de datos activas, el dispositivo utiliza un monitor configurado con una consulta SQL adecuada. Si la base de datos solicitada no está disponible en un servicio, el dispositivo excluye el servicio de las decisiones de equilibrio de carga hasta que esté disponible. Este comportamiento garantiza un servicio ininterrumpido a los clientes.

Nota

El equilibrio de carga específico de la base de datos se admite actualmente solo para los tipos de servicio MSSQL y MySQL. Esta compatibilidad también está disponible para la implementación de alta disponibilidad de Microsoft SQL Server 2012.

Para configurar el equilibrio de carga específico de la base de datos, debe habilitar la función de equilibrio de carga, configurar un servidor virtual de equilibrio de carga de tipo MSSQL o MySQL, configurar los servicios que alojan la base de datos y enlazar los servicios al servidor virtual. El monitor necesita credenciales de usuario válidas para iniciar sesión en el servidor de base de datos, por lo que debe configurar una cuenta de usuario de base de datos en cada uno de los servidores y, a continuación, agregar la cuenta de usuario al dispositivo Citrix ADC. A continuación, configure un monitor MSSQL-ECV o MYSQL-ECV y vincule el monitor a cada servicio. Por último, debe probar la configuración para asegurarse de que funciona según lo previsto. Antes de realizar estas tareas de configuración, asegúrese de comprender cómo funciona el equilibrio de carga específico de la base de datos.

Cómo funciona el equilibrio de carga específico de la base de datos

Para el equilibrio de carga específico de la base de datos, configure un monitor que consulta periódicamente a cada servidor de base de datos los nombres de todas las bases de datos activas en él. El dispositivo Citrix ADC almacena los resultados y actualiza periódicamente los registros basándose en la información recuperada mediante la supervisión. Cuando un cliente consulta una base de datos concreta, el dispositivo utiliza el método de equilibrio de carga configurado para seleccionar un servicio y, a continuación, comprueba sus registros para determinar si la base de datos está disponible en ese servicio. Si los registros indican que la base de datos no está disponible, utiliza el método de equilibrio de carga configurado para seleccionar el siguiente servicio disponible y, a continuación, repite la comprobación. El dispositivo reenvía la consulta al primer servicio disponible en el que está activa la base de datos.

Activación del equilibrio de carga

Puede configurar entidades de equilibrio de carga como servicios y servidores virtuales cuando la función de equilibrio de carga está inhabilitada, pero no funcionarán hasta que la habilite.

Para habilitar el equilibrio de carga mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba el siguiente comando para habilitar el equilibrio de carga y verificar la configuración:

enable ns feature LB

show ns feature

Ejemplo:

> 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

Para habilitar el equilibrio de carga mediante la utilidad de configuración

Vaya a Sistema > Configuración y, en Configurar funciones básicas, seleccione Equilibrio de carga.

Configuración de un servidor virtual de equilibrio de carga para equilibrio de carga específico de base de datos

Para configurar un servidor virtual para que las bases de datos de equilibrio de carga en función de la disponibilidad, habilite el parámetro de equilibrio de carga específico de la base de datos en el servidor virtual. Al habilitar el parámetro se modifica la lógica de equilibrio de carga para que el dispositivo Citrix ADC remita los resultados del sondeo de supervisión enviado al servicio seleccionado, antes de reenviar la consulta a ese servicio.

Para configurar un servidor virtual de equilibrio de carga para el equilibrio de carga específico de la base de datos

En el símbolo del sistema, escriba el siguiente comando para configurar un servidor virtual de equilibrio de carga para el equilibrio de carga específico de la base de datos y compruebe la configuración:

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

show lb vserver <name>

Configuración de servicios

Después de habilitar la función de equilibrio de carga, debe crear al menos un servicio para cada servidor de aplicaciones que se va a incluir en la configuración de equilibrio de carga. Los servicios que configura proporcionan las conexiones entre el dispositivo Citrix ADC y los servidores con equilibrio de carga. Cada servicio tiene un nombre y especifica una dirección IP, un puerto y el tipo de datos que se sirven.

Si crea un servicio sin crear primero un objeto de servidor, la dirección IP del servicio es también el nombre del servidor que hospeda el servicio. Si prefiere identificar servidores por nombre en lugar de por dirección IP, puede crear objetos de servidor y, a continuación, especificar el nombre de un servidor en lugar de su dirección IP al crear un servicio.

Configuración de Usuarios de Base de Datos

En las bases de datos, una conexión siempre tiene estado, lo que significa que tan pronto como se establece una conexión, debe autenticarse.

Debe configurar el nombre de usuario y la contraseña de la base de datos en Citrix ADC. Por ejemplo, si tiene un usuario John configurado en la base de datos, también debe configurar el usuario John en el ADC. Cuando agrega los nombres de usuario y contraseñas de la base de datos en el ADC, éstos se agregan al archivo nsconfig.

Nota

Los nombres distinguen entre mayúsculas y minúsculas.

El ADC utiliza estas credenciales de usuario para autenticar los clientes y, a continuación, autenticar las conexiones del servidor con los servidores de base de datos.

Para agregar un usuario de base de datos mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba:

add db user <username> - password <password>

Ejemplo:

add db user nsdbuser -password dd260427edf

Para agregar un usuario de base de datos mediante la utilidad de configuración

Vaya a Sistema > Administración de usuarios > Usuarios de base de datos y configure un usuario de base de datos.

Si ha cambiado la contraseña del usuario de base de datos en el servidor de base de datos, debe restablecer la contraseña del usuario correspondiente configurado en el dispositivo Citrix ADC.

Para restablecer la contraseña de un usuario de base de datos mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba:

set db user <username> -password <password>

Ejemplo:

set db user nsdbuser -password dd260538abs

Para restablecer la contraseña de los usuarios de la base de datos mediante la utilidad de configuración

Vaya a Sistema > Administración de usuarios > Usuarios de basede datos, seleccione un usuario e introduzca nuevos valores para la contraseña.

Si ya no existe un usuario de base de datos en el servidor de base de datos, puede quitarlo del dispositivo Citrix ADC. Sin embargo, si el usuario continúa existiendo en el servidor de base de datos y lo quita del dispositivo ADC, cualquier solicitud del cliente con este nombre de usuario no se autentica y, por lo tanto, no se enruta al servidor de base de datos.

Para eliminar un usuario de base de datos mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba:

rm db user <username>

Ejemplo:

rm db user nsdbuser

Para eliminar un usuario de base de datos mediante la utilidad de configuración

Vaya a Sistema > Administración de usuarios > Usuarios de basede datos, seleccione un usuario y haga clic en Eliminar.

Configuración de un monitor para recuperar los nombres de bases de datos activas

Para recuperar una lista de todas las bases de datos activas en una instancia de base de datos, cree un monitor que inicie sesión en el servidor de base de datos mediante credenciales de usuario válidas y ejecute una consulta SQL adecuada. La consulta SQL que necesita usar depende de la implementación de SQL Server. Por ejemplo, en una instalación de creación de reflejo de base de datos MSSQL, puede utilizar la siguiente consulta para recuperar una lista de bases de datos activas disponibles en una instancia de servidor.

select name from sys.databases where state=0

En una configuración de base de datos MySQL puede utilizar las siguientes consultas para recuperar una lista de bases de datos activas disponibles en una instancia de servidor.

mostrar bases de datos:

También puede configurar el monitor para evaluar la respuesta para una condición de error y para almacenar los resultados si no hay ningún error. Si la respuesta contiene un error, el monitor marca el servicio como DOWN y el dispositivo excluye el servicio de las decisiones de equilibrio de carga hasta que ya no se devuelve un error.

Nota

La función de equilibrio de carga específica de la base de datos solo es compatible con los tipos de servicio MSSQL y MySQL. Por lo tanto, el tipo de monitor debe ser MSSQL-ECV o MYSQL-ECV.

Para configurar un monitor para recuperar los nombres de todas las bases de datos activas alojadas en un servicio mediante la línea de comandos

En el símbolo del sistema, escriba los siguientes comandos para recuperar los nombres de todas las bases de datos activas alojadas en un servicio y verificar la configuración:

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

show lb monitor <monitorName>

Para configurar un monitor para recuperar los nombres de todas las bases de datos activas alojadas en un servicio mediante la utilidad de configuración

  1. Vaya a Administración del tráfico > Equilibrio de carga > Monitores y configure un monitor de tipo MSSQL-ECV o MYSQL-ECV.
  2. En Parámetros especiales, especifique un nombre de usuario, una consulta y una regla Por ejemplo, para MSSQL-ECV, la consulta debe ser “select name from sys.databases where state=0”) y una regla debe ser MSSQL.RES.TYPE.NE (ERROR). Para MSSQL-ECV, la consulta debe ser “show databases” y una regla debe ser MYSQL.RES.TYPE.NE (ERROR).

Soporte de implementación de grupos de disponibilidad para MSSQL

Considere el siguiente caso en el que se configura el equilibrio de carga específico de la base de datos en una implementación de grupo de alta disponibilidad. S1 a S5 son los servicios del dispositivo ADC. DB1 a DB4 son las bases de datos en los servidores representados por los servicios S1 a S5. AV1 y AV2 son los grupos de disponibilidad. Cada grupo de disponibilidad contiene hasta una instancia de servidor de base de datos principal y hasta cuatro instancias de servidor de base de datos secundario. Un servicio, que representa los servidores del grupo de disponibilidad, puede ser primario para un grupo de disponibilidad y secundario para otro grupo de disponibilidad. Cada grupo de disponibilidad contiene diferentes bases de datos y un listener, que es un servicio. Todas las solicitudes llegan al servicio de escucha que reside en la base de datos principal. AVI contiene bases de datos DB1 y DB2. AV2 contiene bases de datos DB3 y DB4. L1 y L2 son los oyentes en AV1 y AV2 respectivamente. S1 es el servicio principal para AV1 y S2 es el servicio principal para AV2.

Imagen localizada

Servicio Lista de bases de datos activas en el servicio
S1 DB1, DB2, DB3, DB4
S2 DB3, DB4
S3 DB3, DB4
S4 DB1, DB2
S5 DB1, DB2
Grupo de disponibilidad Bases de datos Servicios que representan los servidores en el grupo de disponibilidad
AV1 DB1, DB2 S1, S4, S5
AV2 DB3, DB4 S1, S2, S3

Las consultas fluyen de la siguiente manera:

  1. Una consulta de lectura para AV1 se equilibra la carga entre S4 y S5. S1 es el principal para AV1.
  2. Una consulta WRITE para AV1 se dirige a L1.
  3. Una consulta de lectura para AV2 se equilibra la carga entre S1 y S3. S2 es el principal para AV2.
  4. Una consulta WRITE para AV1 se dirige a L2.

Configuración de ejemplo

  1. Configurar servidores virtuales de equilibrio de carga y conmutación de contenido.
    • add lb vserver lbwrite -dbslb habilitado
    • add lbvserver lbread MSSQL -dbslb habilitado
    • add csvserver csv MSSQL 1.1.1.10 1433
  2. Configure dos servicios de escucha, uno para cada grupo de disponibilidad, y cinco servicios S1 a S5 que representan bases de datos DB1 a DB4.
    • agregar servicio L1 1.1.1.11 MSSQL 1433
    • agregar servicio L2 1.1.1.12 MSSQL 1433
    • agregar servicio s1 1.1.1.13 MSSQL 1433
    • agregar servicio s2 1.1.1.14 MSSQL 1433
    • agregar servicio s3 1.1.1.15 MSSQL 1433
    • agregar servicio s4 1.1.1.16 MSSQL 1433
    • agregar servicio s5 1.1.1.17 MSSQL 1433
  3. Enlazar los servicios a los servidores virtuales de equilibrio de carga.
    • enlazar lbvserver lbwrite L1
    • enlazar lbvserver lbwrite L2
    • bind lbvserver lbread s1
    • bind lbvserver lbread s2
    • bind lbvserver lbread s3
    • bind lbvserver lbread s4
    • bind lbvserver lbread s5
  4. Configurar usuarios de bases de datos.
    • add db user nsdbuser1 -password dd260427edf
    • add db user nsdbuser2 -password ccd1234xyzw
  5. Configure dos monitores, Monitor_L1 y Monitor_L2 para cada servicio de escucha, para recuperar la lista de bases de datos activas en ese grupo de disponibilidad. Agregue un monitor, monitor1 para recuperar la lista de bases de datos para la instancia del servidor de base de datos secundario.
    • 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. Configurar directivas de lectura y escritura.
    • 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. Enlazar las directivas al servidor virtual de conmutación de contenido.
    • bind csvserver csv -targetLBVserver lbwrite -policyName pol_write -priority 11
    • bind csvserver csv -targetLBVserver lbread -policyName pol_read -priority 12
  8. Enlazar monitores a los servicios. Enlazar monitores a los servicios L1 y L2 para obtener la lista de bases de datos activas para el grupo de disponibilidad para el que es el listener. Enlazar monitores a todos los servicios vinculados al servidor virtual de solo lectura.
    • 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

Ejemplos de configuración para el servidor virtual MSSQL

Para configurar un servidor virtual de equilibrio de carga para el equilibrio de carga específico de la base de datos:

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

Para configurar servicios:

**add service **msservice1 5.5.5.5 MSSQL 1433

Para configurar un monitor para recuperar los nombres de todas las bases de datos activas alojadas en un servicio mediante la línea de comandos:

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

Ejemplos de configuración para el servidor virtual MySQL

Para configurar un servidor virtual de equilibrio de carga para el equilibrio de carga específico de la base de datos:

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

Para configurar servicios:

add service msservice1 5.5.5.5 MYSQL 3306

Para configurar un monitor para recuperar los nombres de todas las bases de datos activas alojadas en un servicio mediante la línea de comandos:

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