Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

Saya perlu membuat sandaran tapak pada "2C-Bitrix: Pengurusan Tapak" (fail dan pangkalan data mysql) dua kali sehari dan menyimpan sejarah perubahan selama 1 hari.

Tapak ini terletak pada VDS yang menjalankan OS CentOS 7 dengan 1C-Bitrix: Persekitaran Web dipasang. Selain itu, buat salinan sandaran tetapan OS anda.

Keperluan:

  • Kekerapan - 2 kali sehari;
  • Simpan salinan selama 90 hari terakhir;
  • Keupayaan untuk mendapatkan fail individu untuk tarikh tertentu, jika perlu;
  • Sandaran mesti disimpan di pusat data selain VDS;
  • Keupayaan untuk mengakses sandaran dari mana-mana sahaja (pelayan lain, komputer tempatan, dll.).

Perkara penting ialah keupayaan untuk membuat sandaran dengan cepat dengan penggunaan ruang tambahan dan sumber sistem yang minimum.

Ini bukan tentang syot kilat untuk memulihkan keseluruhan sistem dengan cepat, tetapi mengenai fail dan pangkalan data serta sejarah perubahan.

Data awal:

  • VDS pada virtualisasi XEN;
  • OS CentOS 7;
  • 1C-Bitrix: Persekitaran web;
  • Tapak web berdasarkan "1C-Bitrix: Pengurusan Tapak", versi Standard;
  • Saiz fail ialah 50 GB dan akan berkembang;
  • Saiz pangkalan data ialah 3 GB dan akan berkembang.

Saya segera mengecualikan sandaran standard yang dibina ke dalam 1C-Bitrix. Ia hanya sesuai untuk tapak kecil, kerana:

  • Ia membuat salinan penuh tapak setiap kali, jadi setiap salinan akan menggunakan jumlah ruang yang sama seperti yang digunakan oleh fail, dalam kes saya ia adalah 50 GB.
  • Sandaran dilakukan menggunakan PHP, yang mustahil dengan jumlah fail sedemikian, ia akan membebankan pelayan dan tidak akan selesai.
  • Dan sudah tentu, tidak boleh bercakap tentang mana-mana 90 hari apabila menyimpan salinan penuh.

Penyelesaian yang ditawarkan oleh hoster ialah cakera sandaran yang terletak di pusat data yang sama dengan VDS, tetapi pada pelayan yang berbeza. Anda boleh bekerja dengan cakera melalui FTP dan menggunakan skrip anda sendiri, atau jika ISPManager dipasang pada VDS, kemudian melalui modul sandarannya. Pilihan ini tidak sesuai kerana penggunaan pusat data yang sama.

Daripada semua perkara di atas, pilihan terbaik untuk saya ialah sandaran tambahan menggunakan skrip saya sendiri dalam Yandex.Cloud (Storan Objek) atau Amazon S3 (Perkhidmatan Storan Mudah Amazon).

Ini memerlukan:

  • akses root kepada VDS;
  • utiliti duplikat yang dipasang;
  • akaun dalam Yandex.Cloud.

Sandaran tambahan β€” kaedah di mana hanya data yang telah berubah sejak sandaran terakhir diarkibkan.

bermuka dua β€” utiliti sandaran yang menggunakan algoritma rsync dan boleh berfungsi dengan Amazon S3.

Yandex.Cloud lwn Amazon S3

Dalam kes ini, tiada perbezaan antara Yandex.Cloud dan Amazon S3 untuk saya. Yandex menyokong sebahagian besar API Amazon S3, jadi anda boleh bekerja dengannya menggunakan penyelesaian yang wujud untuk bekerja dengan S3. Dalam kes saya, ini adalah utiliti duplikat.

Kelebihan utama Yandex mungkin pembayaran dalam rubel; jika terdapat banyak data, tidak akan ada sambungan ke kadar pertukaran. Dari segi kelajuan, pusat data Eropah Amazon berfungsi setanding dengan pusat data Rusia di Yandex; sebagai contoh, anda boleh menggunakan Frankfurt. Saya sebelum ini menggunakan Amazon S3 untuk tugasan yang serupa, kini saya memutuskan untuk mencuba Yandex.

Menyediakan Yandex.Cloud

1. Anda perlu membuat akaun pembayaran dalam Yandex.Cloud. Untuk melakukan ini, anda perlu log masuk ke Yandex.Cloud melalui akaun Yandex anda atau buat yang baharu.

2. Buat "Awan".
Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

3. Dalam "Cloud" buat "Katalog".
Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

4. Untuk "Katalog" buat "Akaun perkhidmatan".
Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

5. Buat kunci untuk "Akaun Perkhidmatan".
Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

6. Simpan kunci, ia akan diperlukan pada masa akan datang.
Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

7. Untuk "Direktori" buat "Bucket", fail akan masuk ke dalamnya.
Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

8. Saya mengesyorkan menetapkan had dan memilih "Storan Sejuk".
Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

Menyediakan sandaran berjadual pada pelayan

Panduan ini mengambil alih kemahiran asas pentadbiran.

1. Pasang utiliti pendua pada VDS

yum install duplicity

2. Buat folder untuk pembuangan mysql, dalam kes saya ia adalah /backup_db dalam akar VDS

3. Buat folder untuk skrip bash /backup_scripts dan buat skrip pertama yang akan melakukan backup /backup_scripts/backup.sh

Kandungan skrip:

#!`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. Jalankan skrip buat kali pertama dan semak hasilnya; fail harus muncul dalam "Badi".

`which bash` /backup_scripts/backup.sh

Sandaran VDS tambahan dengan tapak pada 1C-Bitrix dalam Yandex.Cloud

5. Tambahkan skrip pada cron untuk pengguna root dijalankan 2 kali sehari, atau dengan kekerapan yang anda perlukan.

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

Memulihkan data daripada Yandex.Cloud

1. Buat folder pemulihan /backup_restore

2. Buat skrip bash untuk pemulihan /backup_scripts/restore.sh

Saya memberikan contoh yang paling popular untuk memulihkan fail tertentu:

#!`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. Jalankan skrip dan tunggu hasilnya.

`which bash` /backup_scripts/backup.sh

Dalam folder /backup_restore/ anda akan menemui fail index.php yang telah disandarkan sebelum ini.

Anda boleh membuat pelarasan yang lebih halus untuk memenuhi keperluan anda.

Tolak pertindihan

duplicity mempunyai satu kelemahan - tidak mungkin untuk menetapkan had penggunaan saluran. Dengan saluran biasa ini tidak menimbulkan masalah, tetapi apabila menggunakan saluran yang dilindungi DDoS dengan pengecasan laju setiap hari, saya ingin dapat menetapkan had 1-2 megabit.

Sebagai kesimpulan

Sandaran dalam Yandex.Cloud atau Amazon S3 menyediakan salinan bebas tapak dan tetapan OS yang boleh diakses daripada mana-mana pelayan lain atau komputer tempatan. Selain itu, salinan ini tidak kelihatan sama ada dalam panel kawalan pengehosan atau dalam panel pentadbir Bitrix, yang menyediakan keselamatan tambahan.

Dalam senario kes terburuk, anda boleh memasang pelayan baharu dan menggunakan tapak pada bila-bila tarikh. Walaupun fungsi yang paling popular adalah keupayaan untuk mengakses fail untuk tarikh tertentu.

Anda boleh menggunakan teknik ini dengan mana-mana VDS atau pelayan dan tapak khusus pada mana-mana enjin, bukan hanya 1C-Bitrix. OS juga mungkin selain daripada CentOS, seperti Ubuntu atau Debian.

Sumber: www.habr.com

Tambah komen