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é hostiteľ ponúka, je záložný disk umiestnený v rovnakom dátovom centre ako VDS, ale na inom serveri. S diskom môžete pracovať cez FTP a používať vlastné skripty, alebo ak je na VDS nainštalovaný ISPManager, tak cez jeho zálohovací modul. Táto možnosť nie je vhodná z dôvodu použitia rovnakého dátového centra.
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".
3. V „Cloude“ vytvorte „Katalóg“.
4. Pre „Katalóg“ si vytvorte „Servisný účet“.
5. Vytvorte kľúče pre „Servisný účet“.
6. Kľúče si odložte, budú potrebné v budúcnosti.
7. Pre „Adresár“ vytvorte „Bucket“, súbory sa doň dostanú.
8. Odporúčam nastaviť limit a vybrať možnosť „Cold Storage“.
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
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 v Yandex.Cloud alebo Amazon S3 poskytuje nezávislú kópiu 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. Okrem toho táto kópia nie je viditeľná ani na ovládacom paneli hostiteľa, ani na paneli správcu Bitrix, čo poskytuje dodatočné zabezpečenie.
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