Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

Ich musste die Site zweimal täglich auf 2C-Bitrix: Site Management sichern (Dateien und MySQL-Datenbank) und einen Änderungsverlauf für 1 Tage speichern.

Die Site befindet sich auf einem VDS mit CentOS 7, auf dem „1C-Bitrix: Web Environment“ installiert ist. Erstellen Sie außerdem eine Sicherungskopie der Betriebssystemeinstellungen.

Anforderungen:

  • Häufigkeit - 2 mal täglich;
  • Bewahren Sie Kopien für die letzten 90 Tage auf;
  • Die Möglichkeit, bei Bedarf einzelne Dateien für ein bestimmtes Datum abzurufen;
  • Das Backup muss in einem anderen Rechenzentrum als VDS gespeichert werden;
  • Die Möglichkeit, von überall (einem anderen Server, einem lokalen Computer usw.) auf das Backup zuzugreifen.

Ein wichtiger Punkt war die Möglichkeit, schnell Backups mit minimalem Verbrauch von zusätzlichem Speicherplatz und Systemressourcen zu erstellen.

Dabei geht es nicht um einen Snapshot zur schnellen Wiederherstellung des gesamten Systems, sondern um Dateien und die Datenbank sowie den Änderungsverlauf.

Hintergrund:

  • VDS zur XEN-Virtualisierung;
  • Betriebssystem CentOS 7;
  • 1C-Bitrix: Webumgebung;
  • Site basierend auf „1C-Bitrix: Site Management“, Standardversion;
  • Die Dateigröße beträgt 50 GB und wächst;
  • Die Datenbankgröße beträgt 3 GB und wird wachsen.

In 1C-Bitrix integriertes Standard-Backup – sofort ausgeschlossen. Es ist nur für kleine Websites geeignet, weil:

  • Erstellt jedes Mal eine vollständige Kopie der Site bzw. jede Kopie nimmt so viel Speicherplatz ein, wie ich die Dateien belege, in meinem Fall sind es 50 GB.
  • Die Sicherung erfolgt mit PHP, was bei solchen Dateimengen nicht möglich ist, den Server überlastet und nie endet.
  • Und von einer 90-Tage-Aufbewahrung einer Vollkopie kann natürlich keine Rede sein.

Die Lösung, die der Hoster anbietet, ist eine Backup-Festplatte, die sich im selben Rechenzentrum wie der VDS, aber auf einem anderen Server befindet. Sie können mit der Festplatte über FTP arbeiten und Ihre eigenen Skripte verwenden, oder, wenn ISPManager auf dem VDS installiert ist, über dessen Backup-Modul. Aufgrund der Nutzung desselben Rechenzentrums ist diese Option nicht geeignet.

Aus all dem ist für mich die beste Wahl ein inkrementelles Backup gemäß meinem eigenen Szenario in Yandex.Cloud (Object Storage) oder Amazon S3 (Amazon Simple Storage Service).

Dafür braucht man:

  • Root-Zugriff auf VDS;
  • Installiertes Duplicity-Dienstprogramm;
  • Konto in Yandex.Cloud.

inkrementelles Backup - eine Methode, bei der nur Daten archiviert werden, die sich seit der letzten Sicherung geändert haben.

Duplizität – ein Backup-Dienstprogramm, das Rsync-Algorithmen verwendet und mit Amazon S3 arbeiten kann.

Yandex.Cloud vs. Amazon S3

Für mich gibt es in diesem Fall keinen Unterschied zwischen Yandex.Cloud und Amazon S3. Yandex unterstützt den Hauptteil der Amazon S3-API, sodass Sie mit den verfügbaren Lösungen für die Arbeit mit S3 damit arbeiten können. In meinem Fall ist dies das Duplicity-Dienstprogramm.

Der Hauptvorteil von Yandex kann die Zahlung in Rubel sein. Wenn viele Daten vorhanden sind, gibt es keinen Link zum Kurs. In puncto Geschwindigkeit funktionieren die europäischen Rechenzentren von Amazon vergleichbar mit den russischen in Yandex, beispielsweise können Sie Frankfurt nutzen. Früher habe ich Amazon S3 für ähnliche Aufgaben verwendet, jetzt habe ich mich entschieden, Yandex auszuprobieren.

Yandex.Cloud einrichten

1. Sie müssen ein Rechnungskonto in Yandex.Cloud erstellen. Dazu müssen Sie sich über Ihr Yandex-Konto bei Yandex.Cloud anmelden oder ein neues erstellen.

2. Cloud erstellen.
Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

3. Erstellen Sie in der „Cloud“ einen „Katalog“.
Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

4. Erstellen Sie für den „Katalog“ ein „Servicekonto“.
Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

5. Erstellen Sie für das „Dienstkonto“ Schlüssel.
Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

6. Bewahren Sie die Schlüssel auf, Sie werden sie in Zukunft benötigen.
Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

7. Erstellen Sie für den „Katalog“ einen „Bucket“, in den die Dateien fallen.
Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

8. Ich empfehle, ein Limit festzulegen und „Cold Storage“ auszuwählen.
Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

Einrichten geplanter Backups auf dem Server

Dieser Leitfaden setzt grundlegende Verwaltungskenntnisse voraus.

1. Installieren Sie das Duplicity-Dienstprogramm auf dem VDS

yum install duplicity

2. Erstellen Sie einen Ordner für MySQL-Dumps, in meinem Fall ist es /backup_db im VDS-Stammverzeichnis

3. Erstellen Sie einen Ordner für Bash-Skripte /backup_scripts und erstellen Sie das erste Skript, das /backup_scripts/backup.sh sichert

Skriptinhalt:

#!`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. Führen Sie das Skript zum ersten Mal aus und überprüfen Sie das Ergebnis. Dateien sollten im Bucket erscheinen.

`which bash` /backup_scripts/backup.sh

Inkrementelles VDS-Backup mit einer Site auf 1C-Bitrix in Yandex.Cloud

5. Fügen Sie cron ein Skript hinzu, damit der Root-Benutzer zweimal täglich oder so oft wie nötig ausgeführt wird.

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

Datenwiederherstellung von Yandex.Cloud

1. Erstellen Sie einen Wiederherstellungsordner /backup_restore

2. Erstellen Sie das Bash-Wiederherstellungsskript /backup_scripts/restore.sh

Ich gebe das am häufigsten nachgefragte Beispiel für die Wiederherstellung einer bestimmten Datei:

#!`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. Führen Sie das Skript aus und warten Sie auf das Ergebnis.

`which bash` /backup_scripts/backup.sh

Im Ordner /backup_restore/ finden Sie die Datei index.php, die zuvor im Backup enthalten war.

Sie können feinere Anpassungen an Ihre Bedürfnisse vornehmen.

minus Doppelzüngigkeit

Duplizität hat einen Nachteil: Es gibt keine Möglichkeit, ein Kanalnutzungslimit festzulegen. Bei einem normalen Kanal stellt dies kein Problem dar, aber bei einem DDoS-geschützten Kanal mit Geschwindigkeitsabrechnung pro Tag würde ich gerne ein Limit von 1-2 Megabit festlegen können.

Als Schlussfolgerung

Durch die Sicherung in Yandex.Cloud oder Amazon S3 erhalten Sie eine unabhängige Kopie der Website- und Betriebssystemeinstellungen, auf die von jedem anderen Server oder lokalen Computer aus zugegriffen werden kann. Gleichzeitig ist diese Kopie weder im Hosting-Control-Panel noch im Bitrix-Admin-Panel sichtbar, was zusätzliche Sicherheit bietet.

Im schlimmsten Fall können Sie einen neuen Server erstellen und die Site für einen beliebigen Zeitpunkt bereitstellen. Die am häufigsten nachgefragte Funktionalität wird jedoch die Möglichkeit sein, auf die Datei für ein bestimmtes Datum zuzugreifen.

Sie können diese Technik mit allen VDS- oder dedizierten Servern und Sites auf allen Engines verwenden, nicht nur mit 1C-Bitrix. Das Betriebssystem kann auch ein anderes als CentOS sein, beispielsweise Ubuntu oder Debian.

Source: habr.com

Kommentar hinzufügen