Men kuniga ikki marta "2C-Bitrix: Sayt boshqaruvi" (fayllar va MySQL ma'lumotlar bazasi) da saytning zaxira nusxalarini yaratishim va o'zgarishlar tarixini 1 kun davomida saqlashim kerak edi.
Sayt 7C-Bitrix: Web Environment o'rnatilgan CentOS 1 operatsion tizimida ishlaydigan VDS da joylashgan. Bundan tashqari, OS sozlamalarining zaxira nusxasini yarating.
Talablar:
- Tez-tez - kuniga 2 marta;
- Nusxalarni oxirgi 90 kun davomida saqlang;
- Agar kerak bo'lsa, ma'lum bir sana uchun alohida fayllarni olish imkoniyati;
- Zaxira VDS dan boshqa ma'lumotlar markazida saqlanishi kerak;
- Zaxiraga istalgan joydan (boshqa server, mahalliy kompyuter va h.k.) kirish imkoniyati.
Muhim nuqta qo'shimcha joy va tizim resurslarini minimal iste'mol qilish bilan tezda zaxira nusxalarini yaratish qobiliyati edi.
Bu butun tizimni tezda tiklash uchun oniy tasvir haqida emas, balki fayllar va ma'lumotlar bazasi va o'zgarishlar tarixi haqida.
Dastlabki ma'lumotlar:
- XEN virtualizatsiyasi bo'yicha VDS;
- OS CentOS 7;
- 1C-Bitrix: veb-muhit;
- "1C-Bitrix: Saytni boshqarish" ga asoslangan veb-sayt, standart versiya;
- Fayl hajmi 50 GB va o'sib boradi;
- Ma'lumotlar bazasi hajmi 3 GB va o'sadi.
Men darhol 1C-Bitrix-ga o'rnatilgan standart zaxira nusxasini chiqarib tashladim. Bu faqat kichik saytlar uchun javob beradi, chunki:
- U har safar saytning to'liq nusxasini yaratadi, shuning uchun har bir nusxa fayllar egallagan joyni egallaydi, mening holimda bu 50 GB.
- Zaxiralash PHP yordamida amalga oshiriladi, bunday hajmdagi fayllar bilan bu mumkin emas, u serverni ortiqcha yuklaydi va hech qachon tugamaydi.
- Va, albatta, to'liq nusxani saqlashda hech qanday 90 kun haqida gap bo'lishi mumkin emas.
Taklif etuvchi yechim mezbonBu VDS bilan bir xil ma'lumotlar markazida, lekin boshqa serverda joylashgan zaxira disk. Siz diskka FTP orqali kirishingiz va o'zingizning skriptlaringizdan foydalanishingiz mumkin yoki agar ISPManager VDSga o'rnatilgan bo'lsa, uning zaxira moduli orqali. Bu parametr mos emas, chunki u bir xil ma'lumotlar markazidan foydalanadi.
Yuqorida aytilganlarning barchasidan men uchun eng yaxshi tanlov bu Yandex.Cloud (Object Storage) yoki Amazon S3 (Amazon Simple Storage Service) da o'z skriptimdan foydalangan holda qo'shimcha zaxira nusxasi.
Bu talab qiladi:
- VDS ga ildiz kirish;
- o'rnatilgan ikkilamchi yordam dasturi;
- Yandex.Cloud-da hisob qaydnomasi.
Qo'shimcha zaxira — faqat oxirgi zahiradan keyin oʻzgargan maʼlumotlar arxivlanadigan usul.
ikki tomonlama — rsync algoritmlaridan foydalanadigan va Amazon S3 bilan ishlay oladigan zaxira yordam dasturi.
Yandex.Cloud va Amazon S3
Bunday holda, men uchun Yandex.Cloud va Amazon S3 o'rtasida hech qanday farq yo'q. Yandex Amazon S3 API-ning asosiy qismini qo'llab-quvvatlaydi, shuning uchun siz S3 bilan ishlash uchun mavjud echimlardan foydalanib u bilan ishlashingiz mumkin. Mening holatimda, bu ikki tomonlama yordam dasturi.
Yandex-ning asosiy afzalligi rublda to'lov bo'lishi mumkin, agar ma'lumotlar ko'p bo'lsa, valyuta kursiga aloqasi bo'lmaydi. Tezlik nuqtai nazaridan, Amazonning Evropa ma'lumotlar markazlari Yandex-dagi rus ma'lumotlar markazlari bilan taqqoslanadigan ishlaydi, masalan, siz Frankfurtdan foydalanishingiz mumkin; Men ilgari shunga o'xshash vazifalar uchun Amazon S3-dan foydalanganman, endi Yandex-ni sinab ko'rishga qaror qildim.
Yandex.Cloud-ni sozlash
1. Yandex.Cloud-da to'lov hisobini yaratishingiz kerak. Buning uchun Yandex.Cloud-ga Yandex hisob qaydnomangiz orqali kirishingiz yoki yangisini yaratishingiz kerak.
2. "Bulut" yarating.

3. "Bulut" da "Katalog" yarating.

4. "Katalog" uchun "Xizmat hisobini" yarating.

5. "Xizmat hisobi" uchun kalitlarni yarating.

6. Kalitlarni saqlang, ular kelajakda kerak bo'ladi.

7. "Katalog" uchun "paqir" yarating, unga fayllar kiradi.

8. Men cheklovni belgilashni va "Sovuq saqlash" ni tanlashni tavsiya qilaman.

Serverda rejalashtirilgan zaxira nusxalarini o'rnatish
Ushbu qo'llanma asosiy boshqaruv ko'nikmalarini o'z ichiga oladi.
1. VDS-ga duplicity yordam dasturini o'rnating
yum install duplicity2. MySQL dumplari uchun papka yarating, mening holimda bu VDS ildizida /backup_db
3. Bash skriptlari /backup_scripts uchun papka yarating va /backup_scripts/backup.sh zaxira nusxalarini amalga oshiradigan birinchi skriptni yarating.
Skript tarkibi:
#!`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;
fi4. Skriptni birinchi marta ishga tushiring va natijani tekshiring "Paqir" da paydo bo'lishi kerak;
`which bash` /backup_scripts/backup.sh
5. Ildiz foydalanuvchisi kuniga 2 marta yoki kerakli chastotada ishlashi uchun cronga skript qo'shing.
10 4,16 * * * `which bash` /backup_scripts/backup.shYandex.Cloud-dan ma'lumotlarni tiklash
1. Qayta tiklash papkasini yarating /backup_restore
2. Qayta tiklash /backup_scripts/restore.sh uchun bash skriptini yarating
Muayyan faylni tiklashning eng mashhur misolini keltiraman:
#!`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_KEY3. Skriptni ishga tushiring va natijani kuting.
`which bash` /backup_scripts/backup.sh/backup_restore/ papkasida siz avval zaxiralangan index.php faylini topasiz.
Ehtiyojlaringizga mos keladigan nozikroq o'zgarishlar qilishingiz mumkin.
Minus takrorlash
ikkilanishning bitta kamchiligi bor - kanaldan foydalanish chegarasini belgilash mumkin emas. Oddiy kanal bilan bu muammo tug'dirmaydi, lekin kuniga tezlikni zaryadlovchi DDoS bilan himoyalangan kanaldan foydalanganda, men 1-2 megabit chegarasini o'rnatishni xohlayman.
Xulosa sifatida
Yandex.Cloud yoki Amazon S3 ga zaxiralash veb-saytingiz va OT sozlamalarining mustaqil nusxasini taqdim etadi, unga boshqa istalgan server yoki mahalliy kompyuterdan kirish mumkin. Ushbu nusxa hech kimga ko'rinmaydi. boshqaruv panellari xosting, shuningdek, qo'shimcha xavfsizlikni ta'minlaydigan Bitrix administrator panelida ham mavjud emas.
Eng yomon stsenariyda siz yangi serverni yig'ishingiz va istalgan vaqtda saytni joylashtirishingiz mumkin. Garchi eng mashhur funksionallik ma'lum bir sana uchun faylga kirish imkoniyati bo'ladi.
Siz ushbu texnikadan faqat 1C-Bitrix emas, balki har qanday VDS yoki Dedicated serverlar va saytlar bilan ham foydalanishingiz mumkin. OT Ubuntu yoki Debian kabi CentOS-dan boshqa bo'lishi mumkin.
Manba: www.habr.com
