Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

Kinailangan kong i-backup ang site sa 2C-Bitrix: Site Management 1 beses sa isang araw (mga file at mysql database) at mag-imbak ng kasaysayan ng mga pagbabago sa loob ng 90 araw.

Ang site ay matatagpuan sa isang VDS na tumatakbo sa CentOS 7 na may naka-install na "1C-Bitrix: Web Environment". Bukod pa rito, gumawa ng backup na kopya ng mga setting ng OS.

Mga Kinakailangan:

  • Dalas - 2 beses sa isang araw;
  • Panatilihin ang mga kopya para sa huling 90 araw;
  • Ang kakayahang makakuha ng mga indibidwal na file para sa isang tiyak na petsa, kung kinakailangan;
  • Ang backup ay dapat na naka-imbak sa isang data center maliban sa VDS;
  • Ang kakayahang ma-access ang backup mula sa kahit saan (isa pang server, lokal na computer, atbp.).

Ang isang mahalagang punto ay ang kakayahang mabilis na lumikha ng mga backup na may kaunting pagkonsumo ng karagdagang espasyo at mga mapagkukunan ng system.

Ito ay hindi tungkol sa isang snapshot para sa isang mabilis na pagpapanumbalik ng buong system, ngunit tungkol sa mga file at database at ang kasaysayan ng mga pagbabago.

Pinagmulan ng data:

  • VDS sa XEN virtualization;
  • OS CentOS 7;
  • 1C-Bitrix: Web environment;
  • Site batay sa "1C-Bitrix: Site Management", Standard na bersyon;
  • Ang laki ng file ay 50 GB at lalago;
  • Ang laki ng database ay 3 GB at lalago.

Karaniwang backup na binuo sa 1C-Bitrix - agad na hindi kasama. Ito ay angkop lamang para sa maliliit na site, dahil:

  • Gumagawa ng kumpletong kopya ng site sa bawat oras, ayon sa pagkakabanggit, ang bawat kopya ay kukuha ng mas maraming espasyo habang kinukuha ko ang mga file, sa aking kaso ito ay 50 GB.
  • Ginagawa ang pag-backup gamit ang PHP, na imposible sa ganitong dami ng mga file, mag-overload ito sa server at hinding-hindi matatapos.
  • At siyempre, hindi maaaring pag-usapan ang anumang 90 araw kapag nag-iimbak ng isang buong kopya.

Ang solusyon na inaalok ng hoster ay isang backup na disk na matatagpuan sa parehong data center bilang VDS, ngunit sa ibang server. Maaari kang magtrabaho kasama ang disk sa pamamagitan ng FTP at gamitin ang iyong sariling mga script, o kung ang ISPManager ay naka-install sa VDS, pagkatapos ay sa pamamagitan ng backup na module nito. Hindi angkop ang opsyong ito dahil sa paggamit ng parehong data center.

Mula sa lahat ng nasa itaas, ang pinakamahusay na pagpipilian para sa akin ay isang incremental backup ayon sa sarili kong senaryo sa Yandex.Cloud (Object Storage) o Amazon S3 (Amazon Simple Storage Service).

Kailangan nito:

  • root access sa VDS;
  • naka-install na duplicity utility;
  • account sa Yandex.Cloud.

incremental backup - isang paraan kung saan ang data lamang na nagbago mula noong huling backup ang naka-archive.

pagdaraya - isang backup na utility na gumagamit ng rsync algorithm at maaaring gumana sa Amazon S3.

Yandex.Cloud kumpara sa Amazon S3

Walang pagkakaiba sa pagitan ng Yandex.Cloud at Amazon S3 sa kasong ito para sa akin. Sinusuportahan ng Yandex ang pangunahing bahagi ng Amazon S3 API, kaya maaari mong gamitin ito gamit ang mga solusyon na magagamit para sa pagtatrabaho sa S3. Sa aking kaso, ito ang duplicity utility.

Ang pangunahing bentahe ng Yandex ay maaaring pagbabayad sa rubles, kung mayroong maraming data, pagkatapos ay walang link sa kurso. Sa mga tuntunin ng bilis, ang mga European data center ng Amazon ay gumagana nang naaayon sa mga Ruso sa Yandex, halimbawa, maaari mong gamitin ang Frankfurt. Ginamit ko dati ang Amazon S3 para sa mga katulad na gawain, ngayon ay nagpasya akong subukan ang Yandex.

Pagse-set up ng Yandex.Cloud

1. Kailangan mong lumikha ng account sa pagsingil sa Yandex.Cloud. Upang gawin ito, kailangan mong mag-log in sa Yandex.Cloud sa pamamagitan ng iyong Yandex account o lumikha ng bago.

2. Lumikha ng Cloud.
Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

3. Sa "Cloud" lumikha ng isang "Catalog".
Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

4. Para sa "Catalogue" lumikha ng "Serbisyo account".
Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

5. Para sa "Serbisyo account" gumawa ng mga susi.
Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

6. I-save ang mga susi, kakailanganin mo ang mga ito sa hinaharap.
Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

7. Para sa "Catalog" lumikha ng isang "Bucket", ang mga file ay mahuhulog dito.
Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

8. Inirerekomenda kong magtakda ng limitasyon at piliin ang "Cold Storage".
Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

Pagse-set up ng mga naka-iskedyul na backup sa server

Ipinagpapalagay ng gabay na ito ang mga pangunahing kasanayan sa pangangasiwa.

1. I-install ang duplicity utility sa VDS

yum install duplicity

2. Lumikha ng isang folder para sa mysql dumps, sa aking kaso ito ay /backup_db sa ugat ng VDS

3. Lumikha ng isang folder para sa mga script ng bash /backup_scripts at gawin ang unang script na magba-backup /backup_scripts/backup.sh

Nilalaman ng script:

#!`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. Patakbuhin ang script sa unang pagkakataon at suriin ang resulta, dapat lumabas ang mga file sa Bucket.

`which bash` /backup_scripts/backup.sh

Incremental VDS backup na may site sa 1C-Bitrix sa Yandex.Cloud

5. Magdagdag ng script sa cron para sa root user na maisakatuparan 2 beses sa isang araw, o nang madalas hangga't kailangan mo.

10 4,16 * * * `which bash` /backup_scripts/backup.sh

Pagbawi ng data mula sa Yandex.Cloud

1. Gumawa ng restore folder /backup_restore

2. Gumawa ng bash restore script /backup_scripts/restore.sh

Ibinibigay ko ang pinaka-hinihiling na halimbawa ng pagbawi ng isang partikular na file:

#!`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. Patakbuhin ang script at hintayin ang resulta.

`which bash` /backup_scripts/backup.sh

Sa folder na /backup_restore/ makikita mo ang index.php file na dating kasama sa backup.

Maaari kang gumawa ng mas pinong mga pagsasaayos upang umangkop sa iyong mga pangangailangan.

minus duplicity

May isang disbentaha ang duplicity - walang paraan upang magtakda ng limitasyon sa paggamit ng channel. Sa isang normal na channel, hindi ito gumagawa ng problema, ngunit sa isang channel na protektado ng DDoS na may bilis bawat araw na pagsingil, gusto kong makapagtakda ng limitasyon na 1-2 megabits.

Bilang konklusyon

Ang pag-back up sa Yandex.Cloud o Amazon S3 ay nagbibigay ng independiyenteng kopya ng site at mga setting ng OS na maaaring ma-access mula sa anumang iba pang server o lokal na computer. Kasabay nito, ang kopyang ito ay hindi makikita sa control panel ng pagho-host o sa Bitrix admin panel, na nagbibigay ng karagdagang seguridad.

Sa pinaka-kapus-palad na kinalabasan, maaari kang bumuo ng isang bagong server at i-deploy ang site para sa anumang petsa. Bagama't ang pinaka-hinihiling na functionality ay ang kakayahang ma-access ang file para sa isang partikular na petsa.

Maaari mong gamitin ang diskarteng ito sa anumang VDS o Dedicated server at site sa anumang engine, hindi lamang sa 1C-Bitrix. Ang OS ay maaari ding iba sa CentOS, gaya ng Ubuntu o Debian.

Pinagmulan: www.habr.com

Magdagdag ng komento