你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
有关使用 Azure 应用程序一致性快照工具的提示和技巧
本文提供了在使用 AzAcSnap 时可能会有所帮助的提示和技巧。
用于控制 azacsnap 行为的全局替代设置
AzAcSnap 8 引入了一个新的全局设置文件 (.azacsnaprc
),该文件必须与执行 azacsnap 位于同一(当前工作)目录中。 文件名是 .azacsnaprc
,使用点“.”字符作为文件名开头,将其隐藏到标准目录列表。 该文件允许设置控制 AzAcSnap 行为的全局设置。 格式是每行一个条目,其中包含支持的自定义变量和新的重写值。
可通过添加/编辑全局重写设置文件或通过将设置设置设置为环境变量来控制的设置如下:
- MAINLOG_LOCATION 用于自定义“main-log”输出文件的位置,该文件称为
azacsnap.log
,并在 AzAcSnap 8 中引入。 值应为绝对路径,默认值 = '.'(即当前工作目录)。 例如,为了确保“main-log”输出文件转到/home/azacsnap/bin/logs
将以下内容添加到.azacsnaprc
文件:MAINLOG_LOCATION=/home/azacsnap/bin/logs
- AZURE_MANAGEMENT_ENDPOINT 自定义 AzAcSnap 将在 AzAcSnap 9a 中引入 Azure REST API 调用的 Azure 管理终结点的位置。 值应为 URL 路径,默认值 = 'https://management.azure.com'。 例如,若要配置 AzAcSnap 以确保所有管理调用都转到 US Govt Cloud 的 Azure 管理终结点(ref:面向开发人员的 Azure 政府指南),请将以下内容添加到
.azacsnaprc
文件中:AZURE_MANAGEMENT_ENDPOINT=https://management.usgovcloudapi.net
注意
从 AzAcSnap 9a 开始,所有这些值也可以设置为命令行环境变量,或者而不是 .azacsnaprc
文件。 例如,在 Linux 上,可以在运行 AzAcSnap 之前使用 export AZURE_MANAGEMENT_ENDPOINT=https://management.usgovcloudapi.net
设置 AZURE_MANAGEMENT_ENDPOINT
。
主日志分析
AzAcSnap 8 引入了新的“main-log”,用于对 AzAcSnap 的运行进行更简单分析。 此文件的灵感来源是 SAP HANA 备份目录,该目录显示 AzAcSnap 启动的时间、花费的时间以及快照名称是什么。 使用 AzAcSnap 时,此想法已进一步纳入每个 AzAcSnap 命令的信息,特别是 -c
选项,并且文件具有以下标头:
DATE_TIME,OPERATION_NAME,STATUS,SID,DATABASE_TYPE,DURATION,SNAPSHOT_NAME,AZACSNAP_VERSION,AZACSNAP_CONFIG_FILE,VOLUME
运行 AzAcSnap 时,它会根据 -c
所使用的命令追加到日志中,输出示例如下所示:
2023-03-29T16:10:57.8643546+13:00,about,started,,,,,8,azacsnap.json,
2023-03-29T16:10:57.8782148+13:00,about,SUCCESS,,,0:00:00.0258013,,8,azacsnap.json,
2023-03-29T16:11:55.7276719+13:00,backup,started,PR1,Hana,,pr1_hourly__F47B181A117,8,PR1.json,(data)HANADATA_P;(data)HANASHARED_P;(data)VGvol01;
2023-03-29T16:13:03.3774633+13:00,backup,SUCCESS,PR1,Hana,0:01:07.7558663,pr1_hourly__F47B181A117,8,PR1.json,(data)HANADATA_P;(data)HANASHARED_P;(data)VGvol01;
2023-03-29T16:13:30.1312963+13:00,details,started,PR1,Hana,,,8,PR1.json,(data)HANADATA_P;(data)HANASHARED_P;(data)VGvol01;(other)HANALOGBACKUP_P;
2023-03-29T16:13:33.1806098+13:00,details,SUCCESS,PR1,Hana,0:00:03.1380686,,8,PR1.json,(data)HANADATA_P;(data)HANASHARED_P;(data)VGvol01;(other)HANALOGBACKUP_P;
此格式使文件能够使用 Linux 命令 watch
、grep
、head
、tail
和 column
来获取 AzAcSnap 备份的连续更新。 在单 shell 脚本中监视 AzAcSnap 的这些命令的示例组合如下:
#!/bin/bash
#
# mainlog-watcher.sh
# Monitor execution of AzAcSnap backup commands
#
# These values can be modified as appropriate.
# Mainlog header fields:
# 1. DATE_TIME,
# 2. OPERATION_NAME,
# 3. STATUS,
# 4. SID,
# 5. DATABASE_TYPE,
# 6. DURATION,
# 7. SNAPSHOT_NAME,
# 8. AZACSNAP_VERSION,
# 9. AZACSNAP_CONFIG_FILE,
# 10. VOLUME
FIELDS_TO_INCLUDE="1,2,3,5,4,6,7"
SCREEN_REFRESH_SECS=2
#
# Use AzAcSnap global settings file (.azacsnaprc) if available,
# otherwise use the default location of the current working directory.
AZACSNAP_RC=".azacsnaprc"
if [ -f ${AZACSNAP_RC} ]; then
source ${AZACSNAP_RC} 2> /dev/null
else
MAINLOG_LOCATION="."
fi
cd ${MAINLOG_LOCATION}
echo "Changing current working directory to ${MAINLOG_LOCATION}"
#
# Default MAINLOG filename.
HOSTNAME=$(hostname)
MAINLOG_FILENAME="azacsnap.log"
#
# High-level explanation of how commands used.
# `watch` - continuously monitoring the command output.
# `grep` - filter only backup runs.
# `head` and `tail` - add/remove column headers.
# `sed` to remove millisecs from date.
# `awk` format output for `column`.
# `column` - provide pretty output.
FIELDS_FOR_AWK=$(echo "${FIELDS_TO_INCLUDE}" | sed 's/^/\\\$/g' | sed 's/,/,\\\$/g')
PRINTOUT="{OFS=\\\",\\\";print ${FIELDS_FOR_AWK}}"
#
echo -n "Parsing '${MAINLOG_FILENAME}' for field #s ${FIELDS_TO_INCLUDE} = "
bash -c "cat ${MAINLOG_FILENAME} | grep -e \"DATE\" | head -n1 - | awk -F\",\" \"${PRINTOUT}\" "
#
watch -t -n ${SCREEN_REFRESH_SECS} \
"\
echo -n \"Monitoring AzAcSnap on '${HOSTNAME}' @ \" ; \
date ; \
echo ; \
cat ${MAINLOG_FILENAME} \
| grep -e \"DATE\" -e \",backup,\" \
| ( sleep 1; head -n1 - ; sleep 1; tail -n+2 - | tail -n20 \
| sed 's/\(:[0-9][0-9]\)\.[0-9]\{7\}/\1/' ; sleep 1 ) \
| awk -F\",\" \"${PRINTOUT}\" \
| column -s\",\" -t \
"
exit 0
每两秒生成刷新一次以下输出。
Monitoring AzAcSnap on 'azacsnap' @ Thu Sep 21 11:27:40 NZST 2023
DATE_TIME OPERATION_NAME STATUS DATABASE_TYPE SID DURATION SNAPSHOT_NAME
2023-09-21T07:00:02+12:00 backup started Oracle ORATEST1 all-volumes__F6B07A2D77A
2023-09-21T07:02:10+12:00 backup SUCCESS Oracle ORATEST1 0:02:08.0338537 all-volumes__F6B07A2D77A
2023-09-21T08:00:03+12:00 backup started Oracle ORATEST1 all-volumes__F6B09C83210
2023-09-21T08:02:12+12:00 backup SUCCESS Oracle ORATEST1 0:02:09.9954439 all-volumes__F6B09C83210
2023-09-21T09:00:03+12:00 backup started Oracle ORATEST1 all-volumes__F6B0BED814B
2023-09-21T09:00:03+12:00 backup started Hana PR1 pr1_hourly__F6B0BED817F
2023-09-21T09:01:10+12:00 backup SUCCESS Hana PR1 0:01:07.8575664 pr1_hourly__F6B0BED817F
2023-09-21T09:02:12+12:00 backup SUCCESS Oracle ORATEST1 0:02:09.4572157 all-volumes__F6B0BED814B
限制服务主体权限
可能需要限制 AzAcSnap 服务主体的范围。 查看 Azure RBAC 文档以详细了解 Azure 资源的精细访问管理。
下面是具有使 AzAcSnap 正常运行所需的最少必需操作的示例角色定义。
az role definition create --role-definition '{ \
"Name": "Azure Application Consistent Snapshot tool", \
"IsCustom": "true", \
"Description": "Perform snapshots on ANF volumes.", \
"Actions": [ \
"Microsoft.NetApp/*/read", \
"Microsoft.NetApp/netAppAccounts/capacityPools/volumes/snapshots/write", \
"Microsoft.NetApp/netAppAccounts/capacityPools/volumes/snapshots/delete" \
], \
"NotActions": [], \
"DataActions": [], \
"NotDataActions": [], \
"AssignableScopes": ["/subscriptions/<insert your subscription id>"] \
}'
若要使还原选项成功工作,AzAcSnap 服务主体还需要能够创建卷。 在这种情况下,角色定义需要添加额外的“Actions”子句,因此完整的服务主体应如以下示例所示。
az role definition create --role-definition '{ \
"Name": "Azure Application Consistent Snapshot tool", \
"IsCustom": "true", \
"Description": "Perform snapshots and restores on ANF volumes.", \
"Actions": [ \
"Microsoft.NetApp/*/read", \
"Microsoft.NetApp/netAppAccounts/capacityPools/volumes/snapshots/write", \
"Microsoft.NetApp/netAppAccounts/capacityPools/volumes/snapshots/delete", \
"Microsoft.NetApp/netAppAccounts/capacityPools/volumes/write" \
], \
"NotActions": [], \
"DataActions": [], \
"NotDataActions": [], \
"AssignableScopes": ["/subscriptions/<insert your subscription id>"] \
}'
手动拍摄快照
在执行任何备份命令 (azacsnap -c backup
) 之前,请通过运行测试命令来检查配置并验证是否成功执行了这些命令。 这些测试的正确执行证明 azacsnap
可以与 Azure 大型实例或 Azure NetApp 文件系统上的已安装 SAP HANA 数据库和 SAP HANA 基础存储系统通信。
azacsnap -c test --test hana
azacsnap -c test --test storage
随后若要获取手动数据库快照备份,请运行以下命令:
azacsnap -c backup --volume data --prefix hana_TEST --retention=1
设置自动快照备份
Unix/Linux 系统上的常见做法是使用 cron
自动运行系统上的命令。 快照工具的标准做法是设置用户的 crontab
。
用户 azacsnap
自动执行快照 crontab
的示例如下。
MAILTO=""
# =============== TEST snapshot schedule ===============
# Data Volume Snapshots - taken every hour.
@hourly (. /home/azacsnap/.profile ; cd /home/azacsnap/bin ; azacsnap -c backup --volume data --prefix hana_TEST --retention=9)
# Other Volume Snapshots - taken every 5 minutes, excluding the top of the hour when hana snapshots taken
5,10,15,20,25,30,35,40,45,50,55 * * * * (. /home/azacsnap/.profile ; cd /home/azacsnap/bin ; azacsnap -c backup --volume other --prefix logs_TEST --retention=9)
# Other Volume Snapshots - using an alternate config file to snapshot the boot volume daily.
@daily (. /home/azacsnap/.profile ; cd /home/azacsnap/bin ; azacsnap -c backup --volume other --prefix DailyBootVol --retention=7 --configfile boot-vol.json)
上面 crontab 的说明。
MAILTO=""
:通过具有空值,这可以防止 cron 在执行 crontab 条目时自动尝试向本地 Linux 用户发送电子邮件。- crontab 条目的速记时间版本不言自明:
@monthly
= 每月运行一次,即“0 0 1 * *”。@weekly
= 每周运行一次,即“0 0 * * 0”。@daily
= 每天运行一次,即“0 0 * * *”。@hourly
= 每小时运行一次,即“0 * * * *”。
- 前五列用于指定时间,请参阅以下列示例:
0,15,30,45
:每 15 分钟0-23
:每小时*
:每天*
:每月*
:一周的每一天
- 要执行的命令行包含在括号“()”中
. /home/azacsnap/.profile
= 拉取用户的 .profile 以设置其环境,包括 $PATH 等。cd /home/azacsnap/bin
= 将执行目录更改为配置文件所处的位置“/home/azacsnap/bin”。azacsnap -c .....
= 要运行的完整 azacsnap 命令,包括所有选项。
有关 cron 和 crontab 文件格式的详细信息,请参阅 cron。
注意
用户负责监视 cron 作业,以确保成功生成快照。
管理 AzAcSnap 日志文件
AzAcSnap 将其操作的输出写入日志文件,以帮助调试和验证正确的操作。 除非主动管理,否则这些日志文件将继续增长。 幸运的是,基于 UNIX 的系统有一个工具来管理和存档名为 logrotate 的日志文件。
以下输出提供了 logrotate 的示例配置。 此配置最多保留 31 个日志(大约一个月),当日志文件大于 10k 时,它会使用添加到文件名的数字进行重命名并压缩它们来轮换它们。
# azacsnap logrotate configuration file
compress
~/bin/azacsnap*.log {
rotate 31
size 10k
}
创建 logrotate.conf
文件后,应定期运行 logrotate
命令以相应地存档 AzAcSnap 日志文件。 可以使用 cron 自动执行 logrotate
命令。 以下输出是 azacsnap 用户的 crontab 的一行,此示例使用配置文件 ~/logrotate.conf
每天运行 logrotate。
@daily /usr/sbin/logrotate -s ~/logrotate.state ~/logrotate.conf >> ~/logrotate.log
注意
在上面的示例中,logrotate.conf 文件位于用户的主 (~) 目录中。
几天后,azacsnap 日志文件应类似于以下目录列表。
ls -ltra ~/bin/logs
-rw-r--r-- 1 azacsnap users 127431 Mar 14 23:56 azacsnap-backup-azacsnap.log.6.gz
-rw-r--r-- 1 azacsnap users 128379 Mar 15 23:56 azacsnap-backup-azacsnap.log.5.gz
-rw-r--r-- 1 azacsnap users 129272 Mar 16 23:56 azacsnap-backup-azacsnap.log.4.gz
-rw-r--r-- 1 azacsnap users 128010 Mar 17 23:56 azacsnap-backup-azacsnap.log.3.gz
-rw-r--r-- 1 azacsnap users 128947 Mar 18 23:56 azacsnap-backup-azacsnap.log.2.gz
-rw-r--r-- 1 azacsnap users 128971 Mar 19 23:56 azacsnap-backup-azacsnap.log.1.gz
-rw-r--r-- 1 azacsnap users 167921 Mar 20 01:21 azacsnap-backup-azacsnap.log
监视快照
应监视以下条件以确保系统正常:
- 可用磁盘空间。 快照会根据块级更改率缓慢地消耗磁盘空间,因为保留较旧的磁盘块会保留在快照中。
- 若要帮助自动进行磁盘空间管理,请使用
--retention
和--trim
选项自动清理旧快照和数据库日志文件。
- 若要帮助自动进行磁盘空间管理,请使用
- 快照工具的成功执行
- 检查
*.result
文件,了解azacsnap
的最新运行是成功还是失败。 - 在
/var/log/messages
中检查azacsnap
命令的输出。
- 检查
- 通过定期将快照还原到另一个系统来保持快照的一致性。
注意
若要列出快照详细信息,请执行命令 azacsnap -c details
。
删除快照
若要删除快照,请使用命令 azacsnap -c delete
。 无法从操作系统级别删除快照。 必须使用正确的命令 (azacsnap -c delete
) 才能删除存储快照。
重要
删除快照时请保持警惕。 删除后,无法恢复已删除的快照。
还原快照
可以将存储卷快照还原到新卷 (-c restore --restore snaptovol
)。 对于 Azure 大型实例,可以将卷还原到快照 (-c restore --restore revertvolume
)。
注意
未提供数据库恢复命令。
可以将快照复制回 SAP HANA 数据区域,但是在进行复制时 (cp /hana/data/H80/mnt00001/.snapshot/hana_hourly.2020-06-17T113043.1586971Z/*
),不得运行 SAP HANA。
对于 Azure 大型实例,可以通过打开服务请求联系 Microsoft 操作团队,要求从现有可用快照还原所需快照。 可以通过 Azure 门户打开服务请求。
如果决定执行灾难恢复故障转移,DR 站点上的 azacsnap -c restore --restore revertvolume
命令会自动提供最新的卷快照(/hana/data
和 /hana/logbackups
)卷快照,以允许 SAP HANA 恢复。 请谨慎使用此命令,因为它会中断生产与 DR 站点之间的复制。
仅为“引导”卷设置快照
重要
此操作仅适用于 Azure 大型实例。
在某些情况下,客户已具有保护 SAP HANA 的工具,只需要配置“引导”卷快照。 在这种情况下,只需完成以下步骤。
完成安装先决条件的步骤 1-4。
启用与存储的通信。
下载并运行安装程序以安装快照工具。
完成快照工具的设置。
获取要添加到 azacsnap 配置文件的卷列表,在此示例中,存储用户名为
cl25h50backup
,存储 IP 地址为10.1.1.10
ssh cl25h50backup@10.1.1.10 "volume show -volume *boot*"
Last login time: 7/20/2021 23:54:03 Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- ams07-a700s-saphan-1-01v250-client25-nprod t250_sles_boot_sollabams07v51_vol aggr_n01_ssd online RW 150GB 57.24GB 61% ams07-a700s-saphan-1-01v250-client25-nprod t250_sles_boot_sollabams07v52_vol aggr_n01_ssd online RW 150GB 81.06GB 45% ams07-a700s-saphan-1-01v250-client25-nprod t250_sles_boot_sollabams07v53_vol aggr_n01_ssd online RW 150GB 79.56GB 46% 3 entries were displayed.
注意
在此示例中,此主机是 3 节点横向扩展系统的一部分,并且所有 3 个引导卷都可以从此主机中查看。 这意味着所有 3 个引导卷都可以通过此主机进行快照,并且在下一步中应将所有 3 个卷添加到配置文件中。
按如下所示创建新配置文件。 引导卷详细信息必须处于 OtherVolume stanza 中:
azacsnap -c configure --configuration new --configfile BootVolume.json
Building new config file Add comment to config file (blank entry to exit adding comments): Boot only config file. Add comment to config file (blank entry to exit adding comments): Add database to config? (y/n) [n]: y HANA SID (for example, H80): X HANA Instance Number (for example, 00): X HANA HDB User Store Key (for example, `hdbuserstore List`): X HANA Server's Address (hostname or IP address): X Add ANF Storage to database section? (y/n) [n]: Add HLI Storage to database section? (y/n) [n]: y Add DATA Volume to HLI Storage section of Database section? (y/n) [n]: Add OTHER Volume to HLI Storage section of Database section? (y/n) [n]: y Storage User Name (for example, clbackup25): cl25h50backup Storage IP Address (for example, 192.168.1.30): 10.1.1.10 Storage Volume Name (for example, hana_data_soldub41_t250_vol): t250_sles_boot_sollabams07v51_vol Add OTHER Volume to HLI Storage section of Database section? (y/n) [n]: y Storage User Name (for example, clbackup25): cl25h50backup Storage IP Address (for example, 192.168.1.30): 10.1.1.10 Storage Volume Name (for example, hana_data_soldub41_t250_vol): t250_sles_boot_sollabams07v52_vol Add OTHER Volume to HLI Storage section of Database section? (y/n) [n]: y Storage User Name (for example, clbackup25): cl25h50backup Storage IP Address (for example, 192.168.1.30): 10.1.1.10 Storage Volume Name (for example, hana_data_soldub41_t250_vol): t250_sles_boot_sollabams07v53_vol Add OTHER Volume to HLI Storage section of Database section? (y/n) [n]: Add HLI Storage to database section? (y/n) [n]: Add database to config? (y/n) [n]: Editing configuration complete, writing output to 'BootVolume.json'.
检查配置文件,请参阅以下示例:
使用
cat
命令显示配置文件的内容:cat BootVolume.json
{ "version": "5.0", "logPath": "./logs", "securityPath": "./security", "comments": [ "Boot only config file." ], "database": [ { "hana": { "serverAddress": "X", "sid": "X", "instanceNumber": "X", "hdbUserStoreName": "X", "savePointAbortWaitSeconds": 600, "hliStorage": [ { "dataVolume": [], "otherVolume": [ { "backupName": "cl25h50backup", "ipAddress": "10.1.1.10", "volume": "t250_sles_boot_sollabams07v51_vol" }, { "backupName": "cl25h50backup", "ipAddress": "10.1.1.10", "volume": "t250_sles_boot_sollabams07v52_vol" }, { "backupName": "cl25h50backup", "ipAddress": "10.1.1.10", "volume": "t250_sles_boot_sollabams07v53_vol" } ] } ], "anfStorage": [] } } ] }
测试引导卷备份
azacsnap -c backup --volume other --prefix TestBootVolume --retention 1 --configfile BootVolume.json
检查它是否列出,请注意添加了
--snapshotfilter
选项以限制返回的快照列表。azacsnap -c details --snapshotfilter TestBootVolume --configfile BootVolume.json
命令输出:
List snapshot details called with snapshotFilter 'TestBootVolume' #, Volume, Snapshot, Create Time, HANA Backup ID, Snapshot Size #1, t250_sles_boot_sollabams07v51_vol, TestBootVolume.2020-07-03T034651.7059085Z, "Fri Jul 03 03:48:24 2020", "otherVolume Backup|azacsnap version: 5.0 (Build: 20210421.6349)", 200KB , t250_sles_boot_sollabams07v51_vol, , , Size used by Snapshots, 1.31GB #1, t250_sles_boot_sollabams07v52_vol, TestBootVolume.2020-07-03T034651.7059085Z, "Fri Jul 03 03:48:24 2020", "otherVolume Backup|azacsnap version: 5.0 (Build: 20210421.6349)", 200KB , t250_sles_boot_sollabams07v52_vol, , , Size used by Snapshots, 1.31GB #1, t250_sles_boot_sollabams07v53_vol, TestBootVolume.2020-07-03T034651.7059085Z, "Fri Jul 03 03:48:24 2020", "otherVolume Backup|azacsnap version: 5.0 (Build: 20210421.6349)", 200KB , t250_sles_boot_sollabams07v53_vol, , , Size used by Snapshots, 1.31GB
(可选)使用
crontab
设置自动快照备份,或设置适合运行azacsnap
备份命令的适用计划程序。
注意
无需设置与 SAP HANA 的通信。
还原“引导”快照
重要
此操作仅适用于 Azure 大型实例。 服务器会还原到拍摄快照时的时间点。
可以按如下所示恢复“引导”快照:
- 客户需要关闭服务器。
- 服务器关闭后,客户需要打开包含要还原的计算机 ID 和快照的服务请求。
客户可以从 Azure 门户打开服务请求。
- Microsoft 使用指定的计算机 ID 和快照还原操作系统 LUN,然后启动服务器。
- 然后,客户需要确认服务器已启动并正常运行。
还原后无需执行其他步骤。
需要了解的有关快照的关键事实
存储卷快照的关键属性:
快照位置:可以在卷内的虚拟目录 (
.snapshot
) 中找到快照。 对于 Azure 大型实例,请参阅以下示例:- 数据库:
/hana/data/<SID>/mnt00001/.snapshot
- 共享:
/hana/shared/<SID>/.snapshot
- 日志:
/hana/logbackups/<SID>/.snapshot
- 引导:HLI 的引导快照在操作系统级别不可见,但可以使用
azacsnap -c details
列出。
注意
.snapshot
是只读隐藏虚拟文件夹,提供对快照的只读访问。- 数据库:
最大快照:硬件可以对每个卷支持最多 250 个快照。 快照命令根据命令行上的保留集保留前缀保留最大快照数。 删除除具有相同前缀的保留号以外的其他快照。
快照名称:快照名称包含客户提供的前缀标签。
快照大小:取决于数据库级别的大小/更改。
日志文件位置:命令生成的日志文件会输出到 JSON 配置文件中定义的文件夹,这在默认情况下是在其下运行命令的子文件夹(例如
./logs
)。