Administrar una instancia de clúster de conmutación por error en Linux

Se aplica a:SQL Server en Linux

En este artículo se explica cómo usar una instancia de clúster de conmutación por error (FCI) de SQL Server en Linux. Para crear una FCI de SQL Server en Linux, vea Configurar una instancia de clúster de conmutación por error en Linux (RHEL).

Descripción de la arquitectura

La capa de clúster se basa en el complemento Red Hat Enterprise Linux (RHEL) HA construido sobre Pacemaker. Corosync y Pacemaker coordinan las comunicaciones del clúster y la administración de recursos. La instancia de SQL Server está activa en un nodo a la vez.

En el siguiente diagrama se ilustran los componentes de un clúster de Linux con SQL Server.

Diagrama de un clúster de conmutación por error de SQL Server con disco compartido en Linux.

Para más información sobre la configuración del clúster, opciones de agentes de recursos y gestión, visite la documentación de referencia RHEL.

Failover

La conmutación por error de las FCI es similar a un clúster de conmutación por error de Windows Server (WSFC). Si el nodo de clúster que hospeda la FCI experimenta algún tipo de error, la FCI debe conmutar por error automáticamente en otro nodo. A diferencia de un WSFC, no hay forma de establecer los propietarios preferidos, por lo que Pacemaker elige el nodo que será el nuevo host de la FCI.

A veces puede que quieras realizar manualmente una conmutación por error de la FCI a otro nodo. El proceso no es el mismo que con las FCI en un WSFC. En un WSFC, conmuta por error los recursos en el nivel de rol. En Pacemaker, eliges un recurso para mover, y si todas las restricciones son correctas, todo lo demás también se mueve.

La forma de hacer failover depende de la distribución de Linux. Sigue las instrucciones de tu distribución Linux.

Conmutación por error manual (RHEL o Ubuntu)

Para realizar una conmutación por error manual, los servidores de Red Hat Enterprise Linux (RHEL) o Ubuntu ejecutan los pasos siguientes.

  1. Emita el comando siguiente:

    sudo pcs resource move <FCIResourceName> <NewHostNode>
    

    <FCIResourceName>es el nombre del recurso Pacemaker para la FCI de SQL Server, y <NewHostNode> es el nombre del nodo del clúster que quieres alojar la FCI.

  2. Durante una conmutación por error manual, Pacemaker crea una restricción de ubicación en el recurso que se eligió para mover manualmente. Para ver esta restricción, ejecute sudo pcs constraint.

  3. Una vez completada la conmutación por error, elimina la restricción:

    sudo pcs resource clear <FCIResourceName>
    

Conmutación manual por error (SLES)

Note

A partir de SQL Server 2025 (17.x), no se admite SUSE Linux Enterprise Server (SLES). Para SQL Server 2022 (16.x) y versiones anteriores, solo se soporta SLES 15.

En SUSE Linux Enterprise Server (SLES), use el comando migrate para conmutar por error manualmente una FCI de SQL Server. Por ejemplo:

crm resource migrate <FCIResourceName> <NewHostNode>

<FCIResourceName> es el nombre de recurso de la instancia del clúster de conmutación por error, y <NewHostNode> es el nombre del nuevo host de destino.

Supervisar un clúster de conmutación por error

Vea el estado actual del clúster:

sudo pcs status

Ver el estado en tiempo real del clúster y los recursos:

sudo crm_mon

Consulta los registros del agente de recursos en /var/log/cluster/corosync.log.

Adición de un nodo a un clúster

  1. Compruebe la dirección IP de cada nodo. En el siguiente script se muestra la dirección IP del nodo actual.

    ip addr show
    
  2. El nuevo nodo necesita un nombre único que tenga 15 caracteres o menos. Para establecer el nombre de equipo, agréguelo a /etc/hosts. El siguiente script le permite editar /etc/hosts con vi.

    sudo vi /etc/hosts
    

    En el ejemplo siguiente se muestra /etc/hosts con adiciones para tres nodos denominados sqlfcivm1, sqlfcivm2y sqlfcivm3.

    127.0.0.1      localhost localhost4 localhost4.localdomain4
    ::1            localhost localhost6 localhost6.localdomain6
    10.128.18.128  sqlfcivm1
    10.128.16.77   sqlfcivm2
    10.128.14.26   sqlfcivm3
    

    El archivo debe ser el mismo en todos los nodos.

  3. Detenga el servicio SQL Server en el nuevo nodo.

  4. Sigue las instrucciones para montar el directorio de archivos de la base de datos en la ubicación compartida.

    Desde el servidor NFS, instale nfs-utils:

    sudo yum -y install nfs-utils
    

    Abra el firewall en clientes y servidor NFS:

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    

    Edite el archivo /etc/fstab para incluir el comando mount:

    <IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr
    

    Ejecute mount -a para aplicar los cambios.

  5. En el nuevo nodo, cree un archivo para almacenar el nombre de usuario y la contraseña de SQL Server para el inicio de sesión de Pacemaker. Con el siguiente comando se crea y rellena este archivo:

    sudo touch /var/opt/mssql/secrets/passwd
    echo "<loginName>" | sudo tee -a /var/opt/mssql/secrets/passwd
    echo "<password>" | sudo tee -a /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    Caution

    La contraseña debe seguir la directiva de contraseña predeterminada de SQL Server. De forma predeterminada, la contraseña debe tener al menos ocho caracteres y contener caracteres de tres de los siguientes cuatro conjuntos: mayúsculas, minúsculas, dígitos en base 10 y símbolos. Las contraseñas pueden tener hasta 128 caracteres. Use contraseñas lo más largas y complejas posible.

  6. En el nuevo nodo, abra los puertos de firewall de Pacemaker. Para abrir estos puertos con firewalld, ejecute el comando siguiente:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Si usas otro cortafuegos que no tiene una configuración de alta disponibilidad integrada, abre los siguientes puertos para que Pacemaker se comunique con otros nodos del clúster:

    • TCP: puertos 2224, 3121, 21064
    • UDP: puerto 5405
  7. Instale paquetes de Pacemaker en el nuevo nodo.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  8. Establezca la contraseña para el usuario predeterminado que se crea al instalar paquetes de Pacemaker y Corosync. Use la misma contraseña que los nodos existentes.

    sudo passwd hacluster
    
  9. Habilite e inicie el servicio pcsd y Pacemaker. El nuevo nodo puede volver a unirse al clúster tras un reinicio. Ejecute el siguiente comando en el nuevo nodo.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  10. Instale el agente de recursos de FCI para SQL Server. Ejecute el siguiente comando en el nuevo nodo.

    sudo yum install mssql-server-ha
    
  11. En un nodo existente del clúster, autentica el nuevo nodo y añádelo al clúster:

    sudo pcs cluster auth <nodeName3> -u hacluster
    sudo pcs cluster node add <nodeName3>
    

Eliminación de nodos de un clúster

Para quitar un nodo de un clúster, ejecute el siguiente comando:

sudo pcs cluster node remove <nodeName>

Cambiar la frecuencia de monitorización de recursos

sudo pcs resource op monitor interval=<interval>s <sqlResourceName>

El siguiente ejemplo establece el intervalo de monitorización en 2 segundos para el mssqlha recurso:

sudo pcs resource op monitor interval=2s mssqlha

Troubleshoot

Para solucionar problemas del clúster, puede ser útil comprender cómo funcionan conjuntamente los tres demonios para administrar los recursos del clúster.

Daemon Description
Corosync Proporciona la pertenencia al cuórum y la mensajería entre los nodos del clúster.
Pacemaker Se ejecuta sobre Corosync y proporciona máquinas de estados para los recursos.
PCSD Administra Pacemaker y Corosync mediante las herramientas pcs.

PCSD debe estar en ejecución para poder usar las herramientas pcs.

Estado actual del clúster

sudo pcs status devuelve información básica sobre el clúster, el cuórum, los nodos, los recursos y el estado del demonio de cada nodo.

El siguiente ejemplo muestra una salida correcta del quórum de Pacemaker:

Cluster name: MyAppSQL
Last updated: Wed Oct 31 12:00:00 2024  Last change: Wed Oct 31 11:00:00 2024 by root via crm_resource on sqlvmnode1
Stack: corosync
Current DC: sqlvmnode1  (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
3 nodes and 1 resource configured

Online: [ sqlvmnode1 sqlvmnode2 sqlvmnode3 ]

Full list of resources:

mssqlha (ocf::sql:fci): Started sqlvmnode1

PCSD Status:
sqlvmnode1: Online
sqlvmnode2: Online
sqlvmnode3: Online

Daemon Status:
corosync: active/disabled
pacemaker: active/enabled

En este ejemplo, partition with quorum significa que la mayoría del quórum de nodos está en línea. Si el clúster pierde el cuórum de la mayoría de los nodos, pcs status devuelve partition WITHOUT quorum y se detienen todos los recursos.

Online: [sqlvmnode1 sqlvmnode2 sqlvmnode3] devuelve el nombre de todos los nodos que participan actualmente en el clúster. Si algún nodo no participa, pcs status devuelve OFFLINE: [<nodename>].

PCSD Status muestra el estado del clúster de cada nodo.

Motivos por los que un nodo puede estar sin conexión

Compruebe los elementos siguientes si un nodo está sin conexión.

  • Firewall

    Abre los siguientes puertos en todos los nodos para que Pacemaker se comunique:

    • TCP: puertos 2224, 3121, 21064
    • UDP: puerto 5405
  • Servicios de Pacemaker o Corosync en ejecución

  • Comunicación de los nodos

  • Asignaciones de nombres de los nodos