استكشاف أخطاء أداة Azure Application Consistent Snapshot (AzAcSnap) وإصلاحها
توضح هذه المقالة كيفية استكشاف المشكلات وإصلاحها عند استخدام أداة Azure Application Consistent Snapshot (AzAcSnap) لملفات Azure NetApp وAzure Large Instance.
قد تواجه العديد من المشكلات الشائعة عند تشغيل أوامر AzAcSnap. اتبع الإرشادات لاستكشاف المشكلات وإصلاحها. إذا كانت لا تزال لديك مشكلات، فافتح طلب خدمة لدعم Microsoft من مدخل Microsoft Azure وقم بتعيين الطلب إلى قائمة انتظار SAP HANA Large Instance.
لن يتم تشغيل أمر AzAcSnap
في بعض الحالات، لن يبدأ AzAcSnap بسبب بيئة المستخدم.
فشل إنشاء CoreCLR
تتم كتابة AzAcSnap في .NET و CoreCLR هو محرك تنفيذ لتطبيقات .NET، وينفذ وظائف مثل تحميل التعليمات البرمجية لبايت IL، والتحويل البرمجي إلى التعليمات البرمجية للجهاز، وجمع البيانات المهملة. في هذه الحالة هناك مشكلة بيئية تمنع محرك CoreCLR من البدء.
السبب الشائع هو الأذونات المحدودة أو الإعداد البيئي لمستخدم نظام التشغيل AzAcSnap، عادة "azacsnap".
يمكن أن يكون الخطأ Failed to create CoreCLR, HRESULT: 0x80004005
بسبب عدم الوصول للكتابة لمستخدم azacsnap إلى النظام TMPDIR
.
إشعار
يتم تشغيل جميع أسطر الأوامر التي تبدأ بالأوامر #
ك ، ويتم تشغيل جميع أسطر الأوامر التي تبدأ بمستخدم >
azacsnap
.root
تحقق من /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
.
TMPDIR
azacsnap
إنشاء للمستخدم:
> 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 في الدليل الذي تم تكوينه بواسطة المعلمة logPath
في ملف تكوين AzAcSnap. اسم ملف التكوين الافتراضي هو azacsnap.json، والقيمة الافتراضية ل logPath
هي ./logs، مما يعني أن ملفات السجل مكتوبة في دليل ./logs بالنسبة إلى مكان azacsnap
تشغيل الأمر. إذا قمت بإنشاء logPath
موقع مطلق، مثل /home/azacsnap/logs، azacsnap
فستخرج السجلات دائما إلى /home/azacsnap/logs، بغض النظر عن مكان تشغيل azacsnap
الأمر.
يستند اسم ملف السجل إلى اسم التطبيق، 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 هو أيضا إخراج إلى سجل النظام (على سبيل المثال، /var/log/messages
) باستخدام logger
الأمر . اسم الملف *.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 للتحقق من صحة ملفات التكوين
يمكنك اختبار ما إذا كان كيان الخدمة قد تم تكوينه بشكل صحيح باستخدام Cloud Shell من خلال مدخل Microsoft Azure. استخدام اختبارات Cloud Shell للتكوين الصحيح، وتجاوز عناصر التحكم في الشبكة داخل شبكة ظاهرية أو جهاز ظاهري (VM).
في مدخل Microsoft Azure، افتح جلسة عمل 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، مثل azacsnap.json، للاختبار.
storage
قم بتشغيل الاختبار../azacsnap -c test --test storage
إشعار
قد يستغرق الأمر الاختباري حوالي 90 ثانية لإكماله.
فشل الاختبار على Azure Large Instance
مثال الخطأ التالي من التشغيل azacsnap
على Azure Large Instance:
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.
يظهر الخطأ عادة عندما لا يكون لدى مستخدم تخزين Azure Large Instance حق الوصول إلى التخزين الأساسي. لتحديد ما إذا كان لدى مستخدم التخزين حق الوصول إلى التخزين، قم بتشغيل 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
مثال الخطأ التالي من التشغيل azacsnap
مع Azure NetApp Files:
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']
لاستكشاف أخطاء هذا الخطأ وإصلاحها:
تحقق من وجود ملف كيان الخدمة، azureauth.json، كما هو محدد في ملف تكوين azacsnap.json .
تحقق من ملف السجل، على سبيل المثال، السجلات/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://learn.microsoft.com/azure/active-directory/develop/active-directory-certificate-credentials
تلميح
لمزيد من المعلومات حول إنشاء كيان خدمة جديد، راجع قسم تمكين الاتصال مع التخزين في دليل أداة تثبيت لقطة متناسقة لتطبيق Azure.
فشل استكشاف أخطاء أمر "اختبار hana" وإصلاحها
قد لا يكتمل الأمر azacsnap -c test --test hana
بنجاح.
القيادة لم يتم العثور
عند إعداد الاتصال مع SAP HANA، hdbuserstore
يتم استخدام البرنامج لإنشاء إعدادات الاتصال الآمنة. يتطلب hdbsql
AzAcSnap أيضا البرنامج لجميع الاتصالات مع 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/
تأكد من أن المثبت أضاف موقع هذه الملفات إلى مستخدم $PATH
AzAcSnap.
إشعار
لإضافته بشكل دائم إلى ملف المستخدم $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.
فشل الاختبار
عند التحقق من صحة الاتصال مع SAP HANA عن طريق تشغيل اختبار باستخدام azacsnap -c test --test 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
لاستكشاف أخطاء هذا الخطأ وإصلاحها:
تحقق من ملف التكوين، على سبيل المثال azacsnap.json، لكل مثيل HANA، للتأكد من صحة قيم قاعدة بيانات 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","","","",""
في المثال السابق، يجب أن تؤدي إضافة DATABASE BACKUP ADMIN
الامتياز إلى مستخدم AZACSNAP الخاص ب SYSTEMDB إلى حل خطأ الامتياز غير الكافي.