사이트를 하루에 2번(파일 및 mysql 데이터베이스) 1C-Bitrix: 사이트 관리에 백업하고 90일 동안 변경 내역을 저장해야 했습니다.
이 사이트는 "7C-Bitrix: 웹 환경"이 설치된 CentOS 1을 실행하는 VDS에 있습니다. 또한 OS 설정의 백업 복사본을 만드십시오.
요구 사항 :
- 빈도 - 하루에 2번;
- 지난 90일 동안의 사본을 보관하세요.
- 필요한 경우 특정 날짜에 대한 개별 파일을 가져오는 기능
- 백업은 VDS가 아닌 데이터 센터에 저장되어야 합니다.
- 어디에서나(다른 서버, 로컬 컴퓨터 등) 백업에 액세스할 수 있는 기능.
중요한 점은 추가 공간과 시스템 리소스를 최소한으로 소비하면서 신속하게 백업을 생성할 수 있는 능력이었습니다.
이는 전체 시스템의 빠른 복원을 위한 스냅샷이 아니라 파일과 데이터베이스, 변경 내역에 관한 것입니다.
기준선 :
- XEN 가상화의 VDS;
- 운영체제 CentOS 7;
- 1C-Bitrix: 웹 환경;
- "1C-Bitrix: 사이트 관리", 표준 버전 기반 사이트;
- 파일 크기는 50GB이며 점점 커질 것입니다.
- 데이터베이스 크기는 3GB이며 증가할 예정입니다.
1C-Bitrix에 내장된 표준 백업 - 즉시 제외됩니다. 다음과 같은 이유로 소규모 사이트에만 적합합니다.
- 매번 사이트의 전체 복사본을 만들기 때문에 각 복사본은 파일이 차지하는 공간과 동일한 공간을 차지하게 됩니다. 제 경우에는 50GB입니다.
- 백업은 PHP를 사용하여 수행되는데 이러한 파일 볼륨에서는 불가능하며 서버에 과부하가 걸리고 절대 끝나지 않습니다.
- 물론 전체 사본을 저장할 때 90일이라는 이야기는 있을 수 없습니다.
호스터가 제공하는 솔루션은 VDS와 동일한 데이터 센터에 있지만 다른 서버에 있는 백업 디스크입니다. FTP를 통해 디스크 작업을 하고 스크립트를 사용할 수 있습니다. 또는 ISPManager가 VDS에 설치된 경우 해당 백업 모듈을 통해 사용할 수 있습니다. 이 옵션은 동일한 데이터 센터를 사용하기 때문에 적합하지 않습니다.
위의 모든 것 중에서 나에게 가장 좋은 선택은 Yandex.Cloud(Object Storage) 또는 Amazon S3(Amazon Simple Storage Service)의 내 시나리오에 따른 증분 백업입니다.
이를 위해서는 다음이 필요합니다.
- VDS에 대한 루트 액세스;
- 설치된 이중성 유틸리티;
- Yandex.Cloud의 계정.
증분 백업 - 마지막 백업 이후 변경된 데이터만 아카이브하는 방식.
이중성 - rsync 알고리즘을 사용하고 Amazon S3와 함께 작동할 수 있는 백업 유틸리티입니다.
Yandex.Cloud와 Amazon S3 비교
이 경우 Yandex.Cloud와 Amazon S3 사이에는 차이가 없습니다. Yandex는 Amazon S3 API의 주요 부분을 지원하므로 S3 작업에 사용할 수 있는 솔루션을 사용하여 작업할 수 있습니다. 제 경우에는 이것이 이중성 유틸리티입니다.
Yandex의 가장 큰 장점은 루블로 지불할 수 있다는 것입니다. 데이터가 많으면 코스에 대한 링크가 없습니다. 속도 측면에서 Amazon의 유럽 데이터 센터는 Yandex의 러시아 데이터 센터와 동등하게 작동합니다. 예를 들어 프랑크푸르트를 사용할 수 있습니다. 이전에는 비슷한 작업에 Amazon S3를 사용했는데 이제는 Yandex를 사용해 보기로 결정했습니다.
Yandex.Cloud 설정
1. Yandex.Cloud에서 결제 계정을 만들어야 합니다. 이렇게 하려면 Yandex 계정을 통해 Yandex.Cloud에 로그인하거나 새 계정을 만들어야 합니다.
2. 클라우드를 생성합니다.
3. "클라우드"에서 "카탈로그"를 만듭니다.
4. "카탈로그"의 경우 "서비스 계정"을 생성합니다.
5. "서비스 계정"의 경우 키를 만듭니다.
6. 키를 저장하면 나중에 필요할 것입니다.
7. "카탈로그"의 경우 "버킷"을 생성하면 파일이 여기에 포함됩니다.
8. 한도를 설정하고 "냉장 보관"을 선택하는 것이 좋습니다.
서버에서 예약된 백업 설정
이 가이드에서는 기본적인 관리 기술을 사용한다고 가정합니다.
1. VDS에 이중성 유틸리티 설치
yum install duplicity
2. mysql 덤프용 폴더를 만듭니다. 제 경우에는 VDS 루트에 /backup_db입니다.
3. Bash 스크립트 /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
5. 루트 사용자가 하루에 2번 또는 필요한 만큼 자주 실행할 수 있도록 cron에 스크립트를 추가합니다.
10 4,16 * * * `which bash` /backup_scripts/backup.sh
Yandex.Cloud에서 데이터 복구
1. 복원 폴더 만들기 /backup_restore
2. 복구를 위한 bash 스크립트 만들기 /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-2MB의 제한을 설정할 수 있었으면 좋겠습니다.
결론으로
Yandex.Cloud 또는 Amazon S3에 백업하면 다른 서버나 로컬 컴퓨터에서 액세스할 수 있는 사이트 및 OS 설정의 독립적인 복사본이 제공됩니다. 동시에 이 사본은 추가 보안을 제공하는 호스팅 제어판이나 Bitrix 관리 패널에 표시되지 않습니다.
가장 불행한 결과는 새 서버를 구축하고 언제든지 사이트를 배포할 수 있다는 것입니다. 가장 많이 요청되는 기능은 특정 날짜의 파일에 액세스하는 기능입니다.
1C-Bitrix뿐만 아니라 모든 엔진의 모든 VDS 또는 전용 서버 및 사이트에서 이 기술을 사용할 수 있습니다. OS는 CentOS가 아닌 Ubuntu 또는 Debian과 같은 것일 수도 있습니다.
출처 : habr.com