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 파일은 다른 로그 파일과 동일한 위치에 있으며 한 줄의 간단한 출력 파일입니다.
성공적인 완료 예:
*.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
실패한 '테스트 스토리지' 명령 문제 해결
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(가상 머신) 내에서 네트워크 제어를 바이패스합니다.
Azure Portal에서 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.json과 같은 AzAcSnap 구성 파일을 업로드합니다.
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']
이 오류를 해결하려면:
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://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
다음 예에서는 사용자의
$PATH
에hdbsql
명령을 임시로 추가하여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","","","",""
앞의 예에서 SYSTEMDB의 AZACSNAP 사용자에게 DATABASE BACKUP ADMIN
권한을 추가하면 권한 부족 오류가 해결됩니다.