Compartilhar via


Solucionar problemas do agente de isolamento do Azure em um cluster do RHEL Pacemaker

Aplica-se a: ✔️ VMs linux

Este artigo ajuda você a solucionar problemas do agente de isolamento do Azure em um cluster do Pacemaker executado no RHEL (Red Hat Enterprise Linux) e que usa o agente de isolamento do Azure para implementar um dispositivo STONITH (Shoot The Other Node in the Head).

Visão geral

O agente de limite do Azure usa o programa Python localizado em /usr/sbin/fence_azure_arm. O RA (agente de recursos de cluster) usado para implementar um dispositivo STONITH chama esse programa com parâmetros apropriados e o usa para se comunicar com a plataforma do Azure por meio de chamadas à API.

Conforme introduzido em RHEL – Criar um dispositivo STONITH, as funções personalizadas fornecem permissões para que o agente fence execute as seguintes ações:

  • powerOff
  • start

Quando uma VM (máquina virtual) não íntegra é detectada, o agente fence usa as ações anteriores para desligar a VM e reiniciá-la, fornecendo assim um dispositivo STONITH.

Sintomas

Quando você verifica o status do recurso de cluster executando o comando a seguir, os recursos do agente de limite do Azure falham ao iniciar, relatam um "erro desconhecido" e mostram um Stopped estado:

sudo pcs status

Aqui está um exemplo de saída de comando:

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 conectividade de ponto de extremidade

Se você verificar o arquivo de log /var/log/messages , verá uma saída semelhante ao exemplo a seguir:

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 problemas de conectividade do ponto de extremidade, siga estas etapas:

  1. Teste a conectividade com os pontos de extremidade públicos da API de gerenciamento do Azure.

    Conforme descrito em Conectividade de ponto de extremidade público para Máquinas Virtuais usando o Azure Standard Load Balancer em cenários de alta disponibilidade SAP, é importante verificar a conectividade de saída com os pontos de extremidade públicos da API de gerenciamento do Azure usando as seguintes URLs:

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

    Use o comando , curlou nc a seguir telnetpara testar a conectividade com ambas as URLs.

    Observação

    Telnet ou curl geralmente não está disponível para VMs do cliente.

    telnet management.azure.com 443
    
    curl -v telnet://management.azure.com:443
    
    nc -z -v management.azure.com 443
    
  2. Verifique se um nome de usuário e senha válidos estão configurados para o dispositivo STONITH.

    • Ao usar a entidade de serviço:

      Um motivo comum pelo qual o dispositivo STONITH falha é o uso de valores de nome de usuário ou senha inválidos. Para verificar isso, use o programa fence_azure_arm conforme mostrado no comando a seguir. Os valores de nome de usuário e senha são criados de acordo com RHEL – Criar um dispositivo STONITH.

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

      Observação

      Substitua os <username>valores , <password>, <tenant ID>, e de <resource group> acordo.

      Esse comando deve retornar os nomes de nó das VMs no cluster. Se o comando não retornar, execute-o novamente com o sinalizador para habilitar a -v saída detalhada e o -D sinalizador para habilitar a saída de depuração, conforme mostrado no seguinte 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 
      

      Observação

      Substitua os <user name>valores , <password>, <tenant ID>, e de <resource group> acordo.

    • Ao usar a Identidade Gerenciada:

      Verifique os valores de nome de usuário e senha executando o seguinte comando:

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

      Observação

      Substitua o <resource group> valor de acordo.

Causa 2: falhas de autenticação

Se você verificar o arquivo de log /var/log/messages , verá uma saída semelhante ao exemplo a seguir:

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 problemas de falhas de autenticação, siga estas etapas:

  1. Verifique a ID do locatário do aplicativo Microsoft Entra, a ID do aplicativo, a entrada e os detalhes da senha no portal do Azure.

  2. Reconfigure o agente fence no cluster:

    sudo pcs property set maintenance-mode=true
    
    sudo pcs cluster edit
    
  3. Altere os parâmetros dos recursos do agente de limite do Azure e salve as alterações:

    sudo pcs property set maintenance-mode=false
    
  4. Verifique o status do cluster para confirmar se os problemas do agente fence foram corrigidos:

    sudo pcs status
    

Causa 3: permissões insuficientes

Se você verificar o arquivo de log /var/log/messages , verá uma saída semelhante ao exemplo a seguir:

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 problemas de permissões insuficientes, siga estas etapas:

  1. Verifique a definição de função personalizada para o Linux Fence Agent Role conforme descrito em Criar uma função personalizada para o agente de limite. O nome da função pode variar para diferentes clientes.

  2. Verifique se o aplicativo do agente fence atribuiu essa função personalizada à VM afetada. Caso contrário, atribua a função personalizada à VM por meio do Controle de Acesso.

  3. Inicie o cluster do Pacemaker. Deve começar junto com o agente de cerca.

  4. Verifique o status do cluster para confirmar se os problemas do agente fence foram corrigidos:

    sudo pcs status
    

Causa 4: falha de handshake SSL

Se você verificar o arquivo de log /var/log/messages , verá uma saída semelhante ao exemplo a seguir:

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')',),)) ]

Teste a conectividade dos nós afetados executando o seguinte openssl comando:

openssl s_client -connect management.azure.com:443

Você observa que a saída do comando não mostra o handshake 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

Aqui estão as possíveis causas da falha na verificação do certificado:

  • Um dispositivo de rede ou firewall executa a inspeção de pacotes ou altera as conexões TLS (Transparent Layer Socket).
  • Tamanho máximo da unidade de transmissão (MTU).

Se você estiver usando o Firewall do Azure para proteger os nós, adicione as seguintes marcas ao aplicativo ou às regras de rede para corrigir os problemas do agente de limite:

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

Próximas etapas

Se precisar de mais ajuda, abra uma solicitação de suporte com uma cópia do debug-fence.out arquivo, pois ela é necessária para fins de solução de problemas.

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.