Nilihitaji kufanya chelezo za tovuti kwenye "2C-Bitrix: Usimamizi wa Tovuti" (faili na hifadhidata ya mysql) mara mbili kwa siku na kuhifadhi historia ya mabadiliko kwa siku 1.
Tovuti hii iko kwenye VDS inayoendesha CentOS 7 OS iliyo na 1C-Bitrix: Mazingira ya Wavuti iliyosakinishwa. Zaidi ya hayo, fanya nakala ya chelezo ya mipangilio yako ya Mfumo wa Uendeshaji.
Mahitaji:
- Frequency - mara 2 kwa siku;
- Hifadhi nakala kwa siku 90 zilizopita;
- Uwezo wa kupata faili za kibinafsi kwa tarehe maalum, ikiwa ni lazima;
- Nakala lazima ihifadhiwe katika kituo cha data isipokuwa VDS;
- Uwezo wa kupata chelezo kutoka mahali popote (seva nyingine, kompyuta ya ndani, nk).
Jambo muhimu lilikuwa uwezo wa kuunda haraka nakala rudufu na utumiaji mdogo wa nafasi ya ziada na rasilimali za mfumo.
Hii sio kuhusu snapshot ya kurejesha mfumo mzima kwa haraka, lakini kuhusu faili na hifadhidata na historia ya mabadiliko.
Data ya awali:
- VDS kwenye uboreshaji wa XEN;
- OS CentOS 7;
- 1C-Bitrix: Mazingira ya wavuti;
- Tovuti kulingana na "1C-Bitrix: Usimamizi wa Tovuti", Toleo la kawaida;
- Ukubwa wa faili ni GB 50 na itakua;
- Saizi ya hifadhidata ni GB 3 na itakua.
Mara moja nilitenga nakala rudufu ya kawaida iliyojengwa ndani ya 1C-Bitrix. Inafaa tu kwa tovuti ndogo, kwa sababu:
- Inafanya nakala kamili ya tovuti kila wakati, kwa hivyo kila nakala itachukua kiasi sawa cha nafasi kama faili zinachukua, kwa upande wangu ni GB 50.
- Hifadhi rudufu inafanywa kwa kutumia PHP, ambayo haiwezekani kwa idadi kama hiyo ya faili, itapakia seva na haitamaliza kamwe.
- Na kwa kweli, hakuwezi kuwa na mazungumzo ya siku 90 wakati wa kuhifadhi nakala kamili.
Suluhisho ambalo mhudumu hutoa ni diski ya chelezo iliyoko kwenye kituo cha data sawa na VDS, lakini kwenye seva tofauti. Unaweza kufanya kazi na diski kupitia FTP na kutumia maandishi yako mwenyewe, au ikiwa ISPManager imewekwa kwenye VDS, basi kupitia moduli yake ya chelezo. Chaguo hili halifai kutokana na matumizi ya kituo kimoja cha data.
Kutoka kwa yote yaliyo hapo juu, chaguo bora kwangu ni hifadhi ya ziada kwa kutumia hati yangu mwenyewe katika Yandex.Cloud (Hifadhi ya Kitu) au Amazon S3 (Huduma ya Uhifadhi Rahisi ya Amazon).
Hii inahitaji:
- upatikanaji wa mizizi kwa VDS;
- utumiaji wa duplicity uliowekwa;
- akaunti katika Yandex.Cloud.
Hifadhi rudufu inayoongezeka - njia ambayo data pekee ambayo imebadilika tangu hifadhi ya mwisho imewekwa kwenye kumbukumbu.
nakala mbili - matumizi ya chelezo ambayo hutumia algorithms ya rsync na inaweza kufanya kazi na Amazon S3.
Yandex.Cloud dhidi ya Amazon S3
Katika kesi hii, hakuna tofauti kati ya Yandex.Cloud na Amazon S3 kwangu. Yandex inasaidia wingi wa Amazon S3 API, hivyo unaweza kufanya kazi nayo kwa kutumia ufumbuzi uliopo kwa kufanya kazi na S3. Kwa upande wangu, hii ni matumizi ya duplicity.
Faida kuu ya Yandex inaweza kuwa malipo kwa rubles; ikiwa kuna data nyingi, hakutakuwa na uhusiano na kiwango cha ubadilishaji. Kwa upande wa kasi, vituo vya data vya Ulaya vya Amazon hufanya kazi kwa kulinganishwa na vituo vya data vya Kirusi huko Yandex; kwa mfano, unaweza kutumia Frankfurt. Hapo awali nilitumia Amazon S3 kwa kazi sawa, sasa niliamua kujaribu Yandex.
Inaweka Yandex.Cloud
1. Unahitaji kuunda akaunti ya malipo katika Yandex.Cloud. Ili kufanya hivyo, unahitaji kuingia kwenye Yandex.Cloud kupitia akaunti yako ya Yandex au uunda mpya.
2. Unda "Wingu".
3. Katika "Wingu" unda "Orodha".
4. Kwa "Catalogue" fungua "Akaunti ya Huduma".
5. Unda funguo za "Akaunti ya Huduma".
6. Hifadhi funguo, zitahitajika katika siku zijazo.
7. Kwa "Directory" unda "Bucket", faili zitaingia ndani yake.
8. Ninapendekeza kuweka kikomo na kuchagua "Hifadhi ya Baridi".
Kuweka chelezo zilizopangwa kwenye seva
Mwongozo huu unachukua ujuzi wa msingi wa utawala.
1. Sakinisha matumizi ya duplicity kwenye VDS
yum install duplicity
2. Unda folda ya utupaji wa mysql, kwa upande wangu ni /backup_db kwenye mzizi wa VDS
3. Unda folda ya hati za bash /backup_scripts na ufanye hati ya kwanza ambayo itafanya chelezo /backup_scripts/backup.sh
Yaliyomo kwenye hati:
#!`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. Endesha hati kwa mara ya kwanza na uangalie matokeo; faili zinapaswa kuonekana kwenye "Ndoo".
`which bash` /backup_scripts/backup.sh
5. Ongeza hati kwenye cron ili mtumiaji wa mizizi afanye kazi mara 2 kwa siku, au kwa marudio unayohitaji.
10 4,16 * * * `which bash` /backup_scripts/backup.sh
Inarejesha data kutoka kwa Yandex.Cloud
1. Tengeneza folda ya kurejesha /backup_restore
2. Tengeneza hati ya bash ya kufufua /backup_scripts/restore.sh
Ninatoa mfano maarufu zaidi wa kurejesha faili maalum:
#!`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. Endesha hati na usubiri matokeo.
`which bash` /backup_scripts/backup.sh
Katika /backup_restore/ folda utapata faili index.php ambayo hapo awali ilichelezwa.
Unaweza kufanya marekebisho bora zaidi ili kukidhi mahitaji yako.
Ondoa kurudia
duplicity ina drawback moja - haiwezekani kuweka kikomo cha matumizi ya kituo. Kwa kituo cha kawaida hii haileti tatizo, lakini wakati wa kutumia chaneli iliyolindwa na DDoS na malipo ya kasi kwa siku, ningependa kuwa na uwezo wa kuweka kikomo cha megabits 1-2.
Kama hitimisho
Hifadhi nakala katika Yandex.Cloud au Amazon S3 hutoa nakala ya kujitegemea ya tovuti na mipangilio ya OS ambayo inaweza kupatikana kutoka kwa seva nyingine yoyote au kompyuta ya ndani. Zaidi ya hayo, nakala hii haionekani ama kwenye paneli dhibiti ya upangishaji au kwenye paneli ya msimamizi wa Bitrix, ambayo hutoa usalama wa ziada.
Katika hali mbaya zaidi, unaweza kukusanya seva mpya na kupeleka tovuti wakati wowote. Ingawa utendaji maarufu zaidi utakuwa na uwezo wa kufikia faili kwa tarehe maalum.
Unaweza kutumia mbinu hii na VDS yoyote au seva na tovuti zilizojitolea kwenye injini zozote, si 1C-Bitrix pekee. OS inaweza pia kuwa nyingine isipokuwa CentOS, kama vile Ubuntu au Debian.
Chanzo: mapenzi.com