Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

Günde iki kez “2C-Bitrix: Site Yönetimi”nde (dosyalar ve mysql veritabanı) sitenin yedeğini almam ve 1 gün boyunca değişiklik geçmişini saklamam gerekiyordu.

Site, 7C-Bitrix: Web Ortamı yüklü CentOS 1 işletim sistemi çalıştıran bir VDS'de bulunmaktadır. Ayrıca işletim sistemi ayarlarınızın yedek bir kopyasını alın.

Gereksinimler:

  • Sıklık - günde 2 kez;
  • Kopyalarını son 90 gün boyunca saklayın;
  • Gerekirse belirli bir tarih için ayrı ayrı dosyalar alma yeteneği;
  • Yedeklemenin VDS dışında bir veri merkezinde saklanması gerekir;
  • Yedeklemeye her yerden (başka bir sunucu, yerel bilgisayar vb.) erişme yeteneği.

Önemli bir nokta, minimum ek alan ve sistem kaynağı tüketimi ile hızlı bir şekilde yedekleme oluşturma yeteneğiydi.

Bu, tüm sistemi hızlı bir şekilde geri yüklemek için bir anlık görüntüyle ilgili değil, dosyalar, veritabanı ve değişikliklerin geçmişiyle ilgilidir.

Başlangıç ​​verileri:

  • XEN sanallaştırmasında VDS;
  • İşletim Sistemi CentOS 7;
  • 1C-Bitrix: Web ortamı;
  • “1C-Bitrix: Site Yönetimi”ni temel alan web sitesi, Standart sürüm;
  • Dosya boyutu 50 GB olup büyüyecektir;
  • Veritabanı boyutu 3 GB olup büyüyecektir.

1C-Bitrix'te yerleşik olan standart yedeklemeyi hemen hariç tuttum. Yalnızca küçük siteler için uygundur çünkü:

  • Her seferinde sitenin tam bir kopyasını oluşturur, böylece her kopya dosyaların kapladığı alanla aynı miktarda alanı kaplar, benim durumumda bu 50 GB'dir.
  • Yedekleme PHP kullanılarak yapılır, bu kadar büyük miktarda dosyayla bu imkansızdır, sunucuya aşırı yük bindirir ve hiçbir zaman tamamlanmaz.
  • Ve elbette, tam kopyanın saklanması için 90 günden söz edilemez.

Barındırıcının sunduğu çözüm, VDS ile aynı veri merkezinde ancak farklı bir sunucuda bulunan bir yedekleme diskidir. Diskle FTP aracılığıyla çalışabilir ve kendi komut dosyalarınızı kullanabilirsiniz veya VDS'de ISPManager yüklüyse yedekleme modülü aracılığıyla yapabilirsiniz. Bu seçenek aynı veri merkezinin kullanılması nedeniyle uygun değildir.

Yukarıdakilerin hepsinden benim için en iyi seçim, Yandex.Cloud'da (Object Storage) veya Amazon S3'te (Amazon Simple Storage Service) kendi komut dosyamı kullanarak artımlı bir yedeklemedir.

Bu gerektirir:

  • VDS'ye kök erişimi;
  • yüklü kopya yardımcı programı;
  • Yandex.Cloud'daki hesap.

Artımlı yedekleme — yalnızca son yedeklemeden bu yana değişen verilerin arşivlendiği bir yöntem.

iki yüzlülük — rsync algoritmalarını kullanan ve Amazon S3 ile çalışabilen bir yedekleme yardımcı programı.

Yandex.Cloud ve Amazon S3 karşılaştırması

Bu durumda benim için Yandex.Cloud ile Amazon S3 arasında hiçbir fark yok. Yandex, Amazon S3 API'sinin büyük bir kısmını destekler; böylece S3 ile çalışmaya yönelik mevcut çözümleri kullanarak onunla çalışabilirsiniz. Benim durumumda bu, ikilik özelliğidir.

Yandex'in ana avantajı ruble cinsinden ödeme olabilir, çok fazla veri varsa döviz kuruyla bağlantı olmayacaktır. Hız açısından Amazon'un Avrupa veri merkezleri, Yandex'deki Rus veri merkezleriyle karşılaştırılabilir çalışır; örneğin Frankfurt'u kullanabilirsiniz. Daha önce benzer işler için Amazon S3'ü kullanıyordum, şimdi de Yandex'i denemeye karar verdim.

Yandex.Cloud'u kurma

1. Yandex.Cloud'da bir ödeme hesabı oluşturmanız gerekir. Bunu yapmak için Yandex hesabınız üzerinden Yandex.Cloud'a giriş yapmanız veya yeni bir hesap oluşturmanız gerekir.

2. Bir "Bulut" oluşturun.
Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

3. “Bulut”ta bir “Katalog” oluşturun.
Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

4. “Katalog” için bir “Hizmet hesabı” oluşturun.
Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

5. “Hizmet Hesabı” için anahtarlar oluşturun.
Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

6. Anahtarları saklayın, gelecekte onlara ihtiyaç duyulacak.
Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

7. “Dizin” için bir “Kova” oluşturun, dosyalar onun içine girecektir.
Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

8. Bir limit belirleyip “Soğuk Hava Deposu”nu seçmenizi öneririm.
Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

Sunucuda zamanlanmış yedeklemelerin ayarlanması

Bu kılavuzda temel yönetim becerileri varsayılmaktadır.

1. Duplicity yardımcı programını VDS'ye yükleyin

yum install duplicity

2. MySQL dökümleri için bir klasör oluşturun, benim durumumda VDS kökünde /backup_db'dir

3. Bash betikleri /backup_scripts için bir klasör oluşturun ve yedeklemeleri gerçekleştirecek ilk betiği /backup_scripts/backup.sh yapın

Komut dosyası içeriği:

#!`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. Komut dosyasını ilk kez çalıştırın ve sonucu kontrol edin; dosyalar “Kova”da görünmelidir.

`which bash` /backup_scripts/backup.sh

Yandex.Cloud'da 1C-Bitrix'teki bir siteyle artımlı VDS yedeklemesi

5. Root kullanıcısının günde 2 defa veya ihtiyacınız olan sıklıkta çalışması için cron'a bir script ekleyin.

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

Yandex.Cloud'dan veri kurtarma

1. Bir kurtarma klasörü oluşturun /backup_restore

2. /backup_scripts/restore.sh kurtarma için bir bash betiği oluşturun

Belirli bir dosyayı geri yüklemenin en popüler örneğini veriyorum:

#!`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. Komut dosyasını çalıştırın ve sonucu bekleyin.

`which bash` /backup_scripts/backup.sh

/backup_restore/ klasöründe önceden yedeklenmiş olan index.php dosyasını bulacaksınız.

İhtiyaçlarınıza göre daha ince ayarlamalar yapabilirsiniz.

Eksi çoğaltma

yinelemenin bir dezavantajı vardır; kanal kullanım sınırı belirlemek mümkün değildir. Normal kanalda bu sorun yaratmıyor ama günlük hızlı şarjlı DDoS korumalı kanal kullanırken 1-2 megabitlik bir limit belirleyebilmek isterim.

Sonuç olarak

Yandex.Cloud veya Amazon S3'teki yedekleme, sitenin ve işletim sistemi ayarlarının başka herhangi bir sunucudan veya yerel bilgisayardan erişilebilen bağımsız bir kopyasını sağlar. Üstelik bu kopya ne barındırma kontrol panelinde ne de Bitrix yönetici panelinde görünmez, bu da ek güvenlik sağlar.

En kötü senaryoda, istediğiniz zaman yeni bir sunucu kurabilir ve siteyi dağıtabilirsiniz. En popüler işlevsellik, belirli bir tarihe ait bir dosyaya erişme yeteneği olacaktır.

Bu tekniği yalnızca 1C-Bitrix'te değil, herhangi bir motordaki herhangi bir VDS veya Dedicated sunucu ve sitede kullanabilirsiniz. İşletim sistemi ayrıca Ubuntu veya Debian gibi CentOS dışında da olabilir.

Kaynak: habr.com

Yorum ekle