تحتاج خطط الاسترداد التي أعددناها في الجزء السابق إلى نظام للنسخ الاحتياطي. سنركز في هذا المقال على نظام النسخ الاحتياطي Bacula. يتيح Bacula تحكّمًا تامًا في ما تريد نسخه أو استعادته على المستوى الفردي للملفات؛ كما يسمح بجدولة النسخ الاحتياطي والاستعادة وفقا لما تراه أفضل بالنسبة لك.
سنُعدّ Bacula في هذا الجزء لتخزين نسخ احتياطية يوميا. تحوي النسخُ الملفاتِ الضروريةَ من الخواديم التي تكون التطبيق (app2
، app1
، db1
وlb1
). حددنا في الجزء السابق الملفات التي نريد نسخها احتياطيا. يُريك هذا المقال كيفية استخدام Bacula لإنشاء نسخ احتياطية من حزمة برمجيات LAMP (أي MySQL، Apache، Linux وPHP). سنستعمل أيضا Percona XtraBackup لإنشاء نسخ احتياطية ساخنة Hot backups من قاعدة بيانات MySQL. ثم - في الأخير - نستخدم rsync
لنسخ الملفات التي أنشأها Bacula على خادوم يوجد في موقع جغرافي آخر؛ أي أنه ستكون لدينا نسختان احتياطيتان، واحدة موجودة في نفس مركز بيانات الذي توجد به بيئة الإنتاج والأخرى في موقع ناء. سنضيف خادومين إلى الخواديم الموجودة سلفا: backups
وremotebackups
؛ الأخير يوجد في مركز بيانات ناء.
ملحوظة: نعني بالنسخ الاحتياطي الساخن - أو الديناميكي - أخذ نسخة من قاعدة البيانات وهي في حالة نشاط؛ مما يعني أنه قد يحصل تعديل عليها أثناء عملية النسخ. يقابل النسخَ الساخن النسخُ البارد Cold backup والذي توقف فيه قاعدة البيانات عن العمل، ثم تؤخذ نسخة منها قبل أن يُعاد تشغيلها.
تثبيت Bacula على خادوم النسخ الاحتياطية
اضبط Bacula على خادوم backups
باتباع خطوات الدرس التالي: كيف تثبت خادوم Bacula على Ubuntu 14.04.
ثم اتبع فقرة تنظيم إعداد مدير Bacula (الخادوم) في مقال كيف تنسخ احتياطيا خادوم Ubuntu 14.04 باستخدام Bacula. ستحتاج لاسم المدير Director name عند إعداد عملاء Bacula على الخواديم التي تريد نسخها احتياطيا. توقف عند الوصول إلى فقرة تثبيت عميل Bacula وإعداده.
تثبيت عميل Bacula على كل خادوم
ثبت عميل Bacula على كل واحد من الخواديم التي تريد نسخها احتياطيا (app2
، app1
، db1
وlb1
) باتباع فقرة تثبيت عميل Bacula وإعداده من درس كيف تنسخ احتياطيا خادوم Ubuntu 14.04 باستخدام Bacula. توقف عند الوصول إلى فقرة إضافة مجموعة ملفات FileSets (الخادوم).
يرجى الانتباه إلى أنك ستحتاج اسم FileDaemon (جنيّ الملفات، يكون عادة اسم المستضيف مضافا إليه “fd-“) وكلمة سر المدير Director (كلمة السر التي سيستخدمها خادوم Bacula للاتصال بكل واحد من العملاء). توجد القيمتان ضمن ملف bacula-fd.conf
الموجود على كل خادوم.
إضافة عملاء Bacula إلى خادوم النسخ الاحتياطي
أضف، إلى خادوم Bacula (أي backups
)، موردَ عميل Client resource لكل واحد من الخواديم التي ثبت عليها عميل Bacula. يُضاف مورد العميل إلى الملف etc/bacula/conf.d/clients.conf/
:
sudo nano /etc/bacula/conf.d/clients.conf
في ما يلي مثال على تعريف مورد العميل بالنسبة لخادوم قاعدة البيانات db1
. يجب أن توافق قيمة Name
اسم المورد FileDaemon
الموجود على الخادوم العميل. نفس الشيء بالنسبة لPassword
التي يجب أن توافق قيمة Password
ضمن مورد Director
على الخادوم العميل. توجد هذه القيم في ملف etc/bacula/bacula-fd.conf/
على كل واحد من عملء Bacula.
Client { Name = db1-fd Address = db1.nyc3.example.com FDPort = 9102 Catalog = MyCatalog Password = "PDL47XPnjI0QzRpZVJKCDJ_xqlMOp4k46" # كلمة سر العميل File Retention = 30 days # 30 يوما Job Retention = 6 months # 6 أشهر AutoPrune = yes # التخلص من الأشغال/الملفات منتهية الصلاحية }
أنشئ بنفس الطريقة مورد عميل لكل واحد من الخواديم العميلة لخادوم Bacula. يجب بانتهاء الإعداد في المثال أن تكون لدينا أربعة موارد عملاء: app2-fd
، app1-fd
، db1-fd
وlb1-fd
. تضبط هذه الإعدادات الخادوم backups
ليكون قادرا على الاتصال بعميل Bacula الموجود على كل خادوم.
احفظ الملف ثم أغلقه.
يمكن الحصول على تفاصيل أكثر بمراجعة فقرة تثبيت عميل Bacula وإعداده في درس كيف تنسخ احتياطيا خادوم Ubuntu 14.04 باستخدام Bacula.
إنشاء نسخ احتياطية ساخنة من قاعدة البيانات
يجب إيلاء اهتمام خاص لنسخ قاعدة البيانات الاحتياطية، من أجل إنشاء نسخ احتياطية متناسقة وقابلة للاستخدام. توجد طريقة سهلة وفعالة لإنشاء نسخ احتياطية ساخنة لقاعدة بيانات MySQL وهي استخدام Percona XtraBackup.
تثبيت Percona XtraBackup
ثبت Percona XtraBackup واضبطه على خادوم قاعدة البيانات db1
باتباع خطوات الدرس كيف تستخدم Percona XtraBackup لإنشاء نسخ احتياطية فورية من قواعد بيانات MySQL على Ubuntu 14.04. توقف عند الوصول إلى فقرة إنشاء نسخة احتياطية كاملة فوريا.
إنشاء سكربت XtraBackup
Percona XtraBackup جاهز الآن لإنشاء نسخ احتياطية ساخنة من قاعدة بيانات MySQL. سيحتفظ Bacula بهذه النسخ؛ إلا أنه يجب أولا إيجاد طريقة لجدولة النسخ الساخنة.
نستخدم cron
لهذه المهمة.
أنشئ سكربت Bash في usr/local/bin/
وسمه run_extra_backup.sh
:
sudo nano /usr/local/bin/run_xtrabackup.sh
أضف السكربت التالي إلى الملف الذي أنشأته للتو (تأكد من إدراج اسم المستخدم وكلمة السر الذين استعملتهما عند تثبيت XtraBackup):
#!/bin/bash # pre xtrabackup chown -R mysql: /var/lib/mysql find /var/lib/mysql -type d -exec chmod 770 "{}" \; # delete existing full backup rm -r /data/backups/full # xtrabackup create backup innobackupex --user=bkpuser --password=bkppassword --no-timestamp /data/backups/full # xtrabackup prepare backup innobackupex --apply-log /data/backups/full
احفظ الملف ثم أغلقه. سيؤدي تنفيذ هذا الملف بصلاحيات الحساب الإداري إلى حذف نسخة XtraBackup الاحتياطية الموجودة ضمن مسار data/backups/full/
وإنشاء نسخة احتياطية كاملة جديدة.
توجد تفاصيل أكثر عن النسخ الاحتياطية باستخدام XtraBackup ضمن فقرة إنشاء نسخة احتياطية كاملة ساخنة في درس XtraBackup.
اجعل السكربت قابلا للتنفيذ:
sudo chmod +x /usr/local/bin/run_xtrabackup.sh
يجب تنفيذ سكربت XtraBackup وإكماله قبل أن يحاول Bacula أخذ نسخة احتياطية من خادوم قاعدة البيانات، وذلك من أجل نسخ قاعدة البيانات بطريقة صحيحة. يمكن إعداد شغل Job في Bacula للتعامل مع السكربت على أنه “سكربت لما قبل النسخ الاحتياطي”؛ إلا أننا سنختار هنا استخدام شغل cron
توخيا للسهولة.
أنشئ ملف إعداد لcron
(تُضاف الملفات الموجودة ضمن المجلد etc/cron.d/
إلى جدول cron
الخاص بالمستخدم الجذر):
sudo nano /etc/cron.d/xtrabackup
أضف شغل cron
التالي:
30 22 * * * root /usr/local/bin/run_xtrabackup.sh
يُجدول هذا الشغل السكربت ليعمل بصلاحيات الجذر كل يوم عند الساعة العاشرة والنصف مساء (22:30). اخترنا هذا الوقت لأن Bacula مُجدول حاليا ليأخذ نسخا احتياطية يوميا عند الساعة الحادية عشرة مساء وخمس دقائق (23:05). سنناقش هذا الخيار في ما بعد. يعطينا فارق الجدولة هذا 35 دقيقة ليكتمل عمل سكربت XtraBackup.
اكتمل الآن إعداد النسخ الاحتياطي الساخن لقاعدة البيانات. ننتقل لمجموعات ملفات FileSets النسخة الاحتياطية لBacula.
إعداد مجموعة ملفات FileSets في Bacula
سننشئ نسخا احتياطية من الملفات المحدَّدة ضمن مجموعة الملفات المربوطة بأشغال النسخ الاحتياطي التي ستُنفَّذ. ستغطي هذه الفقرة إنشاء مجموعة ملفات تحوي النسخ الاحتياطية الضرورية المحدّدة في خطط الاسترداد. يمكن إيجاد تفاصيل أكثر عن إضافة مجموعة ملفات إلى Bacula تحت فقرة إضافة مجموعة ملفات FileSets (الخادوم) في درس Bacula.
افتح ملف filesets.conf
الموجود على خادوم النسخ الاحتياطي backups
:
sudo nano /etc/bacula/conf.d/filesets.conf
مجموعة الملفات الخاصة بخادوم قاعدة البيانات
تتضمن النسخ الاحتياطية المطلوبة من خادوم قاعدة البيانات، وفقا لخطة استرداد قاعدة البيانات:
- قاعدة بيانات MySQL: ينشئ سكربت XtraBackup نسخة احتياطية من قاعدة البيانات يوميا عند الساعة
22:30
ويضعها في المجلدdata/backups/full/
. - ملف إعداد MySQL الموجود في المجلد
etc/mysql/
.
سنضمِّن أيضا سكربت usr/local/bin/run_xtrabackup.sh/
وملف cron
المتعلق به.
نضيف اعتمادا على ما سبق مجموعة ملفات باسم MySQL Database
إلى إعداد Bacula:
FileSet { Name = "MySQL Database" Include { Options { signature = MD5 compression = GZIP } File = /data/backups File = /etc/mysql/my.cnf File = /usr/local/bin/run_xtrabackup.sh File = /etc/cron.d/xtrabackup } Exclude { File = /data/backups/exclude } }
ننتقل الآن إلى مجموعة ملفات التطبيق.
مجموعة الملفات الخاصة بخادوم التطبيق
تتضمن النسخ الاحتياطية المطلوبة من خادوم التطبيق وفقا لخطة استرداد هذا الأخير:
- ملفات التطبيق الموجودة - في مثالنا - على المسار
var/www/html/
.
نضيف اعتمادا على هذه المعلومة مجموعة ملفات Apache DocumentRoot
إلى ملف إعداد Bacula:
FileSet {
Name = "Apache DocumentRoot"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /var/www/html
}
Exclude {
File = /var/www/html/exclude
}
}
يمكن أيضا أن تضيف ملف الإعداد الخاص بمنافذ Apache، إلا أنه يمكن تغيير هذا الملف بسهولة عند الحاجة.
مجموعة الملفات الخاصة بخادوم توزيع الحمل
الطريقة المتَّبعة هي نفسها. نحدد الملفات المطلوب نسخها ثم ننشئ مجموعة ملفات في Bacula اعتمادا عليها.
الملفات المطلوبة:
- ملف PEM الخاص بشهادة SSL والملفات المتعلقة بها، توجد هذه الملفات على مسار
root/certs/
في مثالنا. - ملف إعداد HAProxy: يوجد في مجلد
etc/haproxy
.
سنضيف هذه الملفات إلى مجموعة Apache DocumentRoot
:
FileSet { Name = "Apache DocumentRoot" Include { Options { signature = MD5 compression = GZIP } File = /var/www/html File = /root/certs File = /etc/haproxy } Exclude { File = /var/www/html/exclude File = /root/exclude } }
احفظ الملف ثم أغلقه.
بهذا نكمل إعداد مجموعات الملفات. ننتقل لإعداد أشغال Bacula التي ستستخدم هذه المجموعات.
إنشاء أشغال النسخ الاحتياطي في Bacula
مهمة الأشغال في Bacula هي إنشاء نسخ احتياطية من الخواديم. أنشئ ملف jobs.conf
في المسار etc/bacula/conf.d/
:
>sudo nano /etc/bacula/conf.d/jobs.conf
شغل النسخ الاحتياطي لخادوم قاعدة البيانات
سننشئ شغل نسخ احتياطي جديدا لخادوم قاعدة البيانات باسم Backup db1
. من المهم هنا تحديد الاسم الصحيح للعميل db1-fd
واسم مجموعة الملفات MySQL Database
:
Job { Name = "Backup db1" JobDefs = "DefaultJob" Client = db1-fd Pool = RemoteFile FileSet="MySQL Database" }
أشغال النسخ الاحتياطي لخواديم التطبيقات
سننشئ شغل نسخ احتياطي لكل من خادومي التطبيق، Backup app1
للخادوم app1
وBackup app2
لapp2
. من المهم، مثل ما فعلنا مع خادوم قاعدة البيانات، تحديد الأسماء الصحيحة للعملاء (app1-fd
وapp2-fd
) ومجموعة الملفات (Apache DocumentRoot
).
بالنسبة للخادوم app1
:
Job { Name = "Backup app1" JobDefs = "DefaultJob" Client = app1-fd Pool = RemoteFile FileSet="Apache DocumentRoot" }
وبالنسبة للخادوم app2
:
Job { Name = "Backup app2" JobDefs = "DefaultJob" Client = app2-fd Pool = RemoteFile FileSet="Apache DocumentRoot" }
شغل النسخ الاحتياطي لخادوم توزيع الحمل
نتبع نفس مبدأ الخطوات السابقة لإنشاء شغل جديد ونسميه Backup lb1
:
Job { Name = "Backup lb1" JobDefs = "DefaultJob" Client = lb1-fd Pool = RemoteFile FileSet="SSL Certs and HAProxy Config" }
احفظ الملف ثم أغلقه.
إعادة تشغيل مدير Bacula
أعد تشغيل Bacula على خادوم النسخ الاحتياطي لاعتماد التغييرات التي أجريناها في الفقرات السابقة:
sudo service bacula-director restart
يجب أن تختبر، بالوصول إلى هذه النقطة، اتصالات عملاء Bacula وأشغال النسخ الاحتياطي. يغطى مقال كيف تنسخ احتياطيا خادوم Ubuntu 14.04 باستخدام Bacula هذين الجانبين. يُرجى ملاحظة أنه لاستعادة قاعدة بيانات MySQL ستحتاج لاتباع خطوة الاستعادة من نسخة احتياطية ضمن درس Percona XtraBackup.
مراجعة جدول النسخ الاحتياطي
يمكن تنظيم جدول النسخ الاحتياطي في Bacula بالتعديل على إعداد مدير Bacula (الملف etc/bacula/bacula-dir.conf/
). تستخدم جميع الأشغال التي أنشأناها تعريف الشغل DefaultJob
الذي يستخدم جدولةً بدورة أسبوعية تعرَّف على النحو التالي:
- نسخة احتياطية كاملة Full backup في أول يوم أحد من الشهر عند الساعة 23:05.
- نسخ احتياطية تفاضلية Differential backups في أيام الأحد المتبقية عند الساعة 23:05.
- نسخ احتياطية تزايدية Incremental backups في باقي الأيام، من الإثنين إلى السبت عند الساعة 23:05.
يمكنك التأكد من طريقة الجدولة وفحص حالة المدير في وحدة تحكم Bacula. يجب أن يظهر جميع الأشغال المُجدولة:
Scheduled Jobs: Level Type Pri Scheduled Name Volume =================================================================================== Incremental Backup 10 20-May-15 23:05 BackupLocalFiles MyVolume Incremental Backup 10 20-May-15 23:05 Backup lb1 Remote-0002 Incremental Backup 10 20-May-15 23:05 Backup app2 Remote-0002 Incremental Backup 10 20-May-15 23:05 Backup app1 Remote-0002 Incremental Backup 10 20-May-15 23:05 Backup db1 Remote-0002
سيكون من الجيد ضبط جدولة النسخ في خواديم التطبيقات بحيث يحدُث في نفس الوقت الذي ينسَخ فيه سكربت XtraBackup قاعدة البيانات (22:30)؛ وهو ما سيحول دون أن تكون نسخ خواديم التطبيقات غير متجانسة مع نسخة قاعدة البيانات.
إعداد نسخ احتياطية نائية
يمكننا الآن إعداد خادوم ناء نحفظ فيه النسخ الاحتياطية التي أنشأها Bacula (إضافة إلى حفظها على خادوم Bacula). يجب أن يكون هذا الخادوم في موقع جغرافي منفصل لكي يمكنك الحصول على النسخ الاحتياطية الهامة إن حدث مشكل مزمن في مركز البيانات الذي توجد فيه بيئة الإنتاج. اخترنا SF01
في المثال موقعا لخادوم remotebackups
.
سنشرح طريقة سهلة لإرسال النسخ الاحتياطية من خادوم backups
إلى خادوم remotebackups
باستخدام مفاتيح SSH، أداة rsync
وcron
.
أنشئ حسابا على خادوم remotebackups
لاستخدامه في الولوج عبر rsync
. ثم أنشئ باستخدام الحساب الجذر زوج مفاتيح SSH لا يحتاج لكلمة سر على خادوم backups
. ثبت المفتاح العمومي على الحساب الذي أنشأته للتو على خادوم remotebackups
؛ الطريقة مشروحة في مقال العمل مع خواديم SSH: العملاء والمفاتيح
اكتب، على خادوم backups
أمر rsync
ينسخ الملفات الموجودة على مسار bacula/backup/
إلى مكان يوجد على خادوم remotebackups
. يغطي درس كيف تستخدِم Rsync لمزامنة مجلّدات بين الجهاز المحلّي والخادوم طريقة استخدام rsync
. الشكل العام للأمر سيكون على النحو التالي (remoteuser
الحساب على الخادوم البعيد، remotebackups_public_hostname_or_IP
اسم المستضيف أو عنوان IP العمومي الخاص بالخادوم البعيد، وpath/to/remote/backup/
مسار مجلد النسخ الاحتياطي على الخادوم البعيد):
rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup
أضف الأمر لسكربت، مثلا: usr/local/bin/rsync_backups.sh/
واجعله قابلا للتنفيذ. وأخيرا، اضبط شغل cron
ينفذ سكربت rsync_backups.sh
بصلاحيات root
بعد إكمال أشغال Bacula. تمكن مراجعة درس كيف تجدول مهامك الروتينية باستخدام أداتي Cron و Anacron في لينكس لمزيد من التفاصيل عن عمل cron
.
تأكد بعد ضبط كل هذه الإعدادات من وجود نسخ احتياطية على خادوم remotebackups
في اليوم الموالي.
اعتبارات أخرى
لم نتحدث في ما سبق عن متطلبات القرص الصلب من ناحية التخزين. يجب أن تراجع مساحة التخزين التي تستخدمها نسخك الاحتياطية ثم تعيد النظر في إعداد النسخ الاحتياطي وجدولته وفقا لاحتياجاتك والموارد المتوفرة لديك.
يمكن أن تحتاج أيضا إلى إعداد نسخ احتياطية لخواديم أخرى غير خواديم التطبيق. على سبيل المثل خادوما المراقبة والسجلات بعد إكمال إعدادهما.
خاتمة
يجب أن تكون لديك الآن نسخ احتياطية يومية من خواديم التطبيق في بيئة الإنتاج، ونسخ منها على خادوم بعيد. تحقق من إمكانية استعادة الملفات وأضف خطوات استعادة البيانات إلى خطط الاسترداد.
ترجمة -وبتصرّف- لمقال Building for Production: Web Applications — Backups لصاحبه Mitchell Anicas.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.