النسخ الاحتياطي المتناسق مع التطبيق لأجهزة Azure Linux الظاهرية باستخدام Azure Backup

توضح هذه المقالة كيفية إنشاء نسخ احتياطية متسقة مع التطبيق لأجهزة Linux الظاهرية إلى Azure باستخدام Azure Backup. في هذه المقالة، ستقوم بتكوين إطار عمل البرنامج النصي لنسخ أجهزة Linux الظاهرية التي تم نشرها في Azure احتياطيا. توفر هذه المقالة أيضا معلومات استكشاف الأخطاء وإصلاحها.

عند أخذ لقطات النسخ الاحتياطي للأجهزة الظاهرية، يعني تناسق التطبيق أن تطبيقاتك تبدأ عند تشغيل الأجهزة الظاهرية بعد استعادتها. وكما تعلم، فإن تناسق التطبيق أمر مهم للغاية. للتأكد من أن أجهزة Linux الظاهرية الخاصة بك متسقة مع التطبيق، يمكنك استخدام إطار عمل Linux prescript وما بعد البرنامج النصي لأخذ نسخ احتياطية متسقة مع التطبيق. يدعم إطار عمل prescript وما بعد البرنامج النصي أجهزة Linux الظاهرية التي تم نشرها في Azure Resource Manager. لا تدعم البرامج النصية لتناسق التطبيق الأجهزة الظاهرية التي تم نشرها في Service Manager أو أجهزة Windows الظاهرية.

كيفية عمل إطار العمل

يوفر إطار العمل خيارا لتشغيل الواصفات المخصصة والبرامج النصية اللاحقة أثناء التقاط لقطات الجهاز الظاهري. يتم تشغيل Prescripts قبل أخذ لقطة الجهاز الظاهري مباشرة، ويتم تشغيل البرامج النصية اللاحقة مباشرة بعد أخذ لقطة الجهاز الظاهري. توفر الواجهات والبرامج النصية اللاحقة المرونة للتحكم في تطبيقك وبيئتك، أثناء التقاط لقطات الجهاز الظاهري.

تستدعي Prescripts واجهات برمجة التطبيقات الأصلية للتطبيق، والتي تمسح IOs، وتمسح المحتوى في الذاكرة إلى القرص. تضمن هذه الإجراءات أن تكون اللقطة متسقة مع التطبيق. تستخدم البرامج النصية اللاحقة واجهات برمجة التطبيقات الأصلية لإلغاء تجميد عمليات الإدخال والإخراج، ما يتيح للتطبيق استئناف العمليات العادية بعد لقطة الجهاز الظاهري.

تكوين prescript وpost-script ل Azure Linux VM

لتكوين Prescript وpost-script، اتبع الخطوات التالية:

  1. سجّل الدخول بصفتك المستخدم الأصلي إلى الجهاز الظاهري الذي يعمل بنظام التشغيل Linux الذي تريد نسخه احتياطيًا.

  2. من GitHub، قم بتنزيل VMSnapshotScriptPluginConfig.json ونسخه إلى المجلد /etc/azure لجميع الأجهزة الظاهرية التي تريد نسخها احتياطياً. إذا كان المجلد /etc/azure غير موجود، فقم بإنشائه.

  3. انسخ prescript والبرنامج النصي اللاحق للتطبيق الخاص بك على جميع الأجهزة الظاهرية التي تخطط لنسخها احتياطيا. يمكنك نسخ البرامج النصية في أي موقع على الجهاز الظاهري. تأكد من تحديث المسار الكامل لملفات البرنامج النصي في الملف VMSnapshotScriptPluginConfig.json.

  4. تأكد من الأذونات التالية لهذه الملفات:

    • VMSnapshotScriptPluginConfig.json: إذن "600". على سبيل المثال، يجب على المستخدم "الجذر" فقط "قراءة" و"كتابة" الأذونات لهذا الملف، ولا يجب على أي مستخدم "تنفيذ" الأذونات.

    • ملف البرنامج النصي المسبق: إذن "700". على سبيل المثال، يجب على المستخدم "الجذر" فقط "قراءة" و"كتابة" و"تنفيذ" الأذونات لهذا الملف. من المتوقع أن يكون الملف عبارة عن برنامج نصي shell ولكن نظريا يمكن لهذا البرنامج النصي أن يولد داخليا أو يشير إلى برامج نصية أخرى مثل برنامج Python النصي.

    • البرنامج النصي اللاحق إذن "700". على سبيل المثال، يجب على المستخدم "الجذر" فقط "قراءة" و"كتابة" و"تنفيذ" الأذونات لهذا الملف. من المتوقع أن يكون الملف عبارة عن برنامج نصي shell ولكن نظريا يمكن لهذا البرنامج النصي أن يولد داخليا أو يشير إلى برامج نصية أخرى مثل برنامج Python النصي.

    هام

    يمنح إطار العمل المستخدمين الكثير من السلطة. يؤمّن إطار العمل، ويضمن أن يكون للمستخدم «الأصلي» فقط حق الوصول إلى ملفات JSON والبرامج النصية بالغة الأهمية. إذا لم يتم استيفاء المتطلبات، فلن يتم تشغيل البرنامج النصي، ما يؤدي إلى تعطل نظام الملفات وعدم تناسق النسخ الاحتياطي.

  5. قم بتكوين VMSnapshotScriptPluginConfig.json كما هو موضح هنا:

    • pluginName: اترك هذا الحقل كما هو، وإلا قد لا تعمل البرامج النصية كما هو متوقع.

    • preScriptLocation: توفير المسار الكامل للمقدم على الجهاز الظاهري الذي سيتم نسخه احتياطيا.

    • postScriptLocation: توفير المسار الكامل للبرنامج النصي اللاحق على الجهاز الظاهري الذي سيتم نسخه احتياطيا.

    • preScriptParams: توفير المعلمات الاختيارية التي تحتاج إلى تمريرها إلى prescript. يجب أن تكون جميع المعلمات بين علامتي اقتباس. إذا كنت تستخدم معلمات متعددة، فافصل بين المعلمات بفاصلة.

    • postScriptParams: توفير المعلمات الاختيارية التي تحتاج إلى تمريرها إلى البرنامج النصي اللاحق. يجب أن تكون جميع المعلمات بين علامتي اقتباس. إذا كنت تستخدم معلمات متعددة، فافصل بين المعلمات بفاصلة.

    • preScriptNoOfRetries: تعيين عدد المرات التي يجب فيها إعادة محاولة prescript إذا كان هناك أي خطأ قبل الإنهاء. يشير الصفر إلى محاولة واحدة فقط ولا تتوفر إعادة المحاولة إذا فشلت العملية.

    • postScriptNoOfRetries: قم بتعيين عدد المرات التي يجب فيها إعادة محاولة post-script إذا حدث أي خطأ قبل الإنهاء. يشير الصفر إلى محاولة واحدة فقط ولا تتوفر إعادة المحاولة إذا فشلت العملية.

    • timeoutInSeconds: حدد المهلات الفردية للواصف وما بعد البرنامج النصي (يمكن أن تكون القيمة القصوى 1800).

    • continueBackupOnFailure: قم بتعيين هذه القيمة إلى true إذا كنت تريد أن يعود Azure Backup إلى نسخة احتياطية متسقة/متناسقة مع تعطل نظام الملفات إذا فشل prescript أو ما بعد البرنامج النصي. يتسبب تعيين ذلك إلى خطأ في فشل عملية النسخ الاحتياطي إذا كانت هناك حالة فشل للبرنامج نصي (باستثناء عندما يكون لديك جهاز ظاهري بقرص واحد الذي يعود مرة أخرى إلى النسخ الاحتياطي المتناسق مع الأعطال بغض النظر عن هذا الإعداد). عند تعيين القيمة continueBackupOnFailure إلى خطأ، إذا فشل النسخ الاحتياطي، سيتم محاولة إجراء عملية النسخ الاحتياطي مرة أخرى استناداً إلى منطق إعادة المحاولة في الخدمة (لعدد المحاولات المحددة).

    • fsFreezeEnabled: حدد ما إذا كان يجب استدعاء Linux fsfreeze أثناء أخذ لقطة الجهاز الظاهري لضمان تناسق نظام الملفات. نوصي باستمرار تعيين هذا الإعداد إلى صواب ما لم يحتوِ تطبيقك على أحد التبعيات لتعطيل fsfreeze.

    • ScriptsExecutionPollTimeSeconds: عيّن الوقت الذي يتعين أن يكون فيه الملحق في حالة سكون بين كل استقصاء لتنفيذ البرنامج النصي. على سبيل المثال، إذا كانت القيمة هي 2، يتحقق الملحق ما إذا كان قد اكتمل تنفيذ البرنامج النصي المسبق/البرنامج النصي اللاحق كل ثانيتين. إن الحد الأدنى والحد الأقصى للقيمة التي يمكن أن يستخدمها هي 1 و5 على التوالي. يجب الالتزام الشديد بأن تكون القيمة عدداً صحيحاً.

  6. تم تكوين إطار عمل البرنامج النصي الآن. في حال تكوين النسخ الاحتياطي للجهاز الظاهري من قبل، تستدعي النسخة الاحتياطية التالية البرامج النصية وتشغل النسخ الاحتياطي المتسق مع التطبيق. إذا لم يتم تكوين النسخ الاحتياطي للجهاز الظاهري، فقم بتكوينه باستخدام النسخ الاحتياطي لأجهزة Azure الظاهرية إلى مخازن خدمات الاسترداد.

استكشاف الأخطاء وإصلاحها

تأكد من إضافة تسجيل مناسب أثناء كتابة الإعدادات المسبقة وما بعد البرنامج النصي، ومراجعة سجلات البرنامج النصي لإصلاح أي مشكلات في البرنامج النصي. إذا كانت لا تزال لديك مشكلات عند تشغيل البرامج النصية، فراجع الجدول التالي للحصول على مزيد من المعلومات.

خطأ رسالة الخطأ الإجراء الموصى به
Pre-ScriptExecutionFailed أرجع prescript خطأ، لذلك قد لا تكون النسخة الاحتياطية متسقة مع التطبيق. ألق نظرة على سجلات الفشل الخاصة بالبرنامج النصي لديك لإصلاح المشكلة.
Post-ScriptExecutionFailed أرجع البرنامج النصي اللاحق خطأ قد يؤثر على حالة التطبيق. ألق نظرة على سجلات الفشل الخاصة بالبرنامج النصي لإصلاح المشكلة والتحقق من حالة التطبيق.
Pre-ScriptNotFound لم يتم العثور على البادئة في الموقع المحدد في ملف التكوين VMSnapshotScriptPluginConfig.json . تأكد من وجود prescript في المسار المحدد في ملف التكوين لضمان النسخ الاحتياطي المتناسق مع التطبيق.
Post-ScriptNotFound لم يتم العثور على البرنامج النصي المسبق في الموقع المحدد في ملف التكوين VMSnapshotScriptPluginConfig.json. تأكد من وجود برنامج نصي آخر في المسار المحدد في ملف التكوين لضمان النسخ الاحتياطي المتناسق مع التطبيق.
IncorrectPluginhostFile ملف Pluginhost، الذي يأتي مع ملحق VmSnapshotLinux، تالف، لذلك لا يمكن تشغيل prescript والبرنامج النصي اللاحق ولن تكون النسخة الاحتياطية متسقة مع التطبيق. ألغ تثبيت الملحق VmSnapshotLinux، وسوف يتم تثبيته تلقائيا مع النسخ الاحتياطي القادم لإصلاح المشكلة.
IncorrectJSONConfigFile ملف VMSnapshotScriptPluginConfig.json غير صحيح، لذلك لا يمكن تشغيل prescript والبرنامج النصي اللاحق ولن تكون النسخة الاحتياطية متسقة مع التطبيق. قم بتنزيل النسخة من GitHub وبتكوينها مرة أخرى.
InsufficientPermissionforPre-Script لتشغيل البرامج النصية، يجب أن يكون المستخدم "الجذر" هو مالك الملف ويجب أن يتكون الملف من "700" إذن (أي أن يكون "المالك" فقط من لديه أذونات "القراءة" و"الكتابة" و"التنفيذ"). تأكد من أن المستخدم "الجذر" هو "المالك" لملف البرنامج النصي وأن يكون "المالك" فقط من لديه أذونات "القراءة"، و"الكتابة"، و"التنفيذ".
InsufficientPermissionforPost-Script لتشغيل البرامج النصية/ يجب أن يكون المستخدم "الجذر" هو المالك للملف ويجب أن يتكون الملف من "700" إذن (أي أن "المالك" فقط هو من يكون لديه أذونات "القراءة"، و"الكتابة"، و"التنفيذ"). تأكد من أن المستخدم "الجذر" هو "المالك" لملف البرنامج النصي وأن يكون "المالك" فقط من لديه أذونات "القراءة"، و"الكتابة"، و"التنفيذ".
Pre-ScriptTimeout انتهت مهلة تنفيذ البرنامج النصي المسبق للنسخ الاحتياطي المتناسق مع التطبيق. تحقق من البرنامج النصي وزيادة المهلة في الملف VMSnapshotScriptPluginConfig.json الموجود في /etc/azure.
Post-ScriptTimeout مهلة تنفيذ النسخ الاحتياطي المتناسق مع التطبيق بعد البرامج النصية. تحقق من البرنامج النصي وزيادة المهلة في الملف VMSnapshotScriptPluginConfig.json الموجود في /etc/azure.

الخطوات التالية

تكوين النسخ الاحتياطي للجهاز الظاهري إلى مخزن خدمات الاسترداد