Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

Potreboval som zálohovať stránku na „2C-Bitrix: Site Management“ (súbory a databázu mysql) dvakrát denne a uložiť históriu zmien na 1 dní.

Stránka sa nachádza na VDS so systémom CentOS 7 OS s nainštalovaným 1C-Bitrix: Web Environment. Okrem toho si vytvorte záložnú kópiu nastavení operačného systému.

požiadavky:

  • Frekvencia - 2 krát denne;
  • Uchovávajte kópie za posledných 90 dní;
  • Schopnosť získať jednotlivé súbory pre konkrétny dátum, ak je to potrebné;
  • Záloha musí byť uložená v inom dátovom centre ako VDS;
  • Možnosť prístupu k zálohe odkiaľkoľvek (iný server, lokálny počítač atď.).

Dôležitým bodom bola možnosť rýchleho vytvárania záloh s minimálnou spotrebou dodatočného priestoru a systémových prostriedkov.

Tu nejde o snímku na rýchlu obnovu celého systému, ale o súbory a databázu a históriu zmien.

Počiatočné údaje:

  • VDS na virtualizácii XEN;
  • OS CentOS 7;
  • 1C-Bitrix: webové prostredie;
  • Webová stránka založená na „1C-Bitrix: Site Management“, štandardná verzia;
  • Veľkosť súboru je 50 GB a bude rásť;
  • Veľkosť databázy je 3 GB a bude rásť.

Ihneď som vylúčil štandardnú zálohu zabudovanú do 1C-Bitrix. Je vhodný len pre malé lokality, pretože:

  • Zakaždým vytvorí úplnú kópiu stránky, takže každá kópia zaberie rovnaké množstvo miesta ako súbory, v mojom prípade je to 50 GB.
  • Zálohovanie sa robí pomocou PHP, čo je pri takom objeme súborov nemožné, preťaží to server a nikdy sa nedokončí.
  • A samozrejme, o nejakých 90 dňoch pri ukladaní plnej kópie nemôže byť ani reči.

Riešenie, ktoré ponúka hostiteľIde o záložný disk umiestnený v rovnakom dátovom centre ako VDS, ale na inom serveri. K disku sa môžete pripojiť cez FTP a použiť vlastné skripty, alebo ak je na VDS nainštalovaný ISPManager, cez jeho zálohovací modul. Táto možnosť nie je vhodná, pretože používa rovnaké dátové centrum.

Zo všetkého vyššie uvedeného je pre mňa najlepšou voľbou prírastkové zálohovanie pomocou vlastného skriptu v Yandex.Cloud (Object Storage) alebo Amazon S3 (Amazon Simple Storage Service).

To si vyžaduje:

  • root prístup k VDS;
  • nainštalovaný duplicitný nástroj;
  • účet v Yandex.Cloud.

Prírastkové zálohovanie — metóda, pri ktorej sa archivujú iba údaje, ktoré sa zmenili od poslednej zálohy.

neúprimnosť — nástroj na zálohovanie, ktorý používa algoritmy rsync a dokáže pracovať s Amazon S3.

Yandex.Cloud vs Amazon S3

V tomto prípade pre mňa nie je žiadny rozdiel medzi Yandex.Cloud a Amazon S3. Yandex podporuje väčšinu rozhrania Amazon S3 API, takže s ním môžete pracovať pomocou riešení, ktoré existujú pre prácu s S3. V mojom prípade ide o pomôcku duplicity.

Hlavnou výhodou Yandexu môže byť platba v rubľoch, ak existuje veľa údajov, nebude existovať spojenie s výmenným kurzom. Pokiaľ ide o rýchlosť, európske dátové centrá Amazonu fungujú porovnateľne s ruskými dátovými centrami v Yandex, môžete použiť napríklad Frankfurt. Predtým som na podobné úlohy používal Amazon S3, teraz som sa rozhodol vyskúšať Yandex.

Nastavenie služby Yandex.Cloud

1. Musíte si vytvoriť platobný účet v Yandex.Cloud. Ak to chcete urobiť, musíte sa prihlásiť do služby Yandex.Cloud prostredníctvom svojho účtu Yandex alebo si vytvoriť nový.

2. Vytvorte "Cloud".
Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

3. V „Cloude“ vytvorte „Katalóg“.
Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

4. Pre „Katalóg“ si vytvorte „Servisný účet“.
Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

5. Vytvorte kľúče pre „Servisný účet“.
Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

6. Kľúče si odložte, budú potrebné v budúcnosti.
Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

7. Pre „Adresár“ vytvorte „Bucket“, súbory sa doň dostanú.
Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

8. Odporúčam nastaviť limit a vybrať možnosť „Cold Storage“.
Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

Nastavenie plánovaných záloh na serveri

Táto príručka predpokladá základné administratívne zručnosti.

1. Nainštalujte pomôcku pre duplicitu na VDS

yum install duplicity

2. Vytvorte priečinok pre výpisy mysql, v mojom prípade je to /backup_db v koreňovom adresári VDS

3. Vytvorte priečinok pre bash skripty /backup_scripts a vytvorte prvý skript, ktorý bude vykonávať zálohy /backup_scripts/backup.sh

Obsah skriptu:

#!`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. Prvýkrát spustite skript a skontrolujte výsledok, súbory by sa mali objaviť v „Bucket“.

`which bash` /backup_scripts/backup.sh

Prírastkové zálohovanie VDS s webom na 1C-Bitrix v Yandex.Cloud

5. Pridajte skript do cronu, aby sa užívateľ root spustil 2-krát denne alebo s frekvenciou, ktorú potrebujete.

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

Obnova údajov z Yandex.Cloud

1. Vytvorte priečinok na obnovenie /backup_restore

2. Vytvorte bash skript na obnovenie /backup_scripts/restore.sh

Uvádzam najobľúbenejší príklad obnovenia konkrétneho súboru:

#!`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. Spustite skript a počkajte na výsledok.

`which bash` /backup_scripts/backup.sh

V priečinku /backup_restore/ nájdete súbor index.php, ktorý bol predtým zálohovaný.

Môžete vykonať jemnejšie úpravy podľa svojich potrieb.

Mínus duplicita

duplicita má jednu nevýhodu - nie je možné nastaviť limit využitia kanála. Pri bežnom kanáli to nerobí problém, ale pri použití kanála chráneného DDoS s rýchlym nabíjaním za deň by som chcel mať možnosť nastaviť limit 1-2 megabity.

Ako záver

Zálohovanie do Yandex.Cloud alebo Amazon S3 poskytuje nezávislú kópiu vašich webových stránok a nastavení operačného systému, ku ktorým je možné pristupovať z akéhokoľvek iného servera alebo lokálneho počítača. Táto kópia nie je viditeľná pre nikoho. ovládacie panely hostingu, ani v administračnom paneli Bitrixu, ktorý poskytuje dodatočnú bezpečnosť.

V najhoršom prípade môžete zostaviť nový server a nasadiť lokalitu kedykoľvek. Hoci najobľúbenejšou funkcionalitou bude možnosť prístupu k súboru pre konkrétny dátum.

Túto techniku ​​môžete použiť s akýmikoľvek VDS alebo dedikovanými servermi a lokalitami na akomkoľvek motore, nielen na 1C-Bitrix. OS môže byť aj iný ako CentOS, napríklad Ubuntu alebo Debian.

Zdroj: hab.com