分享方式:


排解 Azure Application Consistent Snapshot (AzAcSnap) 工具

本文說明在 Azure NetApp Files 和 Azure 大型執行個體使用 Azure Application Consistent Snapshot (AzAcSnap) 工具時,如何排解問題。

執行 AzAcSnap 命令時,您可能會遇到數個常見問題。 請按照指示來排解問題。 如果您仍有問題,請從 Azure 入口網站開啟 Microsoft 支援服務的服務要求,並將要求指派給 SAP Hana 大型執行個體佇列。

AzAcSnap 命令不會執行

在某些情況下,會因為使用者的環境而不會啟動 AzAcSnap。

無法建立 CoreCLR

AzAcSnap 是以 .NET 撰寫,CoreCLR 是適用於 .NET 應用程式的執行引擎,執行 IL 位元組程式碼載入、編譯至機器碼和記憶體回收等函式。 在此情況下,有一個環境問題會封鎖 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

azacsnap 使用者建立 TMPDIR

> 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)

重要

需要透過變更使用者的設定檔 (例如 $HOME/.bashrc$HOME/.bash_profile) 來永久變更使用者的 TMPDIR。 系統重新啟動時還需要清理 TMPDIR,這對於 /tmp 通常是自動的。

檢查記錄檔、結果檔和系統記錄檔

調查 AzAcSnap 問題的部分最佳資訊來源是記錄檔、結果檔和系統記錄檔。

記錄檔

AzAcSnap 記錄檔會儲存在由 AzAcSnap 組態檔中 logPath 參數所設定的目錄中。 預設的組態檔名稱為 azacsnap.jsonlogPath 的預設值為 ./logs,這表示記錄檔會寫入與執行 azacsnap 命令位置相對的 ./logs 目錄。 如果您將 logPath 設定為絕對位置,例如 /home/azacsnap/logs,無論您在何處執行 azacsnap 命令,azacsnap 一律會將記錄輸出到 /home/azacsnap/logs

記錄檔名稱源自於應用程式名稱 azacsnap,命令會透過 -c 執行,例如 backuptestdetails,以及預設的組態檔名稱,例如 azacsnap.json。 根據 -c backup 命令,預設的記錄檔名稱為 azacsnap-backup-azacsnap.log,寫入由 logPath 設定的目錄。

此命名慣例允許每個資料庫有多個組態檔,以協助找出相關聯的記錄檔。 如果組態檔名稱為 SID.json,則使用 azacsnap -c backup --configfile SID.json 選項時的記錄檔名稱為 azacsnap-backup-SID.log

結果檔和系統記錄檔

若是 -c backup 命令,AzAcSnap 會寫入 *.result 檔案。 *.result 檔案的目的是提供成功/失敗的高階確認。 如果 *.result 檔案是空的,則假設失敗。 寫入 *.result 檔案的任何輸出,也會使用 logger 命令輸出至系統記錄檔 (例如 /var/log/messages )。 *.result 檔名與記錄檔具有相同的基底名稱,以允許比對結果檔與組態檔和備份記錄檔。 *.result 檔案會進入與其他記錄檔相同的位置,而且是簡單的一行輸出檔。

  1. 成功完成的範例:

    1. 輸出至 *.result 檔案:

      Database # 1 (PR1) : completed ok
      
    2. 輸出至 /var/log/messages

      Dec 17 09:01:13 azacsnap-rhel azacsnap: Database # 1 (PR1) : completed ok
      
  2. 發生失敗而 AzAcSnap 擷取到失敗的範例輸出:

    1. 輸出至 *.result 檔案:

      Database # 1 (PR1) : failed
      
    2. 輸出至 /var/log/messages

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

針對失敗的「測試儲存體」命令進行疑難排解

命令 azacsnap -c test --test storage 可能無法成功完成。

檢查網路防火牆

與 Azure NetApp Files 的通訊可能會失敗或逾時。若要進行疑難排解,請確定防火牆規則不會封鎖從執行 AzAcSnap 的系統到下列位址和 TCP/IP 埠的輸出流量:

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

使用 Cloud Shell 來驗證組態檔

您可以透過 Azure 入口網站使用 Cloud Shell 來測試服務主體是否已正確設定。 使用 Cloud Shell 測試正確組態,略過虛擬網路或虛擬機器 (VM) 中的網路控制。

  1. 在 Azure 入口網站中,開啟 Cloud Shell 工作階段。

  2. 建立測試目錄,例如 mkdir azacsnap

  3. 切換至 azacsnap 目錄,並下載最新版本的 AzAcSnap。

    wget https://aka.ms/azacsnapinstaller
    
  4. 讓安裝程式成為可執行檔,例如 chmod +x azacsnapinstaller

  5. 擷取要測試的二進位檔。

    ./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
    
  6. 使用 Cloud Shell 上傳/下載圖示,以上傳服務主體檔案 azureauth.json 和 AzAcSnap 組態檔 (例如 azacsnap.json) 以進行測試。

  7. 執行 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 Files 的測試失敗

下列錯誤範例來自於使用 Azure NetApp Files 執行 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']

針對這個錯誤進行疑難排解:

  1. 檢查服務主體檔案 azureauth.json 的存在,如 azacsnap.json 組態檔中所設定。

  2. 檢查記錄檔,例如 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.
    
  3. 檢查記錄檔,查看服務主體是否已過期。 下列記錄檔範例顯示用戶端秘密金鑰已過期。

    [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 下,而且必須位於使用者的 $PATH 中。

  • 在下列範例中,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

針對這個錯誤進行疑難排解:

  1. 請檢查每個 HANA 執行個體的組態檔,例如 azacsnap.json,確保 SAP Hana 資料庫值正確無誤。

  2. 執行下列命令以驗證路徑中包含 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 使用者應該可以解決權限不足的錯誤。

下一步