ADC

Caso de uso 4: Equilibrio de cargas específico de la base

Una granja de servidores de bases de datos debe tener una carga equilibrada no solo en función del estado de los servidores, sino también en función de la disponibilidad de la base de datos en cada servidor. Es posible que un servicio esté activo y que un dispositivo de equilibrio de carga muestre que está activo, pero es posible que la base de datos solicitada no esté disponible en ese servicio. La solicitud no se atiende si la consulta se reenvía a un servicio en el que la base de datos no está disponible. Por lo tanto, un dispositivo de equilibrio de carga debe conocer la disponibilidad de una base de datos en cada servicio. Además, al tomar una decisión sobre el equilibrio de carga, debe tener en cuenta únicamente los servicios en los que está disponible la base de datos.

Como ejemplo, considere que los servidores de bases de datos server1, server2 y server3 alojan las bases de datos mydatabase1 y mydatabase2. Si mydatabase1 deja de estar disponible en el servidor2, el dispositivo de equilibrio de carga debe estar al tanto de ese cambio de estado. Debe equilibrar la carga de las solicitudes de mydatabase1 solo en el servidor1 y el servidor3. Una vez que mydatabase1 esté disponible en el servidor2, el dispositivo de equilibrio de carga debe incluir el servidor2 en las decisiones de equilibrio de carga. Del mismo modo, si mydatabase2 deja de estar disponible en el servidor3, el dispositivo debe equilibrar la carga de las solicitudes de mydatabase2 únicamente en el servidor1 y el servidor2. 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 que están 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 balanceo de cargas específico de bases de datos solo se admite para los tipos de servicio MSSQL y MySQL. Este soporte 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 configurar lo siguiente:

  • Habilite la función de equilibrio de carga y configure un servidor virtual de equilibrio de carga de tipo MSSQL o MySQL.
  • Configure los servicios que alojan la base de datos y vincule 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, configura un monitor MSSQL-ECV o MYSQL-ECV y vincula 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 entender cómo funciona el equilibrio de carga específico de la base de datos.

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

Para el equilibrio de carga específico de las bases de datos, configure un monitor que consulte periódicamente a cada servidor de base de datos los nombres de todas las bases de datos activas que contiene. El dispositivo Citrix ADC almacena los resultados y actualiza periódicamente los registros en función de la información recuperada mediante la supervisión. Cuando un cliente consulta una base de datos determinada, 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.

Habilitar 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. Las entidades no funcionan hasta que se habilite la función.

Habilite el equilibrio de carga mediante la CLI

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

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

Habilite el equilibrio de carga mediante la interfaz gráfica de usuario

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

Configurar un servidor virtual de equilibrio de carga para el equilibrio de carga específico de bases de datos

Para configurar un servidor virtual para equilibrar la carga de las bases de datos 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 refiera los resultados de la sonda de supervisión enviada al servicio seleccionado antes de reenviar la consulta a ese servicio.

Configure un servidor virtual de equilibrio de carga para el equilibrio de carga específico de bases de datos mediante la CLI

En la línea de comandos, escriba el siguiente comando para configurar un servidor virtual de equilibrio de carga para el equilibrio de carga específico de una base de datos y comprobar la configuración:

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

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

Configurar servicios

Después de habilitar la función de equilibrio de carga, debe crear al menos un servicio para cada servidor de aplicaciones que vaya a incluirse 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 proporcionan.

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

Configuración de los usuarios de bases

En las bases de datos, una conexión siempre tiene estado, lo que significa que cuando se establece una conexión, se debe autenticar.

Configure el nombre de usuario y la contraseña de la base de datos en el 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. Los nombres de usuario y contraseñas de la base de datos añadidos al ADC se añaden al nsconfig archivo.

Nota

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

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

Agregar un usuario de base de datos mediante la CLI

En el símbolo del sistema, escriba:

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

Ejemplo:

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

Agregar un usuario de base de datos mediante la interfaz gráfica

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

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

Restablecer la contraseña de un usuario de base de datos mediante la CLI

En el símbolo del sistema, escriba:

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

Ejemplo:

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

Restablezca la contraseña de los usuarios de la base de datos mediante la interfaz gráfica de usuario

Vaya a Sistema > Administración de usuarios > Usuarios de basesde 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 eliminarlo del dispositivo Citrix ADC. Sin embargo, si el usuario sigue existiendo en el servidor de base de datos y usted lo elimina del dispositivo ADC, no se autenticará ninguna solicitud del cliente con este nombre de usuario. Por lo tanto, el nombre de usuario no se enruta al servidor de base de datos.

Eliminar un usuario de base de datos mediante la CLI

En el símbolo del sistema, escriba:

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

Ejemplo:

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

Eliminar un usuario de base de datos mediante la interfaz gráfica de usuario

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

Configurar un monitor para recuperar los nombres de las bases de datos activas

Puede crear un monitor para recuperar la lista de todas las bases de datos activas en una instancia de base de datos. El monitor inicia sesión en el servidor de base de datos mediante credenciales de usuario válidas y ejecuta una consulta SQL adecuada. La consulta SQL que debe utilizar depende de la implementación de SQL Server. Por ejemplo, en una configuración de duplicación de bases de datos de 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
<!--NeedCopy-->

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 configura el monitor para evaluar la respuesta a 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 INACTIVO. El dispositivo excluye el servicio de las decisiones de equilibrio de carga hasta que ya no se devuelva ningún error.

Nota

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

Configure un monitor para recuperar los nombres de todas las bases de datos activas alojadas en un servicio mediante la CLI

En la línea de comandos, escriba los siguientes comandos para recuperar los nombres de todas las bases de datos activas alojadas en un servicio y comprobar la configuración:

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

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

Configure un monitor para recuperar los nombres de todas las bases de datos activas alojadas en un servicio mediante la interfaz gráfica de usuario

  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 “seleccione el nombre de sys.databases donde state=0”) y la regla debe ser MSSQL.RES.TYPE.NE (ERROR). Para MYSQL-ECV, la consulta debe ser “mostrar bases de datos” y la 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 grupal de alta disponibilidad. Los servicios del S1 al S5 son los servicios del dispositivo ADC. De DB1 a DB4 son las bases de datos de los servidores representadas por los servicios S1 a S5. AV1 y AV2 son los grupos de disponibilidad. Cada grupo de disponibilidad contiene hasta una instancia del servidor de base de datos principal y hasta cuatro instancias del servidor de base de datos secundario. Un servicio, que representa los servidores del grupo de disponibilidad, puede ser principal para un grupo de disponibilidad y secundario para otro grupo de disponibilidad. Cada grupo de disponibilidad contiene diferentes bases de datos y un oyente, que es un servicio. Todas las solicitudes llegan al servicio de escucha que reside en la base de datos principal. AVI contiene las bases de datos DB1 y DB2. AV2 contiene las bases de datos DB3 y DB4. L1 y L2 son los oyentes de AV1 y AV2, respectivamente. S1 es el servicio principal para AV1 y S2 es el servicio principal para AV2.

SQL de implementación de HA

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 a los servidores del 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 READ para AV1 tiene un equilibrio de carga entre S4 y S5. S1 es el principal de AV1.
  2. Una consulta WRITE para AV1 se dirige a L1.
  3. Una consulta READ para AV2 tiene un equilibrio de 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. Configure servidores virtuales de equilibrio de carga y conmutación de contenido.
    • add lb vserver lbwrite -dbslb enabled
    • add lbvserver lbread MSSQL -dbslb enabled
    • 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 representen las bases de datos de DB1 a 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. Enlazar los servicios a los servidores virtuales de equilibrio de carga.
    • 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. Configure los 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, a fin de 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 de 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. Configure 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. Enlaza los monitores a los servicios. Vincule los monitores a los servicios L1 y L2 para obtener la lista de bases de datos activas del grupo de disponibilidad del que es el oyente. Enlaza los monitores a todos los servicios enlazados 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 basesde 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
<!--NeedCopy-->

Para configurar los servicios:

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

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

Para configurar los servicios:

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

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