Configuración de Pacemaker en Red Hat Enterprise Linux en Azure

Lea primero las notas y los documentos de SAP siguientes:

Instalación del clúster

Información general de Pacemaker en RHEL

Nota

Red Hat no es compatible con el guardián emulado por software. Red Hat no es compatible con SBD en plataformas en la nube. Para más información, consulte Directivas de soporte para clústeres de alta disponibilidad de RHEL: sbd y fence_sbd. El único mecanismo de barrera compatible para clústeres de Pacemaker en Red Hat Enterprise Linux en Azure es el agente de barrera de Azure.

Los elementos siguientes tienen el prefijo [A] : aplicable a todos los nodos, [1] : aplicable solo al nodo 1 o [2] : aplicable solo al nodo 2.

  1. [A] Registro. Este paso no es necesario si se usan imágenes habilitadas para alta disponibilidad de RHEL SAP.

    Registre las máquinas virtuales y asócielas a un grupo que contenga repositorios para RHEL 7.

    sudo subscription-manager register
    # List the available pools
    sudo subscription-manager list --available --matches '*SAP*'
    sudo subscription-manager attach --pool=<pool id>
    

    Tenga en cuenta que si adjunta un grupo a una imagen de RHEL de pago por uso de Azure Marketplace, se le facturará el doble por el uso de RHEL, una vez por la imagen de pago por uso y otra, por el derecho de RHEL en el grupo que adjunta. Para mitigar esto, Azure ahora proporciona imágenes de RHEL de BYOS. Para más información, consulte Imágenes Gold de tipo "Bring-your-own-subscription" (BYOS) de Red Hat Enterprise Linux en Azure.

  2. [A] Habilitación de RHEL para los repositorios SAP. Este paso no es necesario si se usan imágenes habilitadas para alta disponibilidad de RHEL SAP.

    Para instalar los paquetes necesarios, habilite los siguientes repositorios.

    sudo subscription-manager repos --disable "*"
    sudo subscription-manager repos --enable=rhel-7-server-rpms
    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
    sudo subscription-manager repos --enable=rhel-sap-for-rhel-7-server-rpms
    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-eus-rpms
    
  3. [A] Instalación del complemento de alta disponibilidad de RHEL

    sudo yum install -y pcs pacemaker fence-agents-azure-arm nmap-ncat
    

    Importante

    Se recomiendan las siguientes versiones del agente de delimitación de Azure (o posterior) para que los clientes puedan beneficiarse de un tiempo de conmutación por error más rápido, si se produce un error en la detención de un recurso o los nodos del clúster no pueden comunicarse entre sí:
    RHEL 7.7 o superior usan la versión más reciente disponible del paquete fence-agents
    RHEL 7.6: fence-agents-4.2.1-11.el7_6.8
    RHEL 7.5: fence-agents-4.0.11-86.el7_5.8
    RHEL 7.4: fence-agents-4.0.11-66.el7_4.12
    Para más información, consulte La máquina virtual de Azure que se ejecuta como un miembro del clúster de alta disponibilidad de RHEL tarda mucho tiempo en delimitarse, ocurre un error en la delimitación o se agota el tiempo de espera antes de que la máquina virtual se apague.

    Compruebe la versión del agente de delimitación de Azure. Si es necesario, actualícelo a una versión igual o posterior a la indicada anteriormente.

    # Check the version of the Azure Fence Agent
     sudo yum info fence-agents-azure-arm
    

    Importante

    Si necesita actualizar el agente de barrera de Azure y, si usa un rol personalizado, asegúrese de actualizar el rol personalizado para incluir la acción powerOff. Para más información, consulte Creación de un rol personalizado para el agente de barrera.

  4. [A] Configure la resolución nombres de host

    Puede usar un servidor DNS o modificar /etc/hosts en todos los nodos. En este ejemplo se muestra cómo utilizar el archivo /etc/hosts. Reemplace la dirección IP y el nombre de host en los siguientes comandos.

    Importante

    Si usa nombres de host en la configuración del clúster, es fundamental tener una resolución de nombres de host confiable. Si los nombres no están disponibles, se producirá un error en la comunicación con el clúster y esto puede provocar retrasos en la conmutación por error del clúster. La ventaja de usar /etc/hosts es que el clúster es independiente de DNS, lo que también podría representar un único punto de error.

    sudo vi /etc/hosts
    

    Inserte las siguientes líneas en /etc/hosts. Cambie la dirección IP y el nombre de host para que coincida con su entorno

    # IP address of the first cluster node
    10.0.0.6 prod-cl1-0
    # IP address of the second cluster node
    10.0.0.7 prod-cl1-1
    
  5. [A] Haga que la contraseña de hacluster coincida

    sudo passwd hacluster
    
  6. [A] Adición de reglas de firewall para Pacemaker

    Agregue las siguientes reglas de firewall para todas las comunicaciones entre los nodos del clúster.

    sudo firewall-cmd --add-service=high-availability --permanent
    sudo firewall-cmd --add-service=high-availability
    
  7. [A] Habilitación de los servicios básicos del clúster

    Ejecute los comandos siguientes para habilitar el servicio de Pacemaker e inícielo.

    sudo systemctl start pcsd.service
    sudo systemctl enable pcsd.service
    
  8. [1] Creación del clúster de Pacemaker

    Ejecute los comandos siguientes para autenticar los nodos y crear el clúster. Establezca el token en 30000 para permitir el mantenimiento con conservación de memoria. Para más información, consulte este artículo para Linux.

    Si va a compilar un clúster en RHEL 7.x, use los comandos siguientes:

    sudo pcs cluster auth prod-cl1-0 prod-cl1-1 -u hacluster
    sudo pcs cluster setup --name nw1-azr prod-cl1-0 prod-cl1-1 --token 30000
    sudo pcs cluster start --all
    

    Si va a compilar un clúster en RHEL 8.x, use los comandos siguientes:

    sudo pcs host auth prod-cl1-0 prod-cl1-1 -u hacluster
    sudo pcs cluster setup nw1-azr prod-cl1-0 prod-cl1-1 totem token=30000
    sudo pcs cluster start --all
    

    Compruebe el estado de clúster con el comando siguiente:

     # Run the following command until the status of both nodes is online
    sudo pcs status
    # Cluster name: nw1-azr
    # WARNING: no stonith devices and stonith-enabled is not false
    # Stack: corosync
    # Current DC: prod-cl1-1 (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum
    # Last updated: Fri Aug 17 09:18:24 2018
    # Last change: Fri Aug 17 09:17:46 2018 by hacluster via crmd on prod-cl1-1
    #
    # 2 nodes configured
    # 0 resources configured
    #
    # Online: [ prod-cl1-0 prod-cl1-1 ]
    #
    # No resources
    #
    # Daemon Status:
    #   corosync: active/disabled
    #   pacemaker: active/disabled
    #   pcsd: active/enabled
    
  9. [A] Establecimiento de votos esperados.

    # Check the quorum votes 
     pcs quorum status
     # If the quorum votes are not set to 2, execute the next command
     sudo pcs quorum expected-votes 2
    

    Sugerencia

    Si crea un clúster de varios nodos, que es un clúster con más de dos nodos, no establezca los votos en 2.

  10. [1] Permitir acciones de barrera simultáneas

    sudo pcs property set concurrent-fencing=true
    

Creación de un dispositivo STONITH

El dispositivo STONITH usa una entidad de servicio para la autorización de Microsoft Azure. Siga estos pasos para crear una entidad de servicio.

  1. Vaya a https://portal.azure.com.
  2. Abra la hoja Azure Active Directory
    Vaya a Propiedades y anote el identificador del directorio. Se trata del id. de inquilino.
  3. Haga clic en Registros de aplicaciones
  4. Haga clic en Nuevo registro
  5. Escriba un nombre y seleccione "Solo las cuentas de este directorio organizativo"
  6. Seleccione el tipo de aplicación "Web", escriba una dirección URL de inicio de sesión (por ejemplo, http://localhost) y haga clic en Agregar
    La dirección URL de inicio de sesión no se usa y puede ser cualquier dirección URL válida
  7. Seleccione Certificados y secretos, y luego haga clic en Nuevo secreto de cliente
  8. Escriba una descripción para la nueva clave, seleccione "Nunca expira" y haga clic en Agregar
  9. Anote el valor. Se utiliza como contraseña para la entidad de servicio
  10. Seleccione Información general. Anote el identificador de la aplicación. Se utiliza como nombre de usuario (Id. de inicio de sesión en los pasos siguientes) de la entidad de servicio

[1] Creación de un rol personalizado para el agente de barrera

La entidad de servicio no tiene permiso para tener acceso a los recursos de Azure de forma predeterminada. Debe concedérselos para iniciar y detener (apagar) todas las máquinas virtuales del clúster. Si no ha creado aún el rol personalizado, puede crearlo mediante PowerShell o la CLI de Azure.

Utilice el siguiente contenido para el archivo de entrada. Debe adaptar el contenido a sus suscripciones; esto es, reemplace c276fc76-9cd4-44c9-99a7-4fd71546436e y e91d47c4-76f3-4271-a796-21b4ecfe3624 por los identificadores de su suscripción. Si solo tiene una suscripción, quite la segunda entrada en AssignableScopes.

{
      "Name": "Linux Fence Agent Role",
      "description": "Allows to power-off and start virtual machines",
      "assignableScopes": [
              "/subscriptions/e663cc2d-722b-4be1-b636-bbd9e4c60fd9",
              "/subscriptions/e91d47c4-76f3-4271-a796-21b4ecfe3624"
      ],
      "actions": [
              "Microsoft.Compute/*/read",
              "Microsoft.Compute/virtualMachines/powerOff/action",
              "Microsoft.Compute/virtualMachines/start/action"
      ],
      "notActions": [],
      "dataActions": [],
      "notDataActions": []
}

[A] Asignación del rol personalizado a la entidad de servicio

Asigne el rol personalizado "Rol del agente de barrera de Linux" que se creó en el último capítulo a la entidad de servicio. Deje de utilizar el rol de propietario. Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.
Asegúrese de asignar el rol para ambos nodos de clúster.

[1] Cree los dispositivos STONITH

Después de editar los permisos para las máquinas virtuales, puede configurar los dispositivos STONITH en el clúster.


sudo pcs property set stonith-timeout=900

Nota

La opción "pcmk_host_map" SOLO es necesaria en el comando si los nombres de host RHEL y los nombres de VM de Azure NO son idénticos. Especifique la asignación en el formato hostname:nombre-VM. Consulte la sección en negrita en el comando. Para obtener más información, consulte el artículo sobre el formato que se debe usar para especificar las asignaciones de nodo en los dispositivos stonith en pcmk_host_map

Para configurar al agente de delimitación en RHEL 7.X, use el comando siguiente:

sudo pcs stonith create rsc_st_azure fence_azure_arm login="login ID" passwd="password" resourceGroup="resource group" tenantId="tenant ID" subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \
op monitor interval=3600

Para configurar al agente de delimitación en RHEL 8.X, use el comando siguiente:

sudo pcs stonith create rsc_st_azure fence_azure_arm username="login ID" password="password" resourceGroup="resource group" tenantId="tenant ID" subscriptionId="subscription id" pcmk_host_map="prod-cl1-0:prod-cl1-0-vm-name;prod-cl1-1:prod-cl1-1-vm-name" \
power_timeout=240 pcmk_reboot_timeout=900 pcmk_monitor_timeout=120 pcmk_monitor_retries=4 pcmk_action_limit=3 pcmk_delay_max=15 \
op monitor interval=3600

Sugerencia

Configure el atributo pcmk_delay_max solo en clústeres de Pacemaker de dos nodos. Para más información sobre cómo evitar carreras de barrera en un clúster de Pacemaker de dos nodos, consulte Retraso de barreras en un clúster de dos nodos para evitar escenarios de carreras de barrera de "muerte por barrera".

Importante

Las operaciones de supervisión y barrera se deserializan. Como resultado, si hay una operación de supervisión más larga y un evento de barrera simultánea, no habrá ningún retraso en la conmutación por error del clúster debido a la operación de supervisión que ya se está ejecutando.

[1] Habilite el uso de un dispositivo STONITH

sudo pcs property set stonith-enabled=true

Sugerencia

El agente de barrera de Azure requiere conectividad saliente a los punto de conexión públicos como se documenta, junto con las posibles soluciones, en Conectividad del punto de conexión público para las máquinas virtuales que usan el ILB estándar.

Configuración opcional de STONITH

Sugerencia

Esta sección solo es aplicable si se desea configurar un dispositivo de barrera especial para fence_kdump.

Si es necesario recopilar información de diagnóstico dentro de la máquina virtual, puede ser útil configurar un dispositivo STONITH adicional basado en el agente de barrera fence_kdump. El agente fence_kdump puede detectar que un nodo ha entrado en la recuperación de bloqueos de kdump y puede permitir que se complete el servicio de recuperación de bloqueos antes de que se invoque a otros métodos de barrera. Tenga en cuenta que fence_kdump no sustituye a los mecanismos de barrera tradicionales, como el agente de barrera de Azure, cuando se usan máquinas virtuales de Azure.

Importante

Tenga en cuenta que cuando fence_kdump se configura como un stonith de primer nivel, introducirá retrasos en las operaciones de barrera y, respectivamente, retrasos en la conmutación por error de los recursos de la aplicación.

Si se detecta correctamente un volcado de memoria, la creación de barreras se retrasará hasta que se complete el servicio de recuperación de bloqueos. Si no se puede acceder al nodo con errores o este no responde, la creación de barreras se retrasará según el tiempo determinado por el número configurado de iteraciones y el tiempo de espera de fence_kdump. Para más información, consulte Configuración de fence_kdump en un clúster de Pacemaker de Red Hat.
Es posible que el tiempo de espera propuesto de fence_kdump deba adaptarse al entorno específico.

Se recomienda configurar un stonith de fence_kdump solo cuando sea necesario para recopilar diagnósticos dentro de la máquina virtual y siempre en combinación con el método de barrera tradicional, como el agente de barrera de Azure.

Las siguientes KB de Red Hat contienen información importante sobre la configuración de un stonith de fence_kdump:

Ejecute los siguientes pasos opcionales para agregar fence_kdump como una configuración de STONITH de primer nivel, además de la configuración del agente de barrera de Azure.

  1. [A] Compruebe que kdump esté activo y configurado.

    systemctl is-active kdump
    # Expected result
    # active
    
  2. [A] Instale el agente de barrera fence_kdump.

    yum install fence-agents-kdump
    
  3. [1] Cree un dispositivo stonith de fence_kdump en el clúster.

    
     pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="prod-cl1-0 prod-cl1-1" timeout=30
     
  4. [1] Configure los niveles de stonith de modo que el mecanismo de barrera fence_kdump se establezca primero.

    
     pcs stonith create rsc_st_kdump fence_kdump pcmk_reboot_action="off" pcmk_host_list="prod-cl1-0 prod-cl1-1"
     pcs stonith level add 1 prod-cl1-0 rsc_st_kdump
     pcs stonith level add 1 prod-cl1-1 rsc_st_kdump
     pcs stonith level add 2 prod-cl1-0 rsc_st_azure
     pcs stonith level add 2 prod-cl1-1 rsc_st_azure
     # Check the stonith level configuration 
     pcs stonith level
     # Example output
     # Target: prod-cl1-0
     # Level 1 - rsc_st_kdump
     # Level 2 - rsc_st_azure
     # Target: prod-cl1-1
     # Level 1 - rsc_st_kdump
     # Level 2 - rsc_st_azure
     
  5. [A] Permita los puertos necesarios para fence_kdump en el firewall.

    firewall-cmd --add-port=7410/udp
    firewall-cmd --add-port=7410/udp --permanent
    
  6. [A] Asegúrese de que el archivo de imagen initramfs contenga los archivos fence_kdump y hosts. Para más información, consulte Configuración de fence_kdump en un clúster de Pacemaker de Red Hat.

    lsinitrd /boot/initramfs-$(uname -r)kdump.img | egrep "fence|hosts"
    # Example output 
    # -rw-r--r--   1 root     root          208 Jun  7 21:42 etc/hosts
    # -rwxr-xr-x   1 root     root        15560 Jun 17 14:59 usr/libexec/fence_kdump_send
    
  7. [A] Realice la configuración de fence_kdump_nodes en el archivo /etc/kdump.conf para evitar que fence_kdump genere errores de tiempo de espera para algunas versiones de kexec-tools. Para más información, consulte Error de tiempo de espera de fence_kdump cuando no se especifica fence_kdump_nodes con la versión 2.0.15 o posterior de kexec-tools y Error de fence_kdump con el mensaje "tiempo de espera después de X segundos" en un clúster de alta disponibilidad de RHEL 6 o 7 con una versión de kexec-tools anterior a la versión 2.0.14. A continuación, se muestra la configuración de ejemplo para un clúster de dos nodos. Después de realizar un cambio en el archivo /etc/kdump.conf, se debe volver a generar la imagen de kdump. Esto se puede lograr mediante un reinicio del servicio kdump.

    
     vi /etc/kdump.conf
     # On node prod-cl1-0 make sure the following line is added
     fence_kdump_nodes  prod-cl1-1
     # On node prod-cl1-1 make sure the following line is added
     fence_kdump_nodes  prod-cl1-0
    
     # Restart the service on each node
     systemctl restart kdump
     
  8. Pruebe la configuración bloqueando un nodo. Para más información, consulte Configuración de fence_kdump en un clúster de Pacemaker de Red Hat.

    Importante

    Si el clúster ya está en uso productivo, planee la prueba en consecuencia, ya que bloquear un nodo tendrá un impacto en la aplicación.

    echo c > /proc/sysrq-trigger
    

Pasos siguientes