你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何排查在对 Azure NetApp 文件和 Azure 大型实例使用 Azure 应用程序一致性快照 (AzAcSnap) 工具时出现的问题。
运行 AzAcSnap 命令时,可能会遇到几种常见问题。 请按照说明排查问题。
重要
为了确保准确的故障排除和支持,应使用最新的 AzAcSnap 版本重现问题。 在报告任何问题之前更新到最新版本。 如果仍有问题,请转到 Azure 门户,选择“支持 + 故障排除”并搜索有关 AzAcSnap 问题的指南,这样就可以打开Microsoft支持的服务请求。
AzAcSnap 命令无法运行
在某些情况下,AzAcSnap 会因用户环境而无法启动。
未能创建 CoreCLR
AzAcSnap 以 .NET 编写,CoreCLR 是用于 .NET 应用的执行引擎。 它执行 IL 字节代码加载、编译到计算机代码和垃圾回收等函数。 出现 CoreCLR 错误时,通常是因为存在环境问题阻止了 CoreCLR 引擎的启动。
常见原因是 AzAcSnap 操作系统用户(通常是“azacsnap”)的权限或环境设置有限。
错误 Failed to create CoreCLR, HRESULT: 0x80004005
可能是由于 azacsnap 用户缺少对系统的 TMPDIR
的写入访问权限导致的。
注意
以 #
开头的所有命令行都是以 root
身份运行的命令,而以 >
开头的所有命令行都以 azacsnap
用户身份运行。
检查 /tmp
所有权和权限(请注意,在本例中,只有 root
用户可以读取和写入 /tmp
):
# ls -ld /tmp
drwx------ 9 root root 8192 Mar 31 10:50 /tmp
典型的 /tmp
具有以下权限,这允许 azacsnap 用户运行 azacsnap 命令:
# ls -ld /tmp
drwxrwxrwt 9 root root 8192 Mar 31 10:51 /tmp
如果无法更改 /tmp
目录权限,请创建特定于用户的 TMPDIR
。
为 TMPDIR
用户创建 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)
重要
通过更改用户配置文件(例如 TMPDIR
或 $HOME/.bashrc
),需要永久更改用户的 $HOME/.bash_profile
。 进行此更改意味着在系统重新启动时需要手动清理 TMPDIR
。 对于 TMPDIR
,此 /tmp
清理通常自动完成。
检查日志文件、结果文件和 syslog
用于调查 AzAcSnap 问题的最佳信息来源包括日志文件、结果文件和系统日志。
日志文件
AzAcSnap 日志文件存储在 AzAcSnap 配置文件中 logPath
参数配置的目录中。 默认配置文件名为 azacsnap.json, 的默认值为 ./logs,这意味着,日志文件将写入到相对于 logPath
命令运行位置的 ./logs 目录。 如果将 logPath
设为绝对位置(例如 /home/azacsnap/logs),则 始终将日志输出到 /home/azacsnap/logs,无不管 azacsnap
命令在何处运行。
日志文件名基于应用程序名称 azacsnap
、与 -c
结合运行的命令(例如 backup
、test
或 details
)以及默认配置文件名(例如 azacsnap.json)。 使用 -c backup
命令时,默认日志文件名将是 azacsnap-backup-azacsnap.log,该文件写入到 配置的目录。
此命名约定允许多个配置文件(每个数据库各有一个),以帮助查找关联的日志文件。 如果配置文件名为 SID.json,则使用 选项时的日志文件名为 azacsnap-backup-SID.log。
结果文件和 syslog
对于 -c backup
命令,AzAcSnap 将写入 *.result 文件。 *.result 文件的用途是大致确认成功/失败。 如果 *.result 文件为空,则假定失败。 写入 *.result 文件的任何输出也会通过使用 命令输出到系统日志(例如 /var/log/messages
)。 *.result 文件名与日志文件具有相同的基名称,以便将结果文件与配置文件和备份日志文件匹配。 *.result 文件放置在与其他日志文件相同的位置,并且是简单的单行输出文件。
成功完成示例:
输出到 *.result 文件:
Database # 1 (PR1) : completed ok
输出到
/var/log/messages
:Dec 17 09:01:13 azacsnap-rhel azacsnap: Database # 1 (PR1) : completed ok
发生故障的示例输出,AzAcSnap 捕获了此故障:
输出到 *.result 文件:
Database # 1 (PR1) : failed
输出到
/var/log/messages
:Dec 19 09:00:30 azacsnap-rhel azacsnap: Database # 1 (PR1) : failed
排查“test storage”命令失败的原因
命令 azacsnap -c test --test storage
可能未成功完成。
检查网络防火墙
与 Azure NetApp 文件的通信可能会失败或超时。若要进行故障排除,请确保防火墙规则不会阻止从运行 AzAcSnap 的系统到以下地址和 TCP/IP 端口的出站流量:
https://management.azure.com:443
https://login.microsoftonline.com:443
使用 Cloud Shell 验证配置文件
可以通过 Azure 门户使用 Cloud Shell 来测试服务主体的配置是否正确。 使用 Cloud Shell 并绕过虚拟网络或虚拟机 (VM) 中的网络控制来测试配置是否正确。
在 Azure 门户中打开一个 Cloud Shell 会话。
创建一个测试目录,例如
mkdir azacsnap
。切换到 azacsnap 目录,并下载最新版本的 AzAcSnap。
wget https://aka.ms/azacsnapinstaller
使安装程序可执行,例如
chmod +x azacsnapinstaller
。提取二进制文件以进行测试。
./azacsnapinstaller -X -d .
结果类似于以下输出:
+-----------------------------------------------------------+ | Azure Application Consistent Snapshot Tool Installer | +-----------------------------------------------------------+ |-> Installer version '5.0.2_Build_20210827.19086' |-> Extracting commands into .. |-> Cleaning up .NET extract dir
使用 Cloud Shell 上传/下载图标上传服务主体文件 azureauth.json 和 AzAcSnap 配置文件(例如 azacsnap.json)以进行测试。
运行
storage
测试。./azacsnap -c test --test storage
注意
测试命令可能需要大约 90 秒才能完成。
Azure 大型实例上的测试失败
以下错误示例是在 Azure 大型实例上运行 azacsnap
后的结果:
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)?
若要排查此错误,请不要响应 yes
。 确保你的存储 IP 地址正确。 可与 Microsoft 运营团队确认存储 IP 地址。
当 Azure 大型实例存储用户无权访问底层存储时,通常会出现该错误。 若要确定存储用户是否有权访问存储,请运行 ssh
命令以验证与存储平台的通信。
ssh <StorageBackupname>@<Storage IP address> "volume show -fields volume"
以下示例显示了预期的输出:
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
对 Azure NetApp 文件测试失败
以下错误示例是对 Azure NetApp 文件运行 azacsnap
后的结果:
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']
解决此错误:
检查 azacsnap.json 配置文件中设置的服务主体文件 azureauth.json 是否存在。
检查日志文件(例如 logs/azacsnap-test-azacsnap.log),查看服务主体文件的内容是否正确。 以下日志文件输出显示客户端机密密钥无效。
[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.
检查日志文件以查看服务主体是否已过期。 以下日志文件示例显示客户端机密密钥已过期。
[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
提示
有关生成新的服务主体的详细信息,请参阅“安装 Azure 应用程序一致性快照”工具指南中的“启用与存储的通信”部分。
排查“test hana”命令失败的原因
命令 azacsnap -c test --test hana
可能未成功完成。
找不到命令
当设置与 SAP HANA 的通信时, hdbuserstore
程序用于创建安全通信设置。 AzAcSnap 还要求使用 hdbsql
程序来与 SAP HANA 进行各种通信。 这些程序通常位于 /usr/sap/<SID>/SYS/exe/hdb/ 或 /usr/sap/hdbclient 下,且必须在用户的 中。
在以下示例中,
hdbsql
命令不在用户的$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
以下示例临时将
hdbsql
命令添加到用户的$PATH
中,使azacsnap
能够正常运行。export PATH=$PATH:/hana/shared/H80/exe/linuxx86_64/hdb/
确保安装程序将这些文件的位置添加到 AzAcSnap 用户的 $PATH
中。
注意
若要永久添加到用户的 $PATH
中,请更新用户的 $HOME/.profile 文件。
密钥值无效
此命令输出显示连接密钥未使用 hdbuserstore Set
命令正确设置。
hdbsql -n 172.18.18.50 -i 00 -U AZACSNAP "select version from sys.m_database"
* -10104: Invalid value for KEY (AZACSNAP)
有关 hdbuserstore
的设置的详细信息,请参阅 AzAcSnap 入门。
失败的测试
在使用 azacsnap -c test --test hana
运行测试来验证与 SAP HANA 的通信时,可能会收到以下错误:
> 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
解决此错误:
检查每个 HANA 实例的配置文件(例如 azacsnap.json),以确保 SAP HANA 数据库值正确。
运行以下命令以验证
hdbsql
命令是否在路径中,以及它是否可以连接到 SAP HANA 服务器。hdbsql -n 172.18.18.50 - i 00 -d SYSTEMDB -U AZACSNAP "\s"
以下示例显示正常运行命令时的输出:
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
特权不足错误
如果运行 azacsnap
时出现类似于 * 258: insufficient privilege
的错误,请检查是否根据安装指南为用户设置了适当的 AZACSNAP 数据库用户特权。 使用以下命令验证用户的特权:
hdbsql -U AZACSNAP "select GRANTEE,GRANTEE_TYPE,PRIVILEGE,IS_VALID,IS_GRANTABLE from sys.granted_privileges " | grep -i -e GRANTEE -e azacsnap
该命令应返回以下输出:
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"
该错误可能会提供更多信息来帮助确定所需的 SAP HANA 特权,例如 Detailed info for this error can be found with guid '99X9999X99X9999X99X99XX999XXX999' SQLSTATE: HY000
。 在这种情况下,请按照 SAP 帮助门户 - GET_INSUFFICIENT_PRIVILEGE_ERROR_DETAILS 中的说明操作,其中建议使用以下 SQL 查询来确定所需特权的详细信息:
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","","","",""
在以上示例中,将 DATABASE BACKUP ADMIN
特权添加到 SYSTEMDB 的 AZACSNAP 用户应该可以解决特权不足错误。