Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

사이트를 하루에 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. 클라우드를 생성합니다.
Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

3. "클라우드"에서 "카탈로그"를 만듭니다.
Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

4. "카탈로그"의 경우 "서비스 계정"을 생성합니다.
Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

5. "서비스 계정"의 경우 키를 만듭니다.
Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

6. 키를 저장하면 나중에 필요할 것입니다.
Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

7. "카탈로그"의 경우 "버킷"을 생성하면 파일이 여기에 포함됩니다.
Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

8. 한도를 설정하고 "냉장 보관"을 선택하는 것이 좋습니다.
Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

서버에서 예약된 백업 설정

이 가이드에서는 기본적인 관리 기술을 사용한다고 가정합니다.

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

Yandex.Cloud의 1C-Bitrix 사이트를 사용한 증분 VDS 백업

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

코멘트를 추가