مساء الخير يا حبر !
اسمي ناتاليا. أنا رئيس فريق مجموعة مسؤولي التطبيق في NPO Krista. نحن عمليات لمجموعة مشاريع شركتنا. لدينا موقف غريب نوعًا ما: نقوم بتثبيت برامجنا وصيانتها على خوادم شركتنا وعلى الخوادم الموجودة في أماكن عمل العملاء. في هذه الحالة ، ليست هناك حاجة لعمل نسخة احتياطية من الخادم بأكمله. فقط "البيانات الأساسية" مهمة: نظام إدارة قواعد البيانات (DBMS) والأدلة الفردية لنظام الملفات. بالطبع ، لدى العملاء (أو ليس لديهم) لوائح النسخ الاحتياطي الخاصة بهم وغالبًا ما يوفرون نوعًا من التخزين الخارجي لتخزين النسخ الاحتياطية هناك. في هذه الحالة ، بعد إنشاء نسخة احتياطية ، نوفر الإرسال إلى وحدة التخزين الخارجية.
لفترة من الوقت ، لأغراض النسخ الاحتياطي ، نجحنا في استخدام برنامج bash النصي ، ولكن مع نمو الخيارات ، ازداد تعقيد هذا النص بشكل متناسب ، وفي وقت ما وصلنا إلى الحاجة إلى "تدميره تمامًا ، ثم ...".
لم تنجح الحلول الجاهزة لأسباب مختلفة: بسبب الحاجة إلى لامركزية النسخ الاحتياطية ، والالتزام بتخزين النسخ الاحتياطية محليًا لدى العميل ، وتعقيد الإعداد ، واستبدال الاستيراد ، وقيود الوصول.
بدا لنا أنه كان من الأسهل كتابة شيء خاص بنا. في الوقت نفسه ، كنت أرغب في الحصول على شيء يكون كافيًا لوضعنا في السنوات N القادمة ، ولكن مع إمكانية توسيع النطاق المحتمل.
كانت ظروف المشكلة كما يلي:
- مثيل النسخ الاحتياطي الأساسي مستقل ويعمل محليًا
- تخزين النسخ الاحتياطية والسجلات دائمًا داخل شبكة العميل
- – «»
- Linux, ,
- ssh,
- ( ) ,
يمكنك ان ترى ما وصلنا إلى هنا: github.com/javister/krista-backup و
يتم كتابة البرنامج في python3. يعمل على Debian و Ubuntu و CentOS و AstraLinux 1.6.
الوثائق متاحة في دليل docs للمستودع.
المفاهيم الأساسية التي يستخدمها النظام:
الإجراء - إجراء ينفذ عملية ذرية واحدة (نسخ احتياطي لقاعدة البيانات ، نسخ احتياطي للدليل ، نقل من الدليل A إلى الدليل B ، إلخ). توجد الإجراءات الحالية في
مهمة الدليل الأساسية / الإجراءات - مهمة ، مجموعة من الإجراءات تصف
جدولًا منطقيًا "لمهمة النسخ الاحتياطي" - جدول زمني ، مجموعة مهام مع إشارة اختيارية لوقت تنفيذ المهمة ،
يتم تخزين تكوين النسخ الاحتياطي في ملف yaml ؛ هيكل التكوين العام:
- الاعدادات العامة
- إجراءات القسم: وصف الإجراءات المستخدمة على هذا الخادم
- قسم الجدول الزمني: وصف لجميع المهام (مجموعات الإجراءات) والجدول الزمني لإطلاقها بواسطة التاج ، إذا كان هذا الإطلاق مطلوبًا
يمكن العثور على مثال للتكوين هنا
ما يمكن للتطبيق القيام به في الوقت الحالي:
- العمليات الرئيسية لنا مدعومة: النسخ الاحتياطي لـ PostgreSQL عبر pg_dump ، النسخ الاحتياطي لدليل نظام الملفات عبر tar ؛ عمليات مع التخزين الخارجي ؛ rsync بين الدلائل ؛ تدوير النسخ الاحتياطية (حذف النسخ القديمة)
- استدعاء نص خارجي
- التنفيذ اليدوي لمهمة واحدة
/opt/KristaBackup/KristaBackup.py run make_full_dump
- يمكنك إضافة (أو إزالة) مهمة منفصلة أو الجدول بأكمله في crontab
/opt/KristaBackup/KristaBackup.py enable all
- إنشاء ملف مشغل بناءً على نتائج النسخ الاحتياطي. هذه الميزة مفيدة مع Zabbix لمراقبة النسخ الاحتياطية
- يمكن أن تعمل في الخلفية في webapi أو وضع الويب
/opt/KristaBackup/KristaBackup.py web start [--api]
الفرق بين الأوضاع: لا يحتوي webapi على واجهة ويب مناسبة ، لكن التطبيق يستجيب للطلبات من مثيل آخر. بالنسبة لوضع الويب ، تحتاج إلى تثبيت flask والعديد من الحزم الإضافية ، وهذا غير مقبول في كل مكان ، على سبيل المثال ، في AstraLinux SE معتمد.
من خلال واجهة الويب ، يمكنك عرض حالة وسجلات النسخ الاحتياطية للخوادم المتصلة: تطلب "نسخة الويب" البيانات من "النسخ الاحتياطية" عبر واجهة برمجة التطبيقات. يتطلب الوصول إلى الويب إذنًا ، ولا يتطلب الوصول إلى webapi.
يتم تمييز سجلات النسخ الاحتياطية التي تم تمريرها بشكل غير صحيح بالألوان: تحذير - أصفر ، خطأ - أحمر.
إذا لم يكن المسؤول بحاجة إلى ورقة غش حول المعلمات وكانت أنظمة تشغيل الخادم متجانسة ، فيمكنك تجميع الملف وتوزيع الحزمة الجاهزة.
نقوم بتوزيع هذه الأداة بشكل أساسي من خلال Ansible ، حيث يتم طرحها أولاً لبعض الخوادم الأقل أهمية ، وبعد اختبارها على جميع الخوادم الأخرى.
نتيجة لذلك ، حصلنا على أداة نسخ مدمجة ومستقلة ، قابلة للتشغيل الآلي ومناسبة للتشغيل حتى من قبل المسؤولين عديمي الخبرة. إنه مناسب لنا - ربما يكون مفيدًا لك أيضًا؟