Compartilhar via


Solucionar problemas da ferramenta AzAcSnap (Azure Application Consistent Snapshot)

Este artigo descreve como solucionar problemas ao usar a ferramenta AzAcSnap (Azure Application Consistent Snapshot) para o Azure NetApp Files e a Instância Grande do Azure.

Você pode encontrar vários problemas comuns ao executar comandos do AzAcSnap. Siga as instruções para solucionar os problemas. Se ainda tiver problemas, abra uma Solicitação de Serviço para o Suporte da Microsoft no portal do Azure e atribua a solicitação à fila da Instância Grande do SAP HANA.

O comando AzAcSnap não será executado

Em alguns casos, o AzAcSnap não será iniciado devido ao ambiente do usuário.

Obteve falha ao criar o CoreCLR

O AzAcSnap é escrito no .NET e o CoreCLR é um mecanismo de execução para aplicativos .NET, executando funções como o carregamento de código de byte de IL, a compilação para código de computador e a coleta de lixo. Nesse caso, há um problema ambiental que bloqueando a inicialização do mecanismo CoreCLR.

Uma causa comum é permissões limitadas ou configuração ambiental para o usuário do sistema operacional AzAcSnap, geralmente "azacsnap".

O erro Failed to create CoreCLR, HRESULT: 0x80004005 pode ser causado pela falta de acesso para gravação do usuário do azacsnap ao TMPDIR do sistema.

Observação

Todas as linhas de comando que começam com # são comandos executados como root, todas as que começam com > são executadas como usuário do azacsnap.

Verifique a propriedade /tmp e as permissões (observe neste exemplo que somente o usuário root pode ler e gravar em /tmp):

# ls -ld /tmp
drwx------ 9 root root 8192 Mar 31 10:50 /tmp

Um /tmp típico tem as seguintes permissões, que permitiriam que o usuário do azacsnap executasse o comando azacsnap:

# ls -ld /tmp
drwxrwxrwt 9 root root 8192 Mar 31 10:51 /tmp

Se não for possível alterar as permissões do diretório /tmp, crie um usuário específico de TMPDIR.

Crie um TMPDIR para o usuário azacsnap:

> mkdir /home/azacsnap/_tmp
> export TMPDIR=/home/azacsnap/_tmp
> azacsnap -c about
 
 
                            WKO0XXXXXXXXXXXNW
                           Wk,.,oxxxxxxxxxxx0W
                           0;.'.;dxxxxxxxxxxxKW
                          Xl'''.'cdxxxxxxxxxdkX
                         Wx,''''.,lxxxxdxdddddON
                         0:''''''.;oxdddddddddxKW
                        Xl''''''''':dddddddddddkX
                       Wx,''''''''':ddddddddddddON
                       O:''''''''',xKxddddddoddod0W
                      Xl''''''''''oNW0dooooooooooxX
                     Wx,,,,,,'','c0WWNkoooooooooookN
                    WO:',,,,,,,,;cxxxxooooooooooooo0W
                    Xl,,,,,,,;;;;;;;;;;:llooooooooldX
                   Nx,,,,,,,,,,:c;;;;;;;;coooollllllkN
                  WO:,,,,,,,,,;kXkl:;;;;,;lolllllllloOW
                  Xl,,,,,,,,,,dN WNOl:;;;;:lllllllllldK
                  0c,;;;;,,,;lK     NOo:;;:clllllllllo0W
                  WK000000000N        NK000KKKKKKKKKKXW
 
 
                Azure Application Consistent Snapshot Tool
                       AzAcSnap 7a (Build: 1AA8343)

Importante

A alteração do usuário do TMPDIR precisaria ser permanente alterando o perfil do usuário (por exemplo, $HOME/.bashrc ou $HOME/.bash_profile). Também seria necessário limpar o TMPDIR na reinicialização no sistema, isso normalmente é automático para /tmp.

Verificar arquivos de log, arquivos de resultado e log do sistema

Algumas das melhores fontes de informações para investigar problemas do AzAcSnap são os arquivos de log, os arquivos de resultados e o log do sistema.

Arquivos de log

Os arquivos de log do AzAcSnap são armazenados no diretório configurado pelo parâmetro logPath no arquivo de configuração do AzAcSnap. O nome do arquivo de configuração padrão éazacsnap.json, e o valor padrão de logPath é ./logs, o que significa que os arquivos de log são gravados no diretório ./logs relativo ao local em que o comando azacsnap é executado. Se você fizer de logPath um local absoluto, como /home/azacsnap/logs, azacsnap sempre gerará os logs em /home/azacsnap/logs, independentemente de onde você executar o comando azacsnap.

O nome do arquivo de log é baseado no nome do aplicativo, azacsnap, no comando executado com -c, como backup, test ou details, e no nome do arquivo de configuração padrão, como azacsnap.json. Com o comando -c backup, um nome de arquivo de log padrão seria azacsnap-backup-azacsnap.log, gravado no diretório configurado por logPath.

Essa convenção de nomenclatura permite que vários arquivos de configuração, um por banco de dados, ajudem a localizar os arquivos de log associados. Se o nome do arquivo de configuração for SID.json, o nome do arquivo de log ao usar a opção azacsnap -c backup --configfile SID.json será azacsnap-backup-SID.log.

Arquivos de resultado e log do sistema

Para o comando -c backup, o AzAcSnap grava em um arquivo *.result. A finalidade do arquivo *.result é fornecer confirmação de êxito/falha de alto nível. Se o arquivo *.result estiver vazio, considere falha. Toda saída gravada no arquivo *.result também é gerada para o log do sistema (por exemplo, /var/log/messages) usando o comando logger. O nome do arquivo *.result tem o mesmo nome base que o arquivo de log para permitir a correspondência do arquivo de resultado com o arquivo de configuração e o arquivo de log de backup. O arquivo *.result vai para o mesmo local que os outros arquivos de log e é um arquivo de saída simples de uma linha.

  1. Exemplo de conclusão bem-sucedida:

    1. Saída para o arquivo *.result:

      Database # 1 (PR1) : completed ok
      
    2. Saída para /var/log/messages:

      Dec 17 09:01:13 azacsnap-rhel azacsnap: Database # 1 (PR1) : completed ok
      
  2. Exemplo de saída em que ocorreu uma falha e o AzAcSnap capturou a falha:

    1. Saída para o arquivo *.result:

      Database # 1 (PR1) : failed
      
    2. Saída para /var/log/messages:

      Dec 19 09:00:30 azacsnap-rhel azacsnap: Database # 1 (PR1) : failed
      

Solucionar problemas com falhas no comando 'test storage'

O comando azacsnap -c test --test storage pode não ter sido concluído com êxito.

Verificar os firewalls de rede

A comunicação com o Azure NetApp Files pode falhar ou atingir o tempo limite. Para solucionar problemas, verifique se as regras de firewall não estão bloqueando o tráfego de saída do sistema que executa o AzAcSnap para os seguintes endereços e portas TCP/IP:

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

Usar o Cloud Shell para validar arquivos de configuração

Você pode testar se a entidade de serviço está configurada corretamente usando o Cloud Shell por meio do portal do Azure. Usando testes do Cloud Shell para a configuração correta, ignorando controles de rede em uma rede virtual ou VM (máquina virtual).

  1. No portal do Azure, abra uma sessão do Cloud Shell.

  2. Faça um diretório de teste, por exemplo, mkdir azacsnap.

  3. Passe para o diretório azacsnap e baixe a versão mais recente de AzAcSnap.

    wget https://aka.ms/azacsnapinstaller
    
  4. Torne o instalador executável, por exemplo, chmod +x azacsnapinstaller.

  5. Extraia o binário para teste.

    ./azacsnapinstaller -X -d .
    

    Os resultados são similares a saída a seguir:

    +-----------------------------------------------------------+
    | Azure Application Consistent Snapshot Tool Installer |
    +-----------------------------------------------------------+
    |-> Installer version '5.0.2_Build_20210827.19086'
    |-> Extracting commands into ..
    |-> Cleaning up .NET extract dir
    
  6. Use o ícone Carregar/Baixar do Cloud Shell para carregar o arquivo da entidade de serviço, azureauth.json, e o arquivo de configuração do AzAcSnap, como azacsnap.json, para teste.

  7. Execute o teste storage.

    ./azacsnap -c test --test storage
    

    Observação

    O comando de teste pode levar cerca de 90 segundos para ser concluído.

Teste com falha na Instância Grande do Azure

O seguinte exemplo de erro é de corrente da execução de azacsnap na Instância Grande do Azure:

azacsnap -c test --test storage
The authenticity of host '172.18.18.11 (172.18.18.11)' can't be established.
ECDSA key fingerprint is SHA256:QxamHRn3ZKbJAKnEimQpVVCknDSO9uB4c9Qd8komDec.
Are you sure you want to continue connecting (yes/no)?

Para solucionar esse erro, não responda yes. Verifique se o endereço IP do armazenamento está correto. Você pode confirmar o endereço IP do armazenamento com a equipe de operações da Microsoft.

O erro geralmente aparece quando o usuário do armazenamento da Instância Grande do Azure não tem acesso ao armazenamento subjacente. Para determinar se o usuário do armazenamento tem acesso ao armazenamento, execute o comando ssh para validar a comunicação com a plataforma de armazenamento.

ssh <StorageBackupname>@<Storage IP address> "volume show -fields volume"

O seguinte exemplo mostra a saída esperada:

ssh clt1h80backup@10.8.0.16 "volume show -fields volume"
vserver volume
--------------------------------- ------------------------------
osa33-hana-c01v250-client25-nprod hana_data_h80_mnt00001_t020_vol
osa33-hana-c01v250-client25-nprod hana_data_h80_mnt00002_t020_vol

Teste com falha com o Azure NetApp Files

O seguinte exemplo de erro é de corrente da execução de azacsnap com o Azure NetApp Files:

azacsnap --configfile azacsnap.json.NOT-WORKING -c test --test storage
BEGIN : Test process started for 'storage'
BEGIN : Storage test snapshots on 'data' volumes
BEGIN : 1 task(s) to Test Snapshots for Storage Volume Type 'data'
ERROR: Could not create StorageANF object [authFile = 'azureauth.json']

Para solucionar esse erro:

  1. Verifique a existência do arquivo da entidade de serviço, azureauth.json, conforme definido no arquivo de configuração azacsnap.json.

  2. Verifique o arquivo de log, por exemplo, logs/azacsnap-test-azacsnap.log, para ver se o arquivo da entidade de serviço tem o conteúdo correto. A saída do arquivo de log a seguir mostra que a chave secreta do cliente é inválida.

    [19/Nov/2020:18:39:49 +13:00] DEBUG: [PID:0020080:StorageANF:659] [1] Innerexception: Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException AADSTS7000215: Invalid client secret is provided.
    
  3. Verifique o arquivo de log para ver se a entidade de serviço expirou. O exemplo de arquivo de log a seguir mostra que as chaves secretas do cliente expiraram.

    [19/Nov/2020:18:41:10 +13:00] DEBUG: [PID:0020257:StorageANF:659] [1] Innerexception: Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException AADSTS7000222: The provided client secret keys are expired. Visit the Azure Portal to create new keys for your app, or consider using certificate credentials for added security: https://learn.microsoft.com/azure/active-directory/develop/active-directory-certificate-credentials
    

Dica

Para obter mais informações sobre como gerar uma nova Entidade de Serviço, consulte a seção Habilitar a comunicação com o Armazenamento no guia Instalar ferramenta de instantâneo consistente no aplicativo Azure.

Solucionar problemas com falhas no comando 'test hana'

O comando azacsnap -c test --test hana pode não ter sido concluído com êxito.

Comando não encontrado

Ao criar a comunicação com o SAP HANA, o hdbuserstore programa é usado para criar as configurações de comunicação segura. O AzAcSnap também requer o programa hdbsql para todas as comunicações com o SAP HANA. Esses programas geralmente estão em /usr/sap/<SID>/SYS/exe/hdb/ ou /usr/sap/hdbclient e devem estar no $PATH do usuário.

  • No exemplo a seguir, o comando hdbsql não está no $PATH do usuário.

    hdbsql -n 172.18.18.50 - i 00 -U AZACSNAP "select version from sys.m_database"
    
    If 'hdbsql' is not a typo you can use command-not-found to lookup the package that contains it, like this:
    cnf hdbsql
    
  • O exemplo a seguir adiciona temporariamente o comando hdbsql ao $PATH do usuário, permitindo a execução correta de azacsnap.

    export PATH=$PATH:/hana/shared/H80/exe/linuxx86_64/hdb/
    

Verifique se o instalador adicionou o local desses arquivos ao $PATH do usuário de AzAcSnap.

Observação

Para adicionar permanentemente ao $PATH do usuário, atualize o arquivo $HOME/.profile do usuário.

Valor inválido para a chave

A saída desse comando mostra que a chave de conexão não foi configurada corretamente com o comando hdbuserstore Set.

hdbsql -n 172.18.18.50 -i 00 -U AZACSNAP "select version from sys.m_database"
* -10104: Invalid value for KEY (AZACSNAP)

Para obter mais informações sobre a configuração do hdbuserstore, consulte Introdução ao AzAcSnap.

Teste com falha

Ao validar a comunicação com o SAP HANA executando um teste com azacsnap -c test --test hana, você pode receber este erro:

> azacsnap -c test --test hana
BEGIN : Test process started for 'hana'
BEGIN : SAP HANA tests
CRITICAL: Command 'test' failed with error:
Cannot get SAP HANA version, exiting with error: 127

Para solucionar esse erro:

  1. Verifique o arquivo de configuração, por exemplo, azacsnap.json, para cada instância do HANA para garantir que os valores do banco de dados SAP HANA estejam corretos.

  2. Execute o comando a seguir para verificar se o comando hdbsql está no caminho e se ele pode se conectar ao servidor do SAP HANA.

    hdbsql -n 172.18.18.50 - i 00 -d SYSTEMDB -U AZACSNAP "\s"
    

    O seguinte exemplo mostra a saída quando o comando é executado corretamente:

    host          : 172.18.18.50
    sid           : H80
    dbname        : SYSTEMDB
    user          : AZACSNAP
    kernel version: 2.00.040.00.1553674765
    SQLDBC version:        libSQLDBCHDB 2.04.126.1551801496
    autocommit    : ON
    locale        : en_US.UTF-8
    input encoding: UTF8
    sql port      : saphana1:30013
    

Erro de privilégio insuficiente

Se a execução de azacsnap apresentar um erro como * 258: insufficient privilege, verifique se o usuário tem os privilégios de usuário do banco de dados AZACSNAP apropriados configurados de acordo com o guia de instalação. Verifique os privilégios do usuário com o seguinte comando:

hdbsql -U AZACSNAP "select GRANTEE,GRANTEE_TYPE,PRIVILEGE,IS_VALID,IS_GRANTABLE from sys.granted_privileges " | grep -i -e GRANTEE -e azacsnap

O comando deve retornar a seguinte saída:

GRANTEE,GRANTEE_TYPE,PRIVILEGE,IS_VALID,IS_GRANTABLE
"AZACSNAP","USER","BACKUP ADMIN","TRUE","FALSE"
"AZACSNAP","USER","CATALOG READ","TRUE","FALSE"
"AZACSNAP","USER","CREATE ANY","TRUE","TRUE"

O erro também pode fornecer mais informações para ajudar a determinar os privilégios do SAP HANA necessários, como Detailed info for this error can be found with guid '99X9999X99X9999X99X99XX999XXX999' SQLSTATE: HY000. Nesse caso, siga as instruções no Portal de ajuda do SAP: GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS, que recomendam o uso da seguinte consulta SQL para determinar os detalhes do privilégio necessário:

CALL SYS.GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS ('99X9999X99X9999X99X99XX999XXX999', ?)
GUID,CREATE_TIME,CONNECTION_ID,SESSION_USER_NAME,CHECKED_USER_NAME,PRIVILEGE,IS_MISSING_ANALYTIC_PRIVILEGE,IS_MISSING_GRANT_OPTION,DATABASE_NAME,SCHEMA_NAME,OBJECT_NAME,OBJECT_TYPE
"99X9999X99X9999X99X99XX999XXX999","2021-01-01 01:00:00.180000000",120212,"AZACSNAP","AZACSNAP","DATABASE ADMIN or DATABASE BACKUP ADMIN","FALSE","FALSE","","","",""

No exemplo anterior, adicionar o privilégio DATABASE BACKUP ADMIN ao usuário AZACSNAP do SYSTEMDB deve resolver o erro de privilégio insuficiente.

Próximas etapas