Compartir a través de


Solución de problemas del agente de barrera de Azure en un clúster de RHEL Pacemaker

Se aplica a: ✔️ Máquinas virtuales Linux

Este artículo le ayuda a solucionar problemas del agente de barrera de Azure en un clúster de Pacemaker que se ejecuta en Red Hat Enterprise Linux (RHEL) y que usa el agente de barrera de Azure para implementar un dispositivo Shoot The Other Node en el dispositivo Head (STONITH).

Información general

El agente de barrera de Azure usa el programa python ubicado en /usr/sbin/fence_azure_arm. El agente de recursos de clúster (RA) usado para implementar un dispositivo STONITH llama a este programa con parámetros adecuados y lo usa para comunicarse con la plataforma Azure a través de llamadas API.

Como se introdujo en RHEL: cree un dispositivo STONITH, los roles personalizados proporcionan permisos para que el agente de barrera realice las siguientes acciones:

  • powerOff
  • start

Cuando se detecta una máquina virtual (VM) incorrecta, el agente de barrera usa las acciones anteriores para desactivar la máquina virtual y reiniciarla, lo que proporciona un dispositivo STONITH.

Síntomas

Al comprobar el estado del recurso del clúster mediante la ejecución del comando siguiente, los recursos del agente de barrera de Azure no se inician, notifican un "error desconocido" y muestran un Stopped estado:

sudo pcs status

He aquí un ejemplo de salida de comandos:

Cluster name: nw1-azr
Cluster Summary:
  * Stack: corosync
  * Current DC: RHEL-SAP01 (version 2.0.5-9.el8_4.8-ba59be7122) - partition with quorum
  * Last updated: Fri Jun  7 01:34:38 2023
  * Last change:  Fri Jun  7 01:34:23 2023 by root via cibadmin on RHEL-SAP01
  * 2 nodes configured
  * 3 resource instances configured
Node List:
  * Online: [ RHEL-SAP01 RHEL-SAP02 ]
Full List of Resources:
  * rsc_st_azure        (stonith:fence_azure_arm):       Stopped
  * Clone Set: health-azure-events-clone [health-azure-events]:
    * Started: [ RHEL-SAP01 RHEL-SAP02 ]
Failed Resource Actions:
  * rsc_st_azure_start_0 on RHEL-SAP01 'error' (1): call=20, status='complete', exitreason='', last-rc-change='2023-06-04 01:34:24Z', queued=0ms, exec=4041ms
  * rsc_st_azure_start_0 on RHEL-SAP02 'error' (1): call=14, status='complete', exitreason='', last-rc-change='2023-06-04 01:34:28Z', queued=0ms, exec=4243ms
Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

Causa 1: Problemas de conectividad del punto de conexión

Si comprueba el archivo de registro /var/log/messages , verá una salida similar al ejemplo siguiente:

2021-03-15T20:23:15.441083+00:00 NodeName pacemaker-fenced[2550]:  warning: fence_azure_arm[21839] stderr: [ 2021-03-15 20:23:15,398 ERROR: Failed: Azure Error: AuthenticationFailed ]
2021-03-15T20:23:15.441260+00:00 NodeName pacemaker-fenced[2550]:  warning: fence_azure_arm[21839] stderr: [ Message: Authentication failed. ]
2021-03-15T20:23:15.441668+00:00 NodeName pacemaker-fenced[2550]:  warning: fence_azure_arm[21839] stderr: [  ]

Para solucionar los problemas de conectividad del punto de conexión, siga estos pasos:

  1. Pruebe la conectividad a los puntos de conexión públicos de la API de administración de Azure.

    Como se describe en Conectividad de punto de conexión público para máquinas virtuales mediante Azure Standard Load Balancer en escenarios de alta disponibilidad de SAP, es importante comprobar la conectividad saliente a los puntos de conexión públicos de la API de administración de Azure mediante las siguientes direcciones URL:

    • https://management.azure.com
    • https://login.microsoftonline.com

    Use el siguiente telnetcomando , curlo nc para probar la conectividad con ambas direcciones URL.

    Nota:

    Telnet o curl generalmente no está disponible para las máquinas virtuales del cliente.

    telnet management.azure.com 443
    
    curl -v telnet://management.azure.com:443
    
    nc -z -v management.azure.com 443
    
  2. Compruebe que hay un nombre de usuario y una contraseña válidos configurados para el dispositivo STONITH.

    • Al usar la entidad de servicio:

      Una razón común por la que se produce un error en el dispositivo STONITH es el uso de valores de nombre de usuario o contraseña no válidos. Para comprobarlo, use el programa fence_azure_arm como se muestra en el siguiente comando. Los valores de nombre de usuario y contraseña se crean según RHEL: creación de un dispositivo STONITH.

      sudo /usr/sbin/fence_azure_arm --action=list --username='<username>' --password='<password>' --tenantId=<tenant ID> --resourceGroup=<resource group> 
      

      Nota:

      Reemplace los <username>valores , <password>, <tenant ID>y <resource group> en consecuencia.

      Este comando debe devolver los nombres de nodo de las máquinas virtuales del clúster. Si el comando no se puede devolver, vuelva a ejecutarlo con la -v marca para habilitar la salida detallada y la marca para habilitar la -D salida de depuración, como se muestra en el siguiente comando:

      sudo /usr/sbin/fence_azure_arm --action=list --username='<user name>' --password='<password>' --tenantId=<tenant ID> --resourceGroup=<resource group> -v -D /var/tmp/debug-fence.out 
      

      Nota:

      Reemplace los <user name>valores , <password>, <tenant ID>y <resource group> en consecuencia.

    • Al usar la identidad administrada:

      Para comprobar los valores de nombre de usuario y contraseña, ejecute el comando siguiente:

      sudo /usr/sbin/fence_azure_arm --action=list --msi --resourceGroup=<resource group> -v -D /var/tmp/debug-fence.out
      

      Nota:

      Reemplace el <resource group> valor en consecuencia.

Causa 2: Errores de autenticación

Si comprueba el archivo de registro /var/log/messages , verá una salida similar al ejemplo siguiente:

2020-04-06T10:06:47.779470+00:00 VM1 pacemaker-controld[29309]: notice: Result of probe operation for rsc_st_azure on VM1: 7 (not running)
2020-04-06T10:06:51.045519+00:00 VM1 pacemaker-execd[29306]: notice: executing - rsc:rsc_st_azure action:start call_id:52
2020-04-06T10:06:52.826702+00:00 VM1 /fence_azure_arm: Failed: AdalError: Get Token request returned http error: 400 and server response: {"error":"unauthorized_client","error_description":"AADSTS700016: Application with identifier '<application ID>'
was not found in the directory '<directory name>'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant.
You may have sent your authentication request to the wrong tenant.\r\nTrace ID: 9d86f824-52c1-45a8-b24f-c81473122d00\r\nCorrelation ID: 7dd6de5d-1d6a-4950-be8b-9a2cb2df8553\r\nTimestamp:2020-04-06 10:06:52Z","error_codes":[700016],"timestamp":"2020-04-06 10:06:52Z","trace_id":"9d86f824-52c1-45a8-b24f-c81473122d00",
"correlation_id":"7dd6de5d-1d6a-4950-be8b-9a2cb2df8553","error_uri":"https://login.microsoftonline.com/error?code=700016 "}

Para solucionar los errores de autenticación, siga estos pasos:

  1. Compruebe los detalles del inquilino de la aplicación Microsoft Entra, el identificador de aplicación, el inicio de sesión y la contraseña de Azure Portal.

  2. Vuelva a configurar el agente de barrera en el clúster:

    sudo pcs property set maintenance-mode=true
    
    sudo pcs cluster edit
    
  3. Cambie los parámetros de los recursos del agente de barrera de Azure y, a continuación, guarde los cambios:

    sudo pcs property set maintenance-mode=false
    
  4. Compruebe el estado del clúster para confirmar que se han corregido los problemas del agente de barrera:

    sudo pcs status
    

Causa 3: Permisos insuficientes

Si comprueba el archivo de registro /var/log/messages , verá una salida similar al ejemplo siguiente:

Apr 2 00:49:57 heeudpgscs01 stonith-ng[105424]: warning: fence_azure_arm[109393] stderr: [ 2020-04-02 00:49:56,978 ERROR: Failed: Azure Error: AuthorizationFailed ]
Apr 2 00:49:57 heeudpgscs01 stonith-ng[105424]: warning: fence_azure_arm[109393] stderr: [ Message: The client '<client ID>' with object id '<object ID>' does not have authorization to perform action 'Microsoft.Compute/virtualMachines/read' over scope '/subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.Compute' or the scope is invalid. If access was recently granted, please refresh your credentials. ]

Para solucionar los problemas de permisos insuficientes, siga estos pasos:

  1. Compruebe la definición de roles personalizados de tal Linux Fence Agent Role y como se describe en Creación de un rol personalizado para el agente de barrera. El nombre del rol puede variar para diferentes clientes.

  2. Compruebe si la aplicación del agente de barrera ha asignado este rol personalizado a la máquina virtual afectada. Si no es así, asigne el rol personalizado a la máquina virtual a través de Access Control.

  3. Inicie el clúster de Pacemaker. Debe comenzar junto con el agente de barrera.

  4. Compruebe el estado del clúster para confirmar que se han corregido los problemas del agente de barrera:

    sudo pcs status
    

Causa 4: error de protocolo de enlace SSL

Si comprueba el archivo de registro /var/log/messages , verá una salida similar al ejemplo siguiente:

warning: fence_azure_arm[28114] stderr: [ 2021-06-24 07:59:29,832 ERROR: Failed: Error occurred in request., SSLError: HTTPSConnectionPool(host='management.azure.com ', port=443): Max retries exceeded with url: /subscriptions/<subscription ID>/resourceGroups/<resource group>/providers/Microsoft.Compute/virtualMachines?api-version=2019-03-01 (Caused by SSLError(SSLError('bad handshake: SysCallError(-1, 'Unexpected EOF')',),)) ]

Pruebe la conectividad desde los nodos afectados mediante la ejecución del comando siguiente openssl :

openssl s_client -connect management.azure.com:443

Observe que la salida del comando no muestra el protocolo de enlace de certificado completo:

CONNECTED(00000003)
write:errno=0
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 176 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1625235527
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no

Estas son las posibles causas del error de comprobación del certificado:

  • Un dispositivo de red o firewall realiza la inspección de paquetes o cambia las conexiones de socket de capa transparente (TLS).
  • Tamaño máximo de unidad de transmisión (MTU).

Si usa Azure Firewall para proteger los nodos, asegúrese de agregar las siguientes etiquetas a la aplicación o las reglas de red para corregir los problemas del agente de barrera:

Application Rules:
ApiManagement, AppServiceManagement, AzureCloud
Network Rules:
AppServiceEnvironment

Pasos siguientes

Si necesita ayuda adicional, abra una solicitud de soporte técnico con una copia del debug-fence.out archivo porque es necesaria para solucionar problemas.

Aviso de declinación de responsabilidades sobre la información de terceros

Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.