نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

كنت بحاجة إلى عمل نسخ احتياطية للموقع على "2C-Bitrix: Site Management" (الملفات وقاعدة بيانات mysql) مرتين يوميًا وتخزين سجل التغييرات لمدة 1 يومًا.

يقع الموقع على VDS يعمل بنظام التشغيل CentOS 7 مع تثبيت 1C-Bitrix: Web Environment. بالإضافة إلى ذلك، قم بعمل نسخة احتياطية من إعدادات نظام التشغيل لديك.

المتطلبات:

  • التردد - مرتين في اليوم.
  • احتفظ بنسخ لآخر 90 يومًا؛
  • القدرة على الحصول على الملفات الفردية لتاريخ محدد، إذا لزم الأمر؛
  • يجب تخزين النسخة الاحتياطية في مركز بيانات غير VDS؛
  • القدرة على الوصول إلى النسخة الاحتياطية من أي مكان (خادم آخر، جهاز كمبيوتر محلي، وما إلى ذلك).

كانت النقطة المهمة هي القدرة على إنشاء نسخ احتياطية بسرعة مع الحد الأدنى من استهلاك المساحة الإضافية وموارد النظام.

لا يتعلق الأمر بلقطة لاستعادة النظام بأكمله بسرعة، ولكن يتعلق بالملفات وقاعدة البيانات وتاريخ التغييرات.

خلفية:

  • VDS على المحاكاة الافتراضية XEN؛
  • OS 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. إنشاء "سحابة".
نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

3. في "السحابة" قم بإنشاء "كتالوج".
نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

4. بالنسبة إلى "الكتالوج"، قم بإنشاء "حساب الخدمة".
نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

5. قم بإنشاء مفاتيح لـ "حساب الخدمة".
نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

6. احفظ المفاتيح، ستكون هناك حاجة إليها في المستقبل.
نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

7. بالنسبة إلى "الدليل"، قم بإنشاء "Bucket"، وسوف تدخل الملفات فيه.
نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

8. أوصي بوضع حد واختيار "التخزين البارد".
نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

إعداد النسخ الاحتياطية المجدولة على الخادم

يفترض هذا الدليل المهارات الإدارية الأساسية.

1. قم بتثبيت الأداة المساعدة للازدواجية على VDS

yum install duplicity

2. قم بإنشاء مجلد لتفريغ 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;

fi

4. قم بتشغيل البرنامج النصي لأول مرة وتحقق من النتيجة، يجب أن تظهر الملفات في "Bucket".

`which bash` /backup_scripts/backup.sh

نسخ احتياطي تزايدي VDS مع موقع على 1C-Bitrix في Yandex.Cloud

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_KEY

3. قم بتشغيل البرنامج النصي وانتظر النتيجة.

`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

إضافة تعليق