Tutorial: Configuración de un grupo de disponibilidad Always On de tres nodos con HPE Serviceguard para Linux

Se aplica a: SQL Server - Linux

En este tutorial, se explica cómo configurar grupos de disponibilidad de SQL Server con HPE Serviceguard para Linux, ejecutándose en máquinas virtuales (VM) del entorno local o de Azure.

Consulte Clústeres de HPE Serviceguard para obtener información general sobre los clústeres de HPE Serviceguard.

Nota:

Microsoft admite el movimiento de datos, el grupo de disponibilidad y los componentes de SQL Server. Póngase en contacto con HPE para obtener soporte técnico relacionado con la documentación de administración de clústeres y cuórum de HPE Serviceguard.

Este tutorial consta de las tareas siguientes:

  • Instalación de SQL Server en las tres máquinas virtuales que formarán parte del grupo de disponibilidad
  • Instalación de HPE Serviceguard en las máquinas virtuales
  • Creación del clúster de HPE Serviceguard
  • Creación del equilibrador de carga en Azure Portal
  • Creación del grupo de disponibilidad y adición de una base de datos de ejemplo al grupo de disponibilidad
  • Implementación de la carga de trabajo de SQL Server en el grupo de disponibilidad a través del administrador de clústeres de Serviceguard
  • Realización de una conmutación por error automática y combinación del nodo con el clúster

Requisitos previos

  • En Azure, cree tres máquinas virtuales basadas en Linux. Para crear máquinas virtuales basadas en Linux en Azure, consulte Inicio rápido: Creación de una máquina virtual Linux en Azure Portal. Al implementar las máquinas virtuales, asegúrese de utilizar distribuciones de Linux compatibles con HPE Serviceguard. También puede implementar las máquinas virtuales en un entorno local si lo prefiere.

    Para obtener un ejemplo de una distribución compatible, vea HPE Serviceguard para Linux. Póngase en contacto con HPE para obtener información sobre la compatibilidad con los entornos de nube pública.

    Las instrucciones de este tutorial se validan con HPE Serviceguard para Linux. Hay una edición de prueba disponible para descargar desde HPE.

  • Archivos de base de datos SQL Server en el montaje de volumen lógico (LVM) para las tres máquinas virtuales. Vea Guía de inicio rápido para Serviceguard Linux (HPE).

  • Asegúrese de que tiene un entorno de ejecución OpenJDK de Java instalado en las máquinas virtuales. No se admite el SDK de Java de IBM.

Instalar SQL Server

En las tres máquinas virtuales, siga uno de los pasos siguientes en función de la distribución de Linux que elija para este tutorial, para instalar SQL Server y las herramientas.

Red Hat Enterprise Linux (RHEL)

SUSE Linux Enterprise Server (SLES)

Después de completar este paso, debe tener el servicio SQL Server y las herramientas instalados en las tres máquinas virtuales que participarán en el grupo de disponibilidad.

Instalación de HPE Serviceguard en las máquinas virtuales

En este paso, instale HPE Serviceguard para Linux en las tres máquinas virtuales. En la tabla siguiente se describe el rol que desempeña cada servidor en el clúster.

Número de VM Rol HPE Serviceguard Rol de réplica de grupo de disponibilidad de Microsoft SQL Server
1 Nodos de clúster de HPE Serviceguard Réplica principal
1 o más Nodo de clúster de HPE Serviceguard Réplica secundaria
1 Servidor de cuórum de HPE Serviceguard Réplica de solo configuración

Para instalar Serviceguard, use el método cminstaller. Las instrucciones específicas están disponibles en los vínculos siguientes:

Después de completar la instalación del clúster de HPE Serviceguard, puede habilitar el portal de administración de clústeres en el puerto TCP 5522 en el nodo de la réplica principal. En los pasos siguientes se agrega una regla al firewall para permitir 5522. El siguiente comando es para Red Hat Enterprise Linux (RHEL). Debe ejecutar comandos similares para otras distribuciones:

sudo firewall-cmd --zone=public --add-port=5522/tcp --permanent
sudo firewall-cmd --reload

Creación del clúster de HPE Serviceguard

Siga estas instrucciones para configurar y crear el clúster de HPE Serviceguard. En este paso también se configurará el servidor de cuórum.

  1. Configure el servidor de cuórum de Serviceguard en el tercer nodo. Consulte la sección Configure_QS.
  2. Configure y cree un clúster de Serviceguard en los otros dos nodos. Consulte la sección Configure_and_create_Cluster.

Nota

Puede omitir la instalación manual del clúster y cuórum de HPE Serviceguard; para ello, cuando cree la VM, agregue la extensión HPE Serviceguard para Linux (SGLX) del marketplace para VM de Azure.

Creación del grupo de disponibilidad y adición de una base de datos de ejemplo

En este paso, cree un grupo de disponibilidad con dos (o más) réplicas sincrónicas y una réplica de solo configuración, que proporciona protección de datos y también puede proporcionar alta disponibilidad. El diagrama siguiente representa esta arquitectura:

Diagrama que muestra la sincronización de datos de usuario y datos de configuración de réplica principal con réplica secundaria. Solo la réplica de configuración sincroniza solo los datos de configuración.

  1. Replicación sincrónica de datos de usuario en la réplica secundaria. También incluye los metadatos de configuración del grupo de disponibilidad.

  2. Replicación sincrónica de los metadatos de configuración del grupo de disponibilidad. No incluye datos de usuario.

Para obtener más información, vea Dos réplicas sincrónicas y una réplica de solo configuración.

Para crear el grupo de disponibilidad, siga estos pasos:

  1. Habilite grupos de disponibilidad y reinicie mssql-server en todas las máquinas virtuales, incluida la réplica de solo configuración.
  2. Habilitación de una sesión de eventos AlwaysOn_health (opcional)
  3. Cree un certificado en la máquina virtual principal.
  4. Crear el certificado en los servidores secundarios
  5. Cree los puntos de conexión de creación de reflejo de la base de datos en las réplicas.
  6. Cree el grupo de disponibilidad.
  7. Combine las réplicas secundarias.
  8. Agregar una base de datos al grupo de disponibilidad

Habilitación de grupos de disponibilidad y reinicio de mssql-server

Habilite los grupos de disponibilidad en todos los nodos que hospedan una instancia de SQL Server. Después, reinicie mssql-server. Ejecute el script siguiente en los tres nodos:

sudo /opt/mssql/bin/mssql-conf
set hadr.hadrenabled 1 sudo systemctl restart mssql-server

Habilitación de una sesión de eventos AlwaysOn_health (opcional)

Opcionalmente, habilite los eventos extendidos de los grupos de disponibilidad Always On para facilitar el diagnóstico de la causa raíz cuando solucione los problemas de un grupo de disponibilidad. Ejecute el comando siguiente en todas las instancias de SQL Server:

ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO

Creación de un certificado en la máquina virtual principal

El script de Transact-SQL siguiente crea una clave maestra y un certificado. Después, realiza una copia de seguridad del certificado y protege el archivo con una clave privada. Actualice el script con contraseñas seguras. Conéctese a la instancia de SQL Server principal y ejecute el siguiente script de Transact-SQL:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Master_Key_Password>';

CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';

BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY
    ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
      ENCRYPTION BY PASSWORD = '<Private_Key_Password>' );

En este momento, la réplica principal de SQL Server tiene un certificado en /var/opt/mssql/data/dbm_certificate.cer y una clave privada en var/opt/mssql/data/dbm_certificate.pvk. Copie estos dos archivos en la misma ubicación en todos los servidores que hospedan las réplicas de disponibilidad. Utilice el usuario de mssql o conceda permiso al usuario de mssql para tener acceso a estos archivos.

Por ejemplo, en el servidor de origen, el siguiente comando copia los archivos en el equipo de destino. Reemplace los valores node2 por el nombre del host que ejecuta la instancia de SQL Server secundaria. Copie también el certificado en la réplica de solo configuración y ejecute los comandos siguientes en ese nodo.

cd /var/opt/mssql/data
scp dbm_certificate.* root@<node2>:/var/opt/mssql/data/

Ahora, en las máquinas virtuales secundarias que ejecutan la instancia secundaria y la réplica de solo configuración de SQL Server, ejecute los comandos siguientes para que el usuario mssql pueda poseer el certificado copiado:

cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*

Crear el certificado en los servidores secundarios

El script de Transact-SQL siguiente crea una clave maestra y un certificado a partir de la copia de seguridad creada en la réplica principal de SQL Server. Actualice el script con contraseñas seguras. La contraseña de descifrado es la misma que ha usado para crear el archivo .pvk en un paso anterior. Para crear el certificado, ejecute el script siguiente en todos los servidores secundarios, excepto en la réplica de solo configuración:

CREATE MASTER KEY ENCRYPTION BY PASSWORD =
'<Master_Key_Password>';

CREATE CERTIFICATE dbm_certificate FROM FILE =
'/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
DECRYPTION BY PASSWORD = '<Private_Key_Password>' );

Creación de los puntos de conexión de creación de reflejo de la base de datos en las réplicas

En la réplica principal y en la secundaria, ejecute los comandos siguientes para crear los puntos de conexión de creación de reflejo de la base de datos:

CREATE ENDPOINT [hadr_endpoint] AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING
        (
        ROLE = WITNESS,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );

ALTER ENDPOINT [hadr_endpoint] STATE = STARTED;

Nota:

5022 es el puerto estándar que se usa para el punto de conexión de creación de reflejo de la base de datos, pero puede cambiarlo por cualquier puerto disponible.

En la réplica de solo configuración, cree el punto de conexión de creación de reflejo de la base de datos con el comando siguiente; tenga en cuenta que aquí el valor Rol se establece en WITNESS, lo que se necesita para la réplica de solo configuración.

CREATE ENDPOINT [hadr_endpoint] AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (
        ROLE = WITNESS,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );

ALTER ENDPOINT [hadr_endpoint] STATE = STARTED;

Crear grupo de disponibilidad

En la instancia de la réplica principal, ejecute los comandos siguientes. Estos comandos crean un grupo de disponibilidad denominado ag1 que tiene un elemento cluster_type externo y concede el permiso CREATE DATABASE al grupo de disponibilidad.

Antes de ejecutar los scripts siguientes, reemplace los marcadores de posición <node1>, <node2> y <node3> (réplica de solo configuración) por el nombre de las máquinas virtuales que ha creado en los pasos anteriores.

CREATE AVAILABILITY GROUP [ag1]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR REPLICA ON
    N'<node1>' WITH (
        ENDPOINT_URL = N'tcp://<node1>:<5022>',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),

    N'<node2>' WITH (
        ENDPOINT_URL = N'tcp://<node2>:\<5022>',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),

    N'<node3>' WITH (
        ENDPOINT_URL = N'tcp://<node3>:<5022>',
        AVAILABILITY_MODE = CONFIGURATION_ONLY
        );

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Combinación de las réplicas secundarias

Ejecute los comandos siguientes en todas las réplicas secundarias. Estos comandos combinan las réplicas secundarias al grupo de disponibilidad ag1 con la réplica principal y proporcionan acceso de creación de base de datos al grupo de disponibilidad ag1.

ALTER AVAILABILITY GROUP [ag1]
JOIN WITH (CLUSTER_TYPE = EXTERNAL);
GO
ALTER AVAILABILITY GROUP [ag1]
GRANT CREATE ANY DATABASE;
GO

Agregar una base de datos al grupo de disponibilidad

Conéctese a la réplica principal y ejecute los comandos T-SQL siguientes para:

  1. Crear una base de datos de ejemplo denominada db1 que se agregará al grupo de disponibilidad.
  2. Establecer el modelo de recuperación de la base de datos en Completa. Todas las bases de datos de un grupo de disponibilidad necesitan el modelo de recuperación completa.
  3. Realice una copia de seguridad de la base de datos. Una base de datos necesita al menos una copia de seguridad completa antes de poder agregarla a un grupo de disponibilidad.
-- creates a database named db1
CREATE DATABASE [db1];
GO

-- set the database in full recovery model
ALTER DATABASE [db1] SET RECOVERY FULL;
GO

-- backs up the database to disk
BACKUP DATABASE [db1]
TO DISK = N'/var/opt/mssql/data/db1.bak';
GO

-- adds the database db1 to the AG
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];
GO

Después de completar correctamente los pasos anteriores, puede ver que se ha creado un grupo de disponibilidad ag1 y las tres máquinas virtuales agregadas como réplica con una réplica principal, una réplica secundaria y una réplica de solo configuración. ag1 contiene una base de datos.

Implementación de la carga de trabajo del grupo de disponibilidad de SQL Server (Administrador de clústeres de HPE)

En HPE Serviceguard, implemente la carga de trabajo de SQL Server en el grupo de disponibilidad a través de la interfaz de usuario del administrador de clústeres de Serviceguard.

Implemente la carga de trabajo del grupo de disponibilidad y habilite la alta disponibilidad (HA) y la recuperación ante desastres (DR) a través del clúster de Serviceguard mediante la interfaz gráfica de usuario del administrador de Serviceguard. Consulte la sección Protección de Microsoft SQL Server en Linux para grupos de disponibilidad Always On.

Creación del equilibrador de carga en Azure Portal

En el caso de las implementaciones en la nube de Azure, HPE Serviceguard para Linux requiere un equilibrador de carga para habilitar las conexiones de cliente con la réplica principal para sustituir las direcciones IP tradicionales.

  1. En Azure Portal, abra el grupo de recursos que contiene los nodos de clúster o máquinas virtuales de Serviceguard.

  2. En el grupo de recursos, seleccione Agregar.

  3. Busque "equilibrador de carga" y, a continuación, en los resultados de la búsqueda, seleccione la instancia del equilibrador de carga publicada por Microsoft.

  4. En el panel Equilibrador de carga, seleccione Crear.

  5. Configure el equilibrador de carga de la siguiente manera:

    Configuración Value
    Nombre Nombre del equilibrador de carga. Por ejemplo, SQLAvailabilityGroupLB.
    Tipo Interno
    SKU Básico o Estándar
    Red virtual Red virtual usada para las réplicas de máquina virtual
    Subred Subred en la que se hospedan instancias de SQL Server
    Asignación de dirección IP estática
    Dirección IP privada Creación de una dirección IP privada dentro de la subred
    Suscripción Elección de la suscripción de interés
    Grupo de recursos Elección del grupo de recursos de interés
    Ubicación Selección de la misma ubicación que los nodos SQL

Configuración del grupo back-end

El grupo de back-end son las direcciones de las dos instancias en las que está configurado el clúster de Serviceguard.

  1. En el grupo de recursos, seleccione el equilibrador de carga que ha creado.
  2. Vaya a Configuración > Grupos de back-end y seleccione Agregar para crear un grupo de direcciones de back-end.
  3. En Agregar grupo de back-end, en Nombre, especifique un nombre para el grupo de back-end.
  4. En Asociado a, seleccione Máquina virtual.
  5. Seleccione cada una de las máquinas virtuales del entorno y asocie la dirección IP adecuada a cada selección.
  6. Seleccione Agregar.

Elaboración de un sondeo

El sondeo define cómo Azure comprueba cuál de los nodos del clúster de Serviceguard es la réplica principal. Azure analiza el servició con arreglo a la dirección IP de un puerto que estableció al crear el sondeo.

  1. En el panel Configuración del equilibrador de carga, seleccione Sondeos de estado.

  2. En el panel Sondeos de estado , seleccione Agregar.

  3. Utilice los valores siguientes para configurar el sondeo.

    Configuración Value
    Nombre Nombre que representa el sondeo. Por ejemplo, SQLAGPrimaryReplicaProbe.
    Protocolo TCP
    Puerto Puede usar cualquier puerto que esté disponible. Por ejemplo, 59999.
    Intervalo 5
    Umbral incorrecto 2
  4. Seleccione Aceptar.

  5. Inicie sesión en todas las máquinas virtuales y abra el puerto de sondeo con los siguientes comandos:

    sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent
    sudo firewall-cmd --reload
    

Azure crea el sondeo y, a continuación, lo usa para probar el nodo Serviceguard en el que se ejecuta la instancia de la réplica principal del grupo de disponibilidad. Recuerde el puerto configurado (59999), que es necesario para implementar el grupo de disponibilidad en el clúster de Serviceguard.

Configuración de las reglas de equilibrio de carga

Las reglas de equilibrio de carga configuran cómo el equilibrador de carga enruta el tráfico al nodo Serviceguard, que es la réplica principal del clúster. Para este equilibrador de carga, habilite Direct Server Return, ya que solo uno de los nodos del clúster de Serviceguard puede ser una réplica principal al mismo tiempo.

  1. En el panel Configuración del equilibrador de carga, seleccione Reglas de equilibrio de carga.

  2. En el panel Reglas de equilibrio de carga, seleccione Agregar.

  3. Configure la regla de equilibrio de carga con los siguientes valores:

    Configuración Value
    Nombre Nombre que representa las reglas de equilibrio de carga. Por ejemplo, SQLAGPrimaryReplicaListener.
    Protocolo TCP
    Puerto 1433
    Puerto back-end 1433. Este valor se ignora porque esta regla utiliza IP flotante.
    Sondeo Utilice el nombre del sondeo que creó para este equilibrador de carga.
    Persistencia de la sesión None
    Tiempo de espera de inactividad (minutos) 4
    IP flotante habilitado
  4. Seleccione Aceptar.

  5. Azure configura la regla de equilibrio de carga. Ahora, el equilibrador de carga está configurado para enrutar el tráfico al nodo de Serviceguard que es la instancia de réplica principal del clúster.

Tome nota de la dirección IP de front-end del equilibrador de carga "LbReadWriteIP", que es necesaria para implementar el grupo de disponibilidad en el clúster de Serviceguard.

En este punto, el grupo de recursos dispone de un equilibrador de carga que se conecta con todos los nodos de Serviceguard. El equilibrador de carga también contiene una dirección IP para que los clientes se conecten a la instancia de réplica principal del clúster, de modo que cualquier máquina que sea una réplica principal pueda responder a las solicitudes del grupo de disponibilidad.

Realización de la conmutación automática por error y combinación del nodo con el clúster

Para la prueba de conmutación automática por error, puede desactivar la réplica principal (desconectarla), lo cual replicará la falta de disponibilidad repentina del nodo principal. Éste es el comportamiento esperado:

  1. El administrador de clústeres promueve a principal una de las réplicas secundarias del grupo de disponibilidad.
  2. La réplica principal con error se combina automáticamente con el clúster después de que se realice la copia de seguridad. El administrador de clústeres la promueve a una réplica secundaria.

En el caso de HPE Serviceguard, consulte la sección Prueba de la configuración para la preparación de la conmutación por error.