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 de 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 de .NET, que realiza funciones como la carga de código de byte IL, la compilación en código máquina y la recolección de elementos no utilizados. En este caso, hay un problema en el entorno 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 a la variable de entorno TMPDIR
del sistema.
Nota:
Todas las líneas de comandos que empiezan con #
son comandos que se ejecutan como root
; todas las líneas de comandos que empiezan con >
se ejecutan como usuario de azacsnap
.
Compruebe la propiedad y los permisos de /tmp
(tenga en cuenta que en este ejemplo solo el usuario root
puede leer y escribir en /tmp
):
# ls -ld /tmp
drwx------ 9 root root 8192 Mar 31 10:50 /tmp
Un directorio /tmp
típico tiene los siguientes permisos, lo que permitiría al usuario de azacsnap ejecutar el comando de azacsnap:
# ls -ld /tmp
drwxrwxrwt 9 root root 8192 Mar 31 10:51 /tmp
Si no es posible cambiar los permisos del directorio /tmp
, cree una variable de entorno TMPDIR
específica del usuario.
Cree una variable de entorno TMPDIR
para el usuario de 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
Cambiar la variable de entorno TMPDIR
del 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 la variable de entorno TMPDIR
al reiniciar el sistema, normalmente es 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 archivo de salida simple de una línea.
Ejemplo de una realización correcta:
Salida en el archivo *.result:
Database # 1 (PR1) : completed ok
Salida en
/var/log/messages
:Dec 17 09:01:13 azacsnap-rhel azacsnap: Database # 1 (PR1) : completed ok
Salida de ejemplo en la que se ha producido un error y AzAcSnap capturó este:
Salida en el archivo *.result:
Database # 1 (PR1) : failed
Salida en
/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).
En Azure Portal, abra una sesión de Cloud Shell.
Cree un directorio de prueba, por ejemplo
mkdir azacsnap
.Cambie al directorio azacsnap y descargue la versión más reciente de AzAcSnap.
wget https://aka.ms/azacsnapinstaller
Convierta el instalador en ejecutable, por ejemplo
chmod +x azacsnapinstaller
.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
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.
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:
Compruebe la existencia del archivo de entidad de servicio, azureauth.json, tal como se establece en el archivo de configuración azacsnap.json.
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.
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 queazacsnap
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:
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.
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.