次の方法で共有


Azure アプリケーション整合性スナップショット (AzAcSnap) ツールのトラブルシューティング

この記事では、Azure NetApp Filesと Azure L インスタンスの Azure アプリケーション 整合性スナップショット (AzAcSnap) ツールを使用する場合のイシューのトラブルシューティング方法について説明します。

AzAcSnap コマンドを実行するときに、いくつかの一般的なイシューが発生する可能性があります。 次の手順に従って、イシューのトラブルシューティングを行います。 イシューが解決しない場合は、Microsoft Azure portalからMicrosoft サポートのサービス要求を開き、SAP HANA Large インスタンスキューに要求を割り当てます。

AzAcSnap コマンドが実行されない

ユーザーの環境が原因で AzAcSnap が開始されない場合があります。

CoreCLR を作成できませんでした

AzAcSnap は .NET で記述され、CoreCLR は .NET アプリの実行エンジンであり、IL バイト コードの読み込み、マシン コードへのコンパイル、ガベージ コレクションなどの機能を実行します。 この場合、CoreCLR エンジンの起動を妨げている環境上の問題があります。

一般的な原因は、AzAcSnap オペレーティング システム ユーザー (通常は "azacsnap") のアクセス許可または環境設定が制限されていることです。

エラー Failed to create CoreCLR, HRESULT: 0x80004005 は、azacsnap ユーザーがシステムの TMPDIR に書き込みアクセスできないことが原因で発生する可能性があります。

Note

先頭が # のすべてのコマンド ラインは、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)

重要

ユーザーの TMPDIR の変更は、ユーザーのプロファイル ($HOME/.bashrc$HOME/.bash_profile など) を変更して永続的にする必要があります。 また、システムの再起動時に TMPDIR をクリーンアップする必要があります。これは通常、/tmp の場合は自動です。

ログ ファイル、結果ファイル、syslog を確認する

AzAcSnap のイシューを調査するための最適な情報のソースの一部には、ログ ファイル、結果ファイル、システム ログがあります。

ログ ファイル

AzAcSnapログ ファイルは、AzAcSnap 構成ファイル内で logPath パラメーターごとに構成されたディレクトリに保存されます。 デフォルトの構成ファイル名は azacsnap.json であり、logPathの既定値は./logsです、つまり、azacsnap コマンドの実行場所へ./logsディレクトリ関連にログ ファイルは書き込まれます。 /home/azacsnap/logs などのlogPathを絶対場所に作成すると、azacsnapをコマンド実行 する場所に関係なく、 azacsnap常に /home/azacsnap/logsへのログが 出力されます。

ログ ファイル名は、backuptestなどのアプリケーション名、azacsnapコマンドの実行-cに基づいて、またはdetailsazacsnap.json などのデフォルトの構成ファイル名に基づいてます。 この-c backupコマンドでは、デフォルトのログ ファイル名は azacsnap-backup-azacsnap.log で、logPathにより構成された ディレクトリに書き込まれます。

この名前付け規則により、複数の構成ファイル (データベースごとに 1 つ) を使用して、関連付けられているログ ファイルを見つけることができます。 構成ファイル名が SID.json の場合、azacsnap -c backup --configfile SID.jsonオプションを使用するときのログ ファイル名は azacsnap-backup-SID.log です

結果ファイルと syslog

-c backup コマンドを指定すると、AzAcSnap では *.result ファイルへの書き込みが行われます。 *.result ファイルの目的は、成功/失敗の概要を確認することです。 *.result ファイルが空の場合は、失敗と見なします。 *.result ファイルに書き込まれた出力は、logger コマンドを使用してシステム ログ (たとえば /var/log/messages) にも出力されます。 *.result ファイル名はログ ファイルと同じベース名を持つため、結果ファイルと構成ファイルおよびバックアップ ログ ファイルを照合できます。 *.result ファイルは他のログ ファイルと同じ場所に置かれ、単純な 1 行の出力ファイルです。

  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
      

失敗した 「test storage」 コマンドのトラブルシューティング

コマンド azacsnap -c test --test storage が正常に完了しないかもしれません。

ネットワーク ファイアウォールを確認する

Azure NetApp Files との通信を検証するときに、通信が失敗するか、タイムアウトになることがあります。問題解決のため、AzAcSnap を実行しているシステムから次のアドレスと TCP/IP ポートへのアウトバウンド トラフィックがファイアウォール規則によってブロックされていないことを確認してください:

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

Azure Cloud Shellを使用して構成ファイルを検証する

サービス プリンシパルが正しく構成されていることをテストするには、Azure portal から Azure Cloud Shell を使用します。 Azure Cloud Shellテストを使用して正しい構成を行い、仮想ネットワークまたは仮想マシン (VM) 内のネットワークコントロールをバイパスします。

  1. Azure portal で 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. Azure Cloud Shell アップロード/ダウンロード アイコンを使用して、テスト用のサービス プリンシパル ファイル、azureauth.json、とAzAcSnap 構成ファイル (azacsnap.json など) をアップロードします。

  7. storageテストを実行する。

    ./azacsnap -c test --test storage
    

    Note

    テスト コマンドが完了するまで約 90 秒かかる場合があります。

Azure Large インスタンスでテストに失敗しました

次のエラーの例は、Azure Large インスタンス 上の 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 アドレスが確実に正しくなるようにしてください。 ストレージ IP アドレスは、Microsoft 操作チームで確認できます。

このエラーは、通常、AzureLargeインスタンス ストレージ ユーザーが基になるストレージにアクセスできない場合に表示されます。 ストレージ ユーザーがストレージへのアクセス権があるか決定するには、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. azacsnap.json構成ファイルに設定されているサービス プリンシパル ファイル azureauth.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 には、SAP HANAとのすべての通信にhdbsqlプログラムも必要です。 これらのプログラムは通常 /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場所に追加されていることを確認します。

Note

ユーザーの $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. azacsnap.jsonなどの各 HANA インスタンスの構成ファイルを確認し、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"

エラーによって、Detailed info for this error can be found with guid '99X9999X99X9999X99X99XX999XXX999' SQLSTATE: HY000 のような、必要な SAP HANA 権限を判断するのに役立つ詳細情報が提供される場合もあります。 この場合は、SAP ヘルプ Portalの 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 ユーザーに追加することで、権限の不足エラーが解決されます。

次のステップ