다음을 통해 공유


AzAcSnap(Azure Application Consistent Snapshot) 도구 문제 해결

이 문서에서는 Azure NetApp Files 및 Azure 대규모 인스턴스에 대해 AzAcSnap(Azure Application Consistent Snapshot) 도구를 사용할 때 발생하는 문제를 해결하는 방법을 설명합니다.

AzAcSnap 명령을 실행할 때 몇 가지 일반적인 문제가 발생할 수 있습니다. 지침에 따라 문제를 해결합니다. 여전히 문제가 있는 경우 Azure Portal에서 Microsoft 지원 서비스 요청을 열고 요청을 SAP HANA 대규모 인스턴스 큐에 할당합니다.

AzAcSnap 명령이 실행되지 않음

사용자의 환경으로 인해 AzAcSnap이 시작되지 않는 경우가 있습니다.

CoreCLR을 만들지 못함

AzAcSnap은 .NET으로 작성되었으며 CoreCLR은 .NET 앱용 실행 엔진으로, IL 바이트 코드 로드, 컴퓨터 코드 컴파일 및 가비지 수집과 같은 기능을 수행합니다. 이 경우 CoreCLR 엔진이 시작되지 않도록 차단하는 환경 문제가 있습니다.

일반적인 원인은 AzAcSnap 운영 체제 사용자(일반적으로 'azacsnap')에 대한 제한된 권한 또는 환경 설정입니다.

오류 Failed to create CoreCLR, HRESULT: 0x80004005는 시스템 TMPDIR에 대한 azacsnap 사용자의 쓰기 액세스 권한이 부족하여 발생할 수 있습니다.

참고 항목

#로 시작하는 모든 명령줄은 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)

Important

사용자의 프로필(예: $HOME/.bashrc 또는 $HOME/.bash_profile)을 변경하여 사용자의 TMPDIR을 영구적으로 변경해야 합니다. 또한 시스템 재부팅 시 TMPDIR을 정리해야 할 필요가 있습니다. 이 작업은 /tmp에 대해 일반적으로 자동입니다.

로그 파일, 결과 파일 및 syslog 확인

AzAcSnap 문제를 조사하기 위한 가장 좋은 정보 원본 중 일부는 로그 파일, 결과 파일 및 시스템 로그입니다.

로그 파일

AzAcSnap 로그 파일은 AzAcSnap 구성 파일의 logPath 매개 변수로 구성된 디렉터리에 저장됩니다. 기본 구성 파일 이름은 azacsnap.json이고 logPath의 기본값은 ./logs입니다. 이는 로그 파일이 azacsnap 명령이 실행되는 위치에 상대적인 ./logs 디렉터리에 기록됨을 의미합니다. logPath/home/azacsnap/logs와 같은 절대 위치로 만들면 azacsnap 명령을 실행하는 위치에 관계없이 azacsnap은 항상 /home/azacsnap/logs에 로그를 출력합니다.

로그 파일 이름은 애플리케이션 이름 azacsnap, -c로 실행되는 명령(예: backup, test 또는 details) 및 기본 구성 파일 이름(예: azacsnap.json)을 기반으로 합니다. -c backup 명령을 사용하면 기본 로그 파일 이름은 azacsnap-backup-azacsnap.log가 되며 logPath에서 구성한 디렉터리에 로그됩니다.

이 명명 규칙을 사용하면 데이터베이스당 하나씩 여러 구성 파일을 사용하여 관련 로그 파일을 찾는 데 도움이 됩니다. 구성 파일 이름이 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. *.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 Portal을 통해 Cloud Shell을 사용하여 서비스 주체가 올바르게 구성되었는지 테스트할 수 있습니다. 올바른 구성을 위해 Cloud Shell 테스트를 사용하여 가상 네트워크 또는 VM(가상 머신) 내에서 네트워크 제어를 바이패스합니다.

  1. Azure Portal에서 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.json과 같은 AzAcSnap 구성 파일을 업로드합니다.

  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. 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://zcusa.951200.xyz/azure/active-directory/develop/active-directory-certificate-credentials
    

새 서비스 주체 생성에 대한 자세한 내용은 Azure Application Consistent Snapshot 도구 설치 가이드의 Storage와의 통신 사용 섹션을 참조하세요.

실패한 '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
    
  • 다음 예에서는 사용자의 $PATHhdbsql 명령을 임시로 추가하여 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","","","",""

앞의 예에서 SYSTEMDB의 AZACSNAP 사용자에게 DATABASE BACKUP ADMIN 권한을 추가하면 권한 부족 오류가 해결됩니다.

다음 단계