Compartir por


Solución de problemas con la herramienta Azure Application Consistent Snapshot (AzAcSnap)

En este artículo se describe cómo solucionar problemas al usar la herramienta Azure Application Consistent Snapshot (AzAcSnap) para Azure NetApp Files y Azure (instancias grandes).

Es posible que encuentre varios problemas comunes al ejecutar comandos AzAcSnap. Siga las instrucciones para solucionar los problemas. Si aún tiene problemas, abra una solicitud de servicio técnico del soporte técnico de Microsoft en Azure Portal y asigne la solicitud a la cola de instancias grandes de SAP HANA.

El comando AzAcSnap no se ejecutará

En algunos casos, AzAcSnap no se iniciará debido al entorno del usuario.

No se pudo crear CoreCLR

AzAcSnap está escrito en .NET y CoreCLR es un motor de ejecución para aplicaciones .NET, que realiza funciones como la carga de código de bytes IL, la compilación en código de máquina y la recolección de elementos no utilizados. En este caso, hay un problema ambiental que impide que se inicie el motor CoreCLR.

Una causa común son los permisos limitados o la configuración del entorno para el usuario del sistema operativo AzAcSnap, normalmente "azacsnap".

El error Failed to create CoreCLR, HRESULT: 0x80004005 puede deberse a la falta de acceso de escritura para el usuario de azacsnap al sistema TMPDIR.

Nota:

Todas las líneas de comandos a partir # de son comandos que se ejecutan como root, todas las líneas de comandos que comienzan por > se ejecutan como azacsnap usuario.

Compruebe la propiedad y los /tmp permisos (tenga en cuenta que en este ejemplo solo el root usuario puede leer y escribir /tmpen ):

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

Un típico /tmp tiene los siguientes permisos, lo que permitiría al usuario de azacsnap ejecutar el comando azacsnap:

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

Si no es posible cambiar los permisos de /tmp directorio, cree un usuario específico TMPDIR.

Cree un TMPDIR para el azacsnap usuario:

> 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

Cambiar el valor del TMPDIR usuario tendría que ser permanente cambiando el perfil del usuario (por ejemplo, $HOME/.bashrc o $HOME/.bash_profile). También sería necesario limpiar el reinicio del TMPDIR sistema; esto suele ser automático para /tmp.

Comprobación de archivos de registro, archivos de resultados y syslog

Algunas de las mejores fuentes de información para investigar los problemas de AzAcSnap son los archivos de registro, los archivos de resultados y el registro del sistema.

Archivos de registro

Los archivos de registro de AzAcSnap se almacenan en el directorio configurado por el parámetro logPath en el archivo de configuración de AzAcSnap. El nombre de archivo de configuración predeterminado es azacsnap.json, y el valor predeterminado de logPath es ./logs, lo que significa que los archivos de registro se escriben en el directorio ./logs relativo a la ubicación en la que se ejecuta el comando azacsnap. Si hace que logPath sea una ubicación absoluta, como /home/azacsnap/logs, azacsnap siempre saca los registros en /home/azacsnap/logs, independientemente de dónde ejecute el comando azacsnap.

El nombre del archivo de registro se basa en el nombre de la aplicación, azacsnap, el comando ejecutado con -c, como backup, test o details, y el nombre del archivo de configuración predeterminado, como azacsnap.json. Con el comando -c backup, un nombre de archivo de registro predeterminado sería azacsnap-backup-azacsnap.log, escrito en el directorio configurado por logPath.

Esta convención de nomenclatura permite tener varios archivos de configuración, uno por base de datos, para ayudar a ubicar los archivos de registro asociados. Si el nombre del archivo de configuración es SID.json, el nombre del archivo de registro cuando se utiliza la opción azacsnap -c backup --configfile SID.json es azacsnap-backup-SID.log.

Archivo de resultados y syslog

Para el comando -c backup, AzAcSnap escribe en un archivo *.result. El propósito del archivo *.result es proporcionar una confirmación de alto nivel de éxito o error. Si el archivo *.result está vacío, debe suponer que se ha producido un error. Cualquier salida escrita en el archivo *.result también se genera en el registro del sistema (por ejemplo, /var/log/messages) mediante el comando logger. El nombre de archivo *.result tiene el mismo nombre base que el archivo de registro para permitir la coincidencia del archivo de resultados con el archivo de configuración y el archivo de registro de copias de seguridad. El archivo *.result entra en la misma ubicación que los demás archivos de registro y es un simple archivo de salida de una línea.

  1. Ejemplo de finalización correcta:

    1. Salida al archivo *.result :

      Database # 1 (PR1) : completed ok
      
    2. Salida a /var/log/messages:

      Dec 17 09:01:13 azacsnap-rhel azacsnap: Database # 1 (PR1) : completed ok
      
  2. Salida de ejemplo en la que se ha producido un error y AzAcSnap capturó el error:

    1. Salida al archivo *.result :

      Database # 1 (PR1) : failed
      
    2. Salida a /var/log/messages:

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

Solución de problemas del comando "test storage"

Es posible que el comando azacsnap -c test --test storage no se complete correctamente.

Comprobación de firewalls de red

La comunicación con Azure NetApp Files puede producir un error o agotar el tiempo de espera. Para solucionar el problema, asegúrese de que las reglas de firewall no bloquean el tráfico de salida del sistema que ejecuta AzAcSnap en las siguientes direcciones y puertos TCP/IP:

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

Uso de Cloud Shell para validar archivos de configuración

Puede probar si la entidad de servicio está configurada correctamente mediante Cloud Shell desde Azure Portal. El uso de Cloud Shell comprueba la configuración correcta, omitiendo los controles de red dentro de una red virtual o máquina virtual (VM).

  1. En Azure Portal, abra una sesión de Cloud Shell.

  2. Cree un directorio de prueba, por ejemplo mkdir azacsnap.

  3. Cambie al directorio azacsnap y descargue la versión más reciente de AzAcSnap.

    wget https://aka.ms/azacsnapinstaller
    
  4. Convierta el instalador en ejecutable, por ejemplo chmod +x azacsnapinstaller.

  5. Extraiga el archivo binario para realizar pruebas.

    ./azacsnapinstaller -X -d .
    

    Los resultados tienen un aspecto similar a la salida siguiente:

    +-----------------------------------------------------------+
    | Azure Application Consistent Snapshot Tool Installer |
    +-----------------------------------------------------------+
    |-> Installer version '5.0.2_Build_20210827.19086'
    |-> Extracting commands into ..
    |-> Cleaning up .NET extract dir
    
  6. Utilice el icono de carga/descarga de Cloud Shell para cargar el archivo de la entidad de servicio, azureauth.json, y el archivo de configuración de AzAcSnap, como azacsnap.json, para probarlo.

  7. Ejecute la prueba storage.

    ./azacsnap -c test --test storage
    

    Nota:

    El comando de prueba puede tardar unos 90 segundos en completarse.

Prueba con errores en Azure (instancias grandes)

El ejemplo siguiente procede de la ejecución de azacsnap en Azure (instancias grandes):

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 este error, no responda a yes. Asegúrese de que la dirección IP de almacenamiento sea correcta. Puede confirmar la dirección IP de almacenamiento con el equipo de operaciones de Microsoft.

El error suele aparecer cuando el usuario de almacenamiento de Azure (instancias grandes) no tiene acceso al almacenamiento subyacente. Para determinar si el usuario de almacenamiento tiene acceso al almacenamiento, ejecute el comando ssh para validar la comunicación con la plataforma de almacenamiento.

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

En el siguiente ejemplo se muestra la salida 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

Prueba con error con Azure NetApp Files

El ejemplo siguiente procede de la ejecución de azacsnap en 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 este error:

  1. Compruebe la existencia del archivo de entidad de servicio, azureauth.json, tal como se establece en el archivo de configuración azacsnap.json.

  2. Compruebe el archivo de registro, por ejemplo, logs/azacsnap-test-azacsnap.log, para ver si el archivo de la entidad de servicio tiene el contenido correcto. La siguiente salida del archivo de registro muestra que la clave secreta de cliente no es vá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. Compruebe el archivo de registro para ver si la entidad de servicio ha expirado. En el siguiente ejemplo de archivo de registro se muestra que las claves secretas del cliente han expirado.

    [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
    

Sugerencia

Para más información sobre cómo generar una nueva Entidad de servicio, consulte la sección Habilitar la comunicación con Storage en la guía de la herramienta para instalar Azure Application Consistent Snapshot.

Solución de problemas con el comando "test hana"

Es posible que el comando azacsnap -c test --test hana no se complete correctamente.

No se encontró el comando

Al configurar la comunicación con SAP HANA se usa el programa hdbuserstore para crear la configuración de comunicación segura. AzAcSnap también requiere el programa hdbsql para todas las comunicaciones con SAP HANA. Estos programas suelen estar en /usr/sap/<SID>/SYS/exe/hdb/ o /usr/sap/hdbclient y deben estar en el $PATH del usuario.

  • En el siguiente ejemplo, el comando hdbsql no está en el objeto $PATH del usuario.

    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
    
  • El siguiente ejemplo agrega temporalmente el comando hdbsql al objeto $PATH del usuario, permitiendo que azacsnap se ejecute correctamente.

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

Asegúrese de que el instalador agregó la ubicación de estos archivos al objeto $PATH del usuario de AzAcSnap.

Nota:

Para la incorporación permanente al $PATH del usuario, actualice el archivo $HOME/.profile del usuario.

Valor de la clave no válido

La salida de este comando muestra que la clave de conexión no se ha configurado correctamente con el 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 obtener más información sobre la configuración de hdbuserstore, consulte Introducción a AzAcSnap.

Prueba con errores

Al validar la comunicación con SAP HANA mediante la ejecución de una prueba con azacsnap -c test --test hana, podría aparecer el siguiente error:

> 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 este error:

  1. Compruebe el archivo de configuración (por ejemplo, azacsnap.json) de cada instancia de HANA para asegurarse de que los valores de la base de datos de SAP HANA sean correctos.

  2. Ejecute ejecutar el siguiente comando para comprobar si el comando hdbsql está en la ruta de acceso y puede conectarse al servidor de SAP HANA.

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

    En el ejemplo siguiente se muestra la salida cuando el comando se ejecuta correctamente:

    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
    

Error de privilegio insuficiente

Si la ejecución azacsnap presenta un error como * 258: insufficient privilege, compruebe que el usuario tiene configurados los privilegios de usuario de la base de datos AZACSNAP adecuados según la guía de instalación. Compruebe los privilegios del usuario con el siguiente comando:

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

Este comando debe devolver la salida siguiente:

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"

El error también puede proporcionar información adicional para ayudar a determinar los privilegios SAP HANA necesarios, como Detailed info for this error can be found with guid '99X9999X99X9999X99X99XX999XXX999' SQLSTATE: HY000. En este caso, siga las instrucciones en el portal de ayuda de SAP: GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS, que recomienda usar la siguiente consulta SQL para determinar los detalles sobre el privilegio necesario.

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","","","",""

En el ejemplo anterior, al agregar el privilegio DATABASE BACKUP ADMIN al usuario AZACSNAP de SYSTEMDB se debería resolver el error de privilegios insuficientes.

Pasos siguientes