Инкрементална резервна копија на VDS со веб-страница на 1C-Bitrix во Yandex.Cloud

Требаше да правам резервни копии на страницата на „2C-Bitrix: Управување со страници“ (датотеки и база на податоци mysql) два пати на ден и да чувам историја на промени 1 дена.

Веб-страницата се наоѓа на VDS со CentOS 7 OS со инсталиран 1C-Bitrix: Web Environment. Дополнително, направете резервна копија од поставките на вашиот ОС.

Барања:

  • Фреквенција - 2 пати на ден;
  • Чувајте копии во последните 90 дена;
  • Способност да се добијат поединечни датотеки за одреден датум, доколку е потребно;
  • Резервната копија мора да се складира во центар за податоци различен од VDS;
  • Можност за пристап до резервната копија од каде било (друг сервер, локален компјутер, итн.).

Важна точка беше можноста за брзо создавање резервни копии со минимална потрошувачка на дополнителен простор и системски ресурси.

Не станува збор за слика за брзо враќање на целиот систем, туку за датотеките и базата на податоци и историјата на промените.

Основна линија:

  • VDS на виртуелизација на XEN;
  • ОС CentOS 7;
  • 1C-Bitrix: веб-околина;
  • Веб-страница базирана на „1C-Bitrix: Управување со локацијата“, Стандардна верзија;
  • Големината на датотеката е 50 GB и ќе расте;
  • Големината на базата на податоци е 3 GB и ќе расте.

Веднаш ја исклучив стандардната резервна копија вградена во 1C-Bitrix. Таа е погодна само за мали локации, бидејќи:

  • Секој пат прави целосна копија на страницата, така што секоја копија ќе зафаќа исто толку простор колку што зафаќаат датотеките, во мојот случај тоа е 50 GB.
  • Резервната копија се прави со помош на PHP, што е невозможно со такви количини на датотеки, ќе го преоптовари серверот и никогаш нема да заврши.
  • И, се разбира, не може да се зборува за 90 дена кога се чува целосна копија.

Решението што го нуди хостерот е резервен диск лоциран во истиот центар за податоци како VDS, но на различен сервер. Можете да работите со дискот преку FTP и да користите сопствени скрипти, или ако ISPManager е инсталиран на VDS, тогаш преку неговиот резервен модул. Оваа опција не е погодна поради користењето на истиот центар за податоци.

Од сето горенаведено, најдобриот избор за мене е постепена резервна копија користејќи моја сопствена скрипта во Yandex.Cloud (Складирање на објекти) или Amazon S3 (Едноставна услуга за складирање на Amazon).

Ова бара:

  • root пристап до VDS;
  • инсталирана алатка за двојност;
  • сметка во Yandex.Cloud.

Инкрементална резервна копија — метод во кој се архивираат само податоците што се променети од последната резервна копија.

дупличност — алатка за резервна копија која користи алгоритми rsync и може да работи со Amazon S3.

Yandex.Cloud vs Amazon S3

Во овој случај, за мене нема разлика помеѓу Yandex.Cloud и Amazon S3. Yandex го поддржува најголемиот дел од Amazon S3 API, така што можете да работите со него користејќи ги решенијата што постојат за работа со S3. Во мојот случај, ова е алатката за двојство.

Главната предност на Yandex може да биде плаќање во рубли, ако има многу податоци, нема да има врска со девизниот курс. Во однос на брзината, европските центри за податоци на Амазон работат споредливи со руските центри за податоци во 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. За „Директориум“ креирајте „Кофа“, датотеките ќе влезат во него.
Инкрементална резервна копија на VDS со веб-страница на 1C-Bitrix во Yandex.Cloud

8. Препорачувам да поставите ограничување и да изберете „Ладно складирање“.
Инкрементална резервна копија на VDS со веб-страница на 1C-Bitrix во Yandex.Cloud

Поставување на закажани резервни копии на серверот

Овој водич ги претпоставува основните административни вештини.

1. Инсталирајте ја алатката duplicity на VDS

yum install duplicity

2. Направете папка за исфрлање на mysql, во мојот случај тоа е /backup_db во коренот на VDS

3. Направете папка за баш скрипти /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

Инкрементална резервна копија на VDS со веб-страница на 1C-Bitrix во Yandex.Cloud

5. Додајте скрипта во cron за root корисникот да работи 2 пати на ден или со фреквенцијата што ви треба.

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

Враќање податоци од Yandex.Cloud

1. Направете папка за обновување /backup_restore

2. Направете баш скрипта за обновување /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

Додадете коментар