Հայելի ձեր վեբ կայքը rsync-ով


Այս էջում

  1. 1 Տեղադրեք rsync
  2. 2 Ստեղծեք ոչ արտոնյալ օգտվող server1.example.com-ում
  3. 3 Փորձարկել rsync
  4. 4 Ստեղծեք բանալիները mirror.example.com-ում
  5. 5 Կազմաձևեք server1.example.com-ը
  6. 6 Փորձարկել rsync-ը mirror.example.com-ում
  7. 7 Ստեղծեք Cron Job
  8. 8 Հղումներ

Այս ձեռնարկը ցույց է տալիս, թե ինչպես կարող եք արտացոլել ձեր վեբ կայքը ձեր հիմնական վեբ սերվերից մինչև պահեստային սերվեր, որը կարող է կառավարել, եթե հիմնական սերվերը ձախողվի: Մենք դրա համար օգտագործում ենք rsync գործիքը և այն կատարում ենք cron աշխատանքով, որը յուրաքանչյուր x րոպեն մեկ ստուգում է, թե արդյոք հայելու վրա թարմացնելու բան կա: Այսպիսով, ձեր պահուստային սերվերը սովորաբար պետք է արդիական լինի, եթե այն պետք է ստանձնի:

rsync-ը թարմացնում է միայն փոխված ֆայլերը, այնպես որ դուք կարիք չունեք 5 ԳԲ տվյալների փոխանցման, երբ գործարկում եք rsync-ը: Այն արտացոլում է միայն նոր/փոփոխված ֆայլերը, ինչպես նաև կարող է ջնջել հիմնական սերվերում ջնջված ֆայլերը հայելից: Բացի դրանից, այն կարող է պահպանել հայելային ֆայլերի և գրացուցակների թույլտվությունները և սեփականության իրավունքը. սեփականության իրավունքը պահպանելու համար մենք պետք է գործարկենք rsync-ը որպես արմատ, ինչը մենք անում ենք այստեղ: Եթե թույլտվությունները և/կամ սեփականության իրավունքները փոխվեն հիմնական սերվերում, rsync-ը կփոխի դրանք նաև պահուստային սերվերում:

Այս ձեռնարկում մենք կթունելիացնենք rsync-ը SSH-ի միջոցով, որն ավելի ապահով է. դա նաև նշանակում է, որ դուք ստիպված չեք լինի բացել այլ պորտ ձեր firewall-ում rsync-ի համար. բավական է, եթե 22-րդ պորտը (SSH) բաց է: Խնդիրն այն է, որ SSH-ը մուտք գործելու համար պահանջում է գաղտնաբառ, որը լավ չէ, եթե ցանկանում եք գործարկել rsync-ը որպես cron աշխատանք: Գաղտնաբառի անհրաժեշտությունը պահանջում է մարդկային փոխազդեցություն, որն այն չէ, ինչ մենք ուզում ենք:

Բայց բարեբախտաբար կա լուծում՝ հանրային բանալիների օգտագործումը: Մենք ստեղծում ենք զույգ բանալիներ (մեր պահուստային սերվերում mirror.example.com), որոնցից մեկը պահվում է հեռավոր համակարգի ֆայլում (server1.example.com): Այնուհետև մեզ այլևս գաղտնաբառ չի պահանջվի, երբ գործարկենք rsync-ը: Սա նաև ներառում է cron-ի աշխատատեղեր, որոնք հենց այն են, ինչ մենք ցանկանում ենք:

Ինչպես արդեն կռահեցիք մինչ այժմ իմ գրածից, գաղափարն այն է, որ մենք նախաձեռնում ենք server1.example.com-ի արտացոլումը անմիջապես -ից: mirror.example.com; server1.example.com պարտավոր չէ որևէ բան անել, որպեսզի արտացոլվի:

Այստեղ ես կօգտագործեմ հետևյալ կարգավորումը.

  • Հիմնական սերվեր՝ server1.example.com (server1) - IP հասցե՝ 192.168.0.100
  • Հայելի/պահուստային սերվեր՝ mirror.example.com (mirror) - IP հասցե՝ 192.168.0.175
  • Կայքը, որը պետք է արտացոլվի, գտնվում է /var/www-ում server1.example.com-ում:

rsync-ը նախատեսված է միայն ֆայլերի և գրացուցակների արտացոլման համար; եթե ցանկանում եք արտացոլել ձեր MySQL տվյալների բազան, փոխարենը օգտագործեք MySQL mirroring/replication:

Նախ ուզում եմ ասել, որ սա նման համակարգ ստեղծելու միակ տարբերակը չէ։ Կան բազմաթիվ ուղիներ այս նպատակին հասնելու համար, բայց սա այն ճանապարհն է, որը ես կբռնեմ։

Առաջին քայլը մուտք գործելն է կամ դառնալ ձեր համակարգի հիմնական օգտվող: Debian-ում և centOS-ում օգտագործեք՝

su -

Եթե դուք մուտք եք գործել որպես այլ օգտվող, քան root-ը: Ubuntu-ում օգտագործեք՝

sudo -s

փոխարենը.

1 Տեղադրեք rsync

Նախ, մենք պետք է տեղադրենք rsync-ը և server1.example.com-ում և mirror.example.com-ում: Debian և Ubuntu համակարգերի համար սա հետևյալն է.

սերվեր 1/հայելին.

(Մենք դա անում ենք որպես արմատ):

apt install rsync

Linux-ի այլ բաշխումների դեպքում դուք կօգտագործեիք yum/dnf (Fedora/CentOS) կամ yast (SuSE) rsync-ը տեղադրելու համար:

CentOS/Rocky Linux-ում կամ AlmaLinux-ում օգտագործեք՝

dnf install rsync

2 Ստեղծեք ոչ արտոնյալ օգտվող server1.example.com-ում

Այժմ մենք server1.example.com-ում ստեղծում ենք someuser անունով ոչ արտոնյալ օգտատեր, որը կօգտագործվի rsync-ի կողմից mirror.example.com-ում՝ գրացուցակը արտացոլելու համար /var/www (իհարկե, ինչ-որ օգտվող պետք է ունենա կարդալու թույլտվությունները /var/www-ում server1-ում: .example.com):

սերվեր 1:

(Մենք դա անում ենք որպես արմատ):

sudo useradd -d /home/someuser -m -s /bin/bash someuser

Սա կստեղծի օգտվողի someuser-ը տնային գրացուցակով /home/someuser և մուտքի կեղևով /bin/bash (կարևոր է, որ ինչ-որ օգտվող ունենա վավեր մուտքի պատյան. /bin/false-ի նման մի բան չի աշխատում): Այժմ ինչ-որ մեկին գաղտնաբառ տվեք.

passwd someuser

3 Փորձարկել rsync

Հաջորդը, մենք փորձարկում ենք rsync-ը mirror.example.com կայքում: Որպես root մենք անում ենք սա.

հայելի:

rsync -avz -e ssh [email :/var/www/ /var/www/

Դուք պետք է տեսնեք նման բան. Պատասխանեք այո.

The authenticity of host 'server1.example.com (192.168.0.100)' can't be established.
RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Are you sure you want to continue connecting (yes/no)?
<-- yes

Այնուհետև մուտքագրեք օգտվողի գաղտնաբառը և կտեսնեք, որ server1.example.com-ի /var/www գրացուցակը արտացոլված է /var/www-ին mirror.example.com-ում:

Դուք կարող եք ստուգել դա այսպես երկու սերվերների վրա.

սերվեր 1/հայելին.

ls -la /var/www

Դուք պետք է տեսնեք, որ բոլոր ֆայլերը և գրացուցակները արտացոլված են mirror.example.com-ում, և ֆայլերը և գրացուցակները պետք է ունենան նույն թույլտվությունները/սեփականատիրությունները, ինչ server1.example.com-ում:

4 Ստեղծեք բանալիները mirror.example.com-ում

Այժմ մենք ստեղծում ենք մասնավոր/հանրային բանալիների զույգը mirror.example.com կայքում:

հայելի:

(Մենք դա անում ենք որպես արմատ):

mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key

Դուք կտեսնեք նման բան.

Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in /root/cron/mirror-rsync-key.
Your public key has been saved in /root/cron/mirror-rsync-key.pub.
The key fingerprint is:
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirror

Կարևոր է, որ այլ կերպ մուտքագրեք անցաբառ, հայելային արտացոլումը չի աշխատի առանց մարդկային փոխազդեցության, ուստի պարզապես սեղմեք մուտքագրեք:

Հաջորդը, մենք պատճենում ենք մեր հանրային բանալին server1.example.com-ում.

հայելի:

(Դեռևս մենք դա անում ենք որպես արմատ):

scp /root/rsync/mirror-rsync-key.pub [email :/home/someuser/

Հանրային բանալին mirror-rsync-key.pub այժմ պետք է հասանելի լինի /home/someuser-ում server1.example.com-ում:

5 Կազմաձևեք server1.example.com-ը

Այժմ մուտք գործեք SSH-ի միջոցով server1.example.com-ում որպես ինչ-որ օգտվող (ոչ root!) և արեք սա.

սերվեր 1:

(Խնդրում եմ դա արեք որպես օգտվող:)

mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keys

Դրանով մենք ավելացրել ենք mirror-rsync-key.pub-ի բովանդակությունը /home/someuser/.ssh/authorized_keys ֆայլին: /home/someuser/.ssh/authorized_keys-ը պետք է նման լինի.

սերվեր 1:

(Դեռևս որպես ինչ-որ օգտվող!)

vi /home/someuser/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirror

Այժմ մենք ցանկանում ենք թույլատրել կապերը միայն mirror.example.com-ից, և միացող օգտվողին պետք է թույլատրվի օգտագործել միայն rsync, ուստի ավելացնում ենք

command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty

հենց սկզբում /home/someuser/.ssh/authorized_keys:

սերվեր 1:

(Դեռևս որպես օգտվող!)

vi /home/someuser/.ssh/authorized_keys
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirror

Դուք պետք է օգտագործեք FQDN-ը, ինչպիսին mirror.example.com-ն է, IP հասցեի փոխարեն from=-ից հետո, հակառակ դեպքում ավտոմատացված հայելավորումը չի աշխատի:

Այժմ մենք ստեղծում ենք սկրիպտը /home/someuser/rsync/checkrsync, որը մերժում է բոլոր հրամանները, բացի rsync-ից:

սերվեր 1:

(Մենք դեռ դա անում ենք որպես օգտվող:)

mkdir ~/rsync
vi ~/rsync/checkrsync
#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
        *\&*)
                echo "Rejected"
                ;;
        *\(*)
                echo "Rejected"
                ;;
        *\{*)
                echo "Rejected"
                ;;
        *\;*)
                echo "Rejected"
                ;;
        *\<*)
                echo "Rejected"
                ;;
        *\`*)
                echo "Rejected"
                ;;
        rsync\ --server*)
                $SSH_ORIGINAL_COMMAND
                ;;
        *)
                echo "Rejected"
                ;;
esac
chmod 700 ~/rsync/checkrsync

6 Փորձարկել rsync-ը mirror.example.com-ում

Այժմ մենք պետք է փորձարկենք mirror.example.com-ում, եթե կարողանանք արտացոլել server1.example.com-ը՝ առանց որևէ օգտվողի գաղտնաբառ պահանջելու: Մենք անում ենք սա.

հայելի:

(Մենք դա անում ենք որպես արմատ):

rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email :/var/www/ /var/www/

(--delete տարբերակը նշանակում է, որ ֆայլերը, որոնք ջնջվել են server1.example.com-ում, նույնպես պետք է ջնջվեն mirror.example.com-ում: --exclude տարբերակը նշանակում է, որ այս ֆայլերը/տեղեկատուները չպետք է արտացոլվեն, օրինակ. =**/error նշանակում է «մի հայելային /var/www/error»:

man rsync

լրացուցիչ տեղեկությունների համար։)

Այժմ դուք պետք է տեսնեք, որ հայելապատումը տեղի է ունենում.

receiving file list ... done
sent 71 bytes  received 643 bytes  476.00 bytes/sec
total size is 64657  speedup is 90.56

առանց գաղտնաբառ պահանջելու: Սա այն է, ինչ մենք ուզում էինք:

7 Ստեղծեք Cron Job

Մենք ցանկանում ենք ավտոմատացնել mirroring-ը, այդ իսկ պատճառով դրա համար ստեղծում ենք cron աշխատանք mirror.example.com կայքում։ Գործարկել crontab -e որպես արմատ:

հայելի:

(Մենք դա անում ենք որպես արմատ):

crontab -e

և ստեղծեք cron աշխատանք այսպիսին.

*/5 * * * * /usr/bin/rsync -azq --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email :/var/www/ /var/www/ 

Սա կգործարկի rsync ամեն 5 րոպեն մեկ; հարմարեցրեք այն ձեր կարիքներին (տես

man 5 crontab

) Ես օգտագործում եմ rsync-ի ամբողջական ուղին այստեղ (/usr/bin/rsync) պարզապես համոզվելու համար, որ cron-ը գիտի, թե որտեղ գտնել rsync: Ձեր rsync տեղադրությունը կարող է տարբերվել: Վազիր

հայելի:

(Մենք դա անում ենք որպես արմատ):

which rsync

պարզելու, թե որտեղ է քոնը:

8 Հղումներ

  • rsync՝ https://rsync.samba.org/