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

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



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



المتطلبات:



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


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



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



بيانات أولية:



  • VDS على XEN الافتراضية ؛
  • نظام CentOS 7 OS ؛
  • 1C-Bitrix: بيئة الويب ؛
  • يعتمد الموقع على 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 مقابل Amazon S3



لا يوجد فرق بين Yandex.Cloud و Amazon S3 في هذه الحالة. يدعم Yandex الجزء الرئيسي من Amazon S3 API ، لذا يمكنك العمل معه باستخدام الحلول المتاحة للعمل مع S3. في حالتي ، هذه هي أداة الازدواجية.



يمكن أن تكون الميزة الرئيسية لـ Yandex هي الدفع بالروبل ، إذا كان هناك الكثير من البيانات ، فلن يكون هناك ارتباط بسعر الصرف. من حيث السرعة ، تعمل مراكز بيانات أمازون الأوروبية بما يتناسب مع المراكز الروسية في ياندكس ، على سبيل المثال ، يمكنك استخدام فرانكفورت. لقد استخدمت Amazon S3 سابقًا للقيام بمهام مماثلة ، والآن قررت تجربة Yandex.



تكوين Yandex.Cloud



1. تحتاج إلى إنشاء حساب فواتير في Yandex.Cloud. للقيام بذلك ، تحتاج إلى تسجيل الدخول إلى Yandex.Cloud من خلال حساب Yandex الخاص بك أو إنشاء حساب جديد.



2. إنشاء "سحابة".





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





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





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





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





7. أنشئ "دلو" لـ "الكتالوج" ، وسوف يحتوي على ملفات.





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





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



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



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



yum install duplicity




2. أنشئ مجلدًا لتفريغ mysql ، في حالتي يكون / backup_db في جذر VDS



3. أنشئ مجلدًا لـ bash scripts / 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. قم بتشغيل البرنامج النصي لأول مرة وتحقق من النتيجة ؛ يجب أن تظهر الملفات في "الحاوية".



`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_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.



All Articles