كنت بحاجة إلى عمل نسخ احتياطية للموقع على "2C-Bitrix: Site Management" (الملفات وقاعدة بيانات mysql) مرتين يوميًا وتخزين سجل التغييرات لمدة 1 يومًا.
يقع الموقع على خادم افتراضي يعمل بنظام تشغيل CentOS 7 مع تثبيت "1C-Bitrix: Web Environment". بالإضافة إلى ذلك، قم بعمل نسخة احتياطية من إعدادات نظام التشغيل الخاص بك.
المتطلبات:
- التردد - مرتين في اليوم.
- احتفظ بنسخ لآخر 90 يومًا؛
- القدرة على الحصول على الملفات الفردية لتاريخ محدد، إذا لزم الأمر؛
- يجب تخزين النسخة الاحتياطية في مركز بيانات غير VDS؛
- القدرة على الوصول إلى النسخة الاحتياطية من أي مكان (خادم آخر، جهاز كمبيوتر محلي، وما إلى ذلك).
كانت النقطة المهمة هي القدرة على إنشاء نسخ احتياطية بسرعة مع الحد الأدنى من استهلاك المساحة الإضافية وموارد النظام.
لا يتعلق الأمر بلقطة لاستعادة النظام بأكمله بسرعة، ولكن يتعلق بالملفات وقاعدة البيانات وتاريخ التغييرات.
خلفية:
- VDS على المحاكاة الافتراضية XEN؛
- GA CentOS 7;
- 1C-بيتريكس: بيئة الويب؛
- موقع ويب يعتمد على "1C-Bitrix: إدارة الموقع"، الإصدار القياسي؛
- حجم الملف هو 50 جيجابايت وسوف ينمو.
- حجم قاعدة البيانات هو 3 غيغابايت وسوف ينمو.
لقد استبعدت على الفور النسخة الاحتياطية القياسية المضمنة في 1C-Bitrix. وهي مناسبة فقط للمواقع الصغيرة، وذلك للأسباب التالية:
- يقوم بعمل نسخة كاملة من الموقع في كل مرة، بحيث تشغل كل نسخة نفس المساحة التي تشغلها الملفات، في حالتي هي 50 جيجابايت.
- يتم إجراء النسخ الاحتياطي باستخدام PHP، وهو أمر مستحيل مع مثل هذه الكميات من الملفات، وسيؤدي إلى زيادة التحميل على الخادم ولن ينتهي أبدًا.
- وبالطبع، لا يمكن الحديث عن 90 يومًا عند تخزين نسخة كاملة.
الحل الذي يقدم مضيفهذا قرص احتياطي موجود في نفس مركز البيانات الخاص بـ VDS، ولكن على خادم مختلف. يمكنك الوصول إلى القرص عبر بروتوكول نقل الملفات (FTP) واستخدام برامجك النصية الخاصة، أو، إذا كان برنامج ISPManager مثبتًا على VDS، عبر وحدة النسخ الاحتياطي الخاصة به. هذا الخيار غير مناسب لأنه يستخدم نفس مركز البيانات.
من كل ما سبق، فإن أفضل خيار بالنسبة لي هو النسخ الاحتياطي المتزايد باستخدام البرنامج النصي الخاص بي في Yandex.Cloud (تخزين الكائنات) أو Amazon S3 (Amazon Simple Storage Service).
هذا يتطلب:
- الوصول الجذري إلى VDS؛
- فائدة الازدواجية المثبتة ؛
- الحساب في Yandex.Cloud.
نسخ احتياطي تزايدي - طريقة يتم من خلالها أرشفة البيانات التي تغيرت منذ آخر نسخة احتياطية فقط.
نفاق — أداة نسخ احتياطي تستخدم خوارزميات rsync ويمكنها العمل مع Amazon S3.
Yandex.Cloud مقابل أمازون S3
في هذه الحالة، لا يوجد فرق بين Yandex.Cloud وAmazon S3 بالنسبة لي. يدعم Yandex الجزء الأكبر من واجهة برمجة تطبيقات Amazon S3، لذا يمكنك العمل معها باستخدام الحلول الموجودة للعمل مع S3. في حالتي، هذه هي أداة الازدواجية.
قد تكون الميزة الرئيسية لـ Yandex هي الدفع بالروبل، إذا كان هناك الكثير من البيانات، فلن يكون هناك اتصال بسعر الصرف. من حيث السرعة، تعمل مراكز البيانات الأوروبية التابعة لأمازون بشكل مماثل لمراكز البيانات الروسية في ياندكس، على سبيل المثال، يمكنك استخدام فرانكفورت. لقد استخدمت Amazon S3 سابقًا لمهام مماثلة، والآن قررت تجربة Yandex.
إعداد Yandex.Cloud
1. تحتاج إلى إنشاء حساب دفع في Yandex.Cloud. للقيام بذلك، تحتاج إلى تسجيل الدخول إلى Yandex.Cloud من خلال حساب Yandex الخاص بك أو إنشاء حساب جديد.
2. إنشاء "سحابة".

3. في "السحابة" قم بإنشاء "كتالوج".

4. بالنسبة إلى "الكتالوج"، قم بإنشاء "حساب الخدمة".

5. قم بإنشاء مفاتيح لـ "حساب الخدمة".

6. احفظ المفاتيح، ستكون هناك حاجة إليها في المستقبل.

7. بالنسبة إلى "الدليل"، قم بإنشاء "Bucket"، وسوف تدخل الملفات فيه.

8. أوصي بوضع حد واختيار "التخزين البارد".

إعداد النسخ الاحتياطية المجدولة على الخادم
يفترض هذا الدليل المهارات الإدارية الأساسية.
1. قم بتثبيت الأداة المساعدة للازدواجية على VDS
yum install duplicity2. قم بإنشاء مجلد لتفريغ MySQL، في حالتي هو /backup_db في جذر VDS
3. قم بإنشاء مجلد للبرامج النصية bash /backup_scripts وقم بإنشاء البرنامج النصي الأول الذي سيقوم بإجراء النسخ الاحتياطية /backup_scripts/backup.sh
محتويات البرنامج النصي:
#!`which bash`
# /backup_scripts/backup.sh
# Это условие проверяет не идёт ли в данный момент процесс резервного копирования, если идёт, то на email отправляется сообщение об ошибке (этот блок можно не использовать)
if [ -f /home/backup_check.mark ];
then
DATE_TIME=`date +"%d.%m.%Y %T"`;
/usr/sbin/sendmail -t <<EOF
From:backup@$HOSTNAME
To:<Ваш EMAIL>
Subject:Error backup to YANDEX.CLOUD
Content-Type:text/plain; charset=utf-8
Error backup to YANDEX.CLOUD
$DATE_TIME
EOF
else
# Основной блок отвечающий за резервное копирование
# Если нет ощибки ставим метку и запускаем backup
echo '' > /home/backup_check.mark;
# Удаляем файлы с дампами базы оставшиеся от предыдущего backup
/bin/rm -f /backup_db/*
# Делаем дамп всех mysql баз, предполагается что доступ добавлен в файле /root/.my.cnf
DATETIME=`date +%Y-%m-%d_%H-%M-%S`;
`which mysqldump` --quote-names --all-databases | `which gzip` > /backup_db/DB_$DATETIME.sql.gz
# Добавляем данные для отправки в Яндекс.
export PASSPHRASE=<Придумайте пароль для шифрования архива>
export AWS_ACCESS_KEY_ID=<Идентификатор ключа полученный у Яндекса>
export AWS_SECRET_ACCESS_KEY=<Секретный ключ полученный у Яндекса>
# Запускаем duplicity для резервирования необходимых папок на сервере.
# Данная команда будет создавать полный backup раз в месяц и до следующего месяца добавлять инкрементальные к нему
# -- exclude это папки, которые нужно исключить, я исключаю все папки с кешем битрикса
# --include папки которые нужно резервировать в моём случае это:
# - /backup_db
# - /home
# - /etc
# s3://storage.yandexcloud.net/backup , backup это имя созданного выше бакета
# Техническая особенность и значения некоторых параметров:
# Две строки "--exclude='**'" и "/" нужны, чтобы можно было выше оперировать --include и --exclude для разных папок. Эти две строчки сначала добавляют в бэкап весь сервер "/", потом исключают его "--exclude='**'"
# --full-if-older-than='1M' - создавать полную копию каждый месяц
# --volsize='512' - максимальный размер каждого из файлов в бэкапе в мегабайтах
# --log-file='/var/log/duplicity.log' - куда писать лог файл
`which duplicity`
--s3-use-ia --s3-european-buckets
--s3-use-new-style
--s3-use-multiprocessing
--s3-multipart-chunk-size='128'
--volsize='512'
--no-print-statistics
--verbosity=0
--full-if-older-than='1M'
--log-file='/var/log/duplicity.log'
--exclude='**/www/bitrix/backup/**'
--exclude='**/www/bitrix/cache/**'
--exclude='**/www/bitrix/cache_image/**'
--exclude='**/www/bitrix/managed_cache/**'
--exclude='**/www/bitrix/managed_flags/**'
--exclude='**/www/bitrix/stack_cache/**'
--exclude='**/www/bitrix/html_pages/*/**'
--exclude='**/www/bitrix/tmp/**'
--exclude='**/www/upload/tmp/**'
--exclude='**/www/upload/resize_cache/**'
--include='/backup_db'
--include='/home'
--include='/etc'
--exclude='**'
/
s3://storage.yandexcloud.net/backup
# Данная команда нужна для чистки.
# Она оставляет 3 последних полных backup и ассоциированных с ними инкрементальных backup.
# Т.о. у меня остаются backup за 3 месяца, т.к. первая команда каждый месяц делает новый полный backup
`which duplicity` remove-all-but-n-full 3 --s3-use-ia --s3-european-buckets --s3-use-new-style --verbosity=0 --force s3://storage.yandexcloud.net/backup
unset PASSPHRASE
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
# Удаляем метку об идущем backup
/bin/rm -f /home/backup_check.mark;
fi4. قم بتشغيل البرنامج النصي لأول مرة وتحقق من النتيجة، يجب أن تظهر الملفات في "Bucket".
`which bash` /backup_scripts/backup.sh
5. قم بإضافة برنامج نصي إلى cron ليعمل عليه المستخدم الجذر مرتين في اليوم، أو بالتكرار الذي تحتاجه.
10 4,16 * * * `which bash` /backup_scripts/backup.shاستعادة البيانات من Yandex.Cloud
1. قم بإنشاء مجلد الاسترداد /backup_restore
2. قم بإنشاء برنامج نصي bash للاسترداد /backup_scripts/restore.sh
أعطي المثال الأكثر شيوعًا لاستعادة ملف معين:
#!`which bash`
export PASSPHRASE=<Пароль для шифрования архива используемый при бэкапе>
export AWS_ACCESS_KEY_ID=<Идентификатор ключа полученный у Яндекса>
export AWS_SECRET_ACCESS_KEY=<Секретный ключ полученный у Яндекса>
# 3 примера, раскомментировать нужный
# Получить статус backup
#`which duplicity` collection-status s3://storage.yandexcloud.net/backup
# Восстановить index.php из корня сайта
#`which duplicity` --file-to-restore='home/bitrix/www/index.php' s3://storage.yandexcloud.net/backup /backup_restore/index.php
# Восстановить index.php из корня сайта 3х дневной давности
#`which duplicity` --time='3D' --file-to-restore='home/bitrix/www/index.php' s3://storage.yandexcloud.net/backup /backup_restore/index.php
unset PASSPHRASE
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY3. قم بتشغيل البرنامج النصي وانتظر النتيجة.
`which bash` /backup_scripts/backup.shفي المجلد /backup_restore/ ستجد ملف Index.php الذي تم نسخه احتياطيًا مسبقًا.
يمكنك إجراء تعديلات أكثر دقة لتناسب احتياجاتك.
ناقص الازدواجية
الازدواجية لها عيب واحد - لا يمكن تعيين حد لاستخدام القناة. مع القناة العادية، لا يشكل هذا مشكلة، ولكن عند استخدام قناة محمية ضد DDoS مع شحن سريع يوميًا، أود أن أتمكن من تعيين حد يبلغ 1-2 ميجابت.
كاستنتاج
يُتيح لك النسخ الاحتياطي إلى Yandex.Cloud أو Amazon S3 الحصول على نسخة مستقلة من موقعك الإلكتروني وإعدادات نظام التشغيل، والتي يُمكن الوصول إليها من أي خادم آخر أو جهاز كمبيوتر محلي. هذه النسخة غير مرئية لأي شخص. لوحات التحكم الاستضافة، ولا في لوحة تحكم Bitrix، مما يوفر أمانًا إضافيًا.
في أسوأ السيناريوهات، يمكنك تجميع خادم جديد ونشر الموقع في أي وقت. على الرغم من أن الوظيفة الأكثر شيوعًا ستكون القدرة على الوصول إلى ملف في تاريخ محدد.
يمكن استخدام هذه الطريقة مع أي خادم افتراضي موزع (VDS) أو خوادم ومواقع مخصصة على أي محرك، وليس فقط 1C-Bitrix. كما يمكن أن يختلف نظام التشغيل عن ذلك. CentOSعلى سبيل المثال Ubuntu أو Debian.
المصدر: www.habr.com
