Resolver problemas da ferramenta instantâneo consistente do Aplicação Azure (AzAcSnap)

Este artigo descreve como resolver problemas ao utilizar a ferramenta instantâneo consistente (AzAcSnap) Aplicação Azure para Azure NetApp Files e a Instância Grande do Azure.

Poderá encontrar vários problemas comuns ao executar comandos do AzAcSnap. Siga as instruções para resolver os problemas. Se ainda tiver problemas, abra um Pedido de Serviço para Suporte da Microsoft a partir do portal do Azure e atribua o pedido à fila de Instâncias Grandes do SAP HANA.

O comando do AzAcSnap não é executado

Em alguns casos, o AzAcSnap não inicia devido ao ambiente do utilizador.

Falha ao criar CoreCLR

O AzAcSnap é escrito em .NET e o CoreCLR é um motor de execução para aplicações .NET, executando funções como o carregamento de código de byte IL, compilação para o código do computador e libertação da memória. Neste caso, existe um problema ambiental a impedir o arranque do motor CoreCLR.

Uma causa comum é permissões limitadas ou configuração ambiental para o utilizador do sistema operativo AzAcSnap, normalmente "azacsnap".

O erro Failed to create CoreCLR, HRESULT: 0x80004005 pode ser causado pela falta de acesso de escrita do utilizador azacsnap ao TMPDIRsistema .

Nota

Todas as linhas de comandos que começam com # são comandos executados como root, todas as linhas de comandos que começam por > são executadas como azacsnap utilizador.

Verifique a /tmp propriedade e as permissões (tenha em atenção neste exemplo que apenas o root utilizador pode ler e escrever /tmpem ):

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

Um típico /tmp tem as seguintes permissões, o que permitiria ao utilizador azacsnap executar 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 /tmp diretório, crie um utilizador específico TMPDIR.

Crie um TMPDIR para o azacsnap utilizador:

> 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 dos TMPDIR utilizadores teria de ser permanente ao alterar o perfil do utilizador (por exemplo $HOME/.bashrc , ou $HOME/.bash_profile). Também seria necessário limpar o reinício do TMPDIR sistema, que normalmente é automático para /tmp.

Verificar ficheiros de registo, ficheiros de resultados e syslog

Algumas das melhores origens de informações para investigar problemas do AzAcSnap são os ficheiros de registo, os ficheiros de resultados e o registo do sistema.

Ficheiros de registo

Os ficheiros de registo do AzAcSnap são armazenados no diretório configurado pelo logPath parâmetro no ficheiro de configuração do AzAcSnap. O nome de ficheiro de configuração predefinido é azacsnap.json e o valor predefinido para logPath é ./logs, o que significa que os ficheiros de registo são escritos no diretório ./logs relativo ao local onde o azacsnap comando é executado. Se fizer uma logPath localização absoluta, como /home/azacsnap/logs, azacsnap produz sempre os registos em /home/azacsnap/logs, independentemente de onde executar o azacsnap comando.

O nome do ficheiro de registo baseia-se no nome da aplicação, azacsnap, no comando executado com -c, como backup, testou details, e no nome de ficheiro de configuração predefinido, como azacsnap.json. Com o -c backup comando , um nome de ficheiro de registo predefinido seria azacsnap-backup-azacsnap.log, escrito no diretório configurado por logPath.

Esta convenção de nomenclatura permite vários ficheiros de configuração, um por base de dados, para ajudar a localizar os ficheiros de registo associados. Se o nome do ficheiro de configuração for SID.json, o nome do ficheiro de registo ao utilizar a opção azacsnap -c backup --configfile SID.json é azacsnap-backup-SID.log.

Ficheiros de resultados e syslog

Para o comando, o -c backup AzAcSnap escreve num ficheiro *.result . O objetivo do ficheiro *.result é fornecer uma confirmação de alto nível de êxito/falha. Se o ficheiro *.result estiver vazio, assuma a falha. Qualquer saída escrita no ficheiro *.result também é exportada para o registo do sistema (por exemplo, /var/log/messages) com o logger comando . O nome de ficheiro *.result tem o mesmo nome base que o ficheiro de registo para permitir a correspondência do ficheiro de resultado com o ficheiro de configuração e o ficheiro de registo de cópia de segurança. O ficheiro *.result entra na mesma localização que os outros ficheiros de registo e é um ficheiro de saída de uma linha simples.

  1. Exemplo de conclusão com êxito:

    1. Saída para o ficheiro *.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 AzAcSnap captou a falha:

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

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

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

Resolver problemas com o comando "test storage" falhado

O comando azacsnap -c test --test storage poderá não ser concluído com êxito.

Verificar firewalls de rede

A comunicação com Azure NetApp Files pode falhar ou exceder o limite de tempo. Para resolver problemas, confirme que as regras da firewall não estão a bloquear 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

Utilizar Cloud Shell para validar ficheiros de configuração

Pode testar se o principal de serviço está configurado corretamente com Cloud Shell através do portal do Azure. Utilizar Cloud Shell testes para a configuração correta, ignorando os controlos de rede numa rede virtual ou máquina virtual (VM).

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

  2. Crie um diretório de teste, por exemplo mkdir azacsnap.

  3. Mude para o diretório azacsnap e transfira a versão mais recente do 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 têm o seguinte aspeto:

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

  7. Execute o storage teste.

    ./azacsnap -c test --test storage
    

    Nota

    A conclusão do comando de teste pode demorar cerca de 90 segundos.

Teste falhado na Instância Grande do Azure

O exemplo de erro seguinte é da execução 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 resolver este erro, não responda yes. Certifique-se de que o endereço IP de armazenamento está correto. Pode confirmar o endereço IP de armazenamento com a equipa de operações da Microsoft.

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

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

O exemplo seguinte mostra o resultado esperado:

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 Azure NetApp Files

O exemplo de erro seguinte é a execução azacsnap com 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 resolver este erro:

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

  2. Verifique o ficheiro de registo, por exemplo, logs/azacsnap-test-azacsnap.log, para ver se o ficheiro do principal de serviço tem o conteúdo correto. A seguinte saída do ficheiro de registo 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 ficheiro de registo para ver se o principal de serviço expirou. O seguinte exemplo de ficheiro de registo 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 um novo Principal de Serviço, consulte a secção Ativar a comunicação com o Armazenamento no guia da ferramenta Instalar Aplicação Azure Instantâneo Consistente.

Resolver problemas com o comando "test hana" falhado

O comando azacsnap -c test --test hana poderá não ser concluído com êxito.

Comando não encontrado

Ao configurar a comunicação com o SAP HANA, o hdbuserstore programa é utilizado para criar as definições de comunicação segura. O AzAcSnap também requer o hdbsql programa para todas as comunicações com o SAP HANA. Normalmente, estes programas estão em /usr/sap/<SID>/SYS/exe/hdb/ ou /usr/sap/hdbclient e têm de estar no $PATH.

  • No exemplo seguinte, o hdbsql comando não está no $PATH.

    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 seguinte adiciona temporariamente o hdbsql comando a $PATH, permitindo que azacsnap seja executado corretamente.

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

Certifique-se de que o instalador adicionou a localização destes ficheiros ao utilizador do $PATHAzAcSnap.

Nota

Para adicionar permanentemente ao ficheiro do utilizador $PATH, atualize o ficheiro $HOME/.profile do utilizador.

Valor inválido para chave

Esta saída de comando mostra que a chave de ligação não foi configurada corretamente com o hdbuserstore Set comando .

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, veja Introdução ao AzAcSnap.

Teste com falha

Ao validar a comunicação com o SAP HANA ao executar um teste com azacsnap -c test --test hanao , poderá obter o seguinte 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 resolver este erro:

  1. Verifique o ficheiro de configuração, por exemplo azacsnap.json, para cada instância HANA, para garantir que os valores da base de dados SAP HANA estão corretos.

  2. Execute o seguinte comando para verificar se o hdbsql comando está no caminho e se consegue ligar ao servidor SAP HANA.

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

    O exemplo seguinte mostra o resultado 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 azacsnap apresentar um erro como * 258: insufficient privilege, verifique se o utilizador tem os privilégios de utilizador da base de dados AZACSNAP adequados configurados de acordo com o guia de instalação. Verifique os privilégios do utilizador 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 devolver o seguinte resultado:

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 pode fornecer mais informações para ajudar a determinar os privilégios necessários do SAP HANA, como Detailed info for this error can be found with guid '99X9999X99X9999X99X99XX999XXX999' SQLSTATE: HY000. Neste caso, siga as instruções no Portal de Ajuda do SAP - GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS, que recomendam a utilização 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 DATABASE BACKUP ADMIN privilégio ao utilizador AZACSNAP do SYSTEMDB deve resolver o erro de privilégio insuficiente.

Passos seguintes