GNU/Linux >> Belajar Linux >  >> Linux

Cerminkan Situs Web Anda Dengan rsync

Tutorial ini menunjukkan bagaimana Anda dapat mencerminkan situs web Anda dari server web utama Anda ke server cadangan yang dapat mengambil alih jika server utama gagal. Kami menggunakan alat rsync untuk ini, dan kami membuatnya berjalan melalui tugas cron yang memeriksa setiap x menit jika ada sesuatu untuk diperbarui di cermin. Jadi server cadangan Anda biasanya harus diperbarui jika harus diambil alih.

rsync hanya memperbarui file yang telah diubah, jadi Anda tidak perlu mentransfer data sebesar 5 GB setiap kali menjalankan rsync. Itu hanya mencerminkan file baru/yang diubah, dan juga dapat menghapus file dari cermin yang telah dihapus di server utama. Selain itu dapat mempertahankan izin dan kepemilikan file dan direktori yang dicerminkan; untuk mempertahankan kepemilikan, kita perlu menjalankan rsync sebagai root yang kita lakukan di sini. Jika izin dan/atau kepemilikan berubah di server utama, rsync juga akan mengubahnya di server cadangan.

Dalam tutorial ini kita akan melakukan tunnel rsync melalui SSH yang lebih aman; itu juga berarti Anda tidak perlu membuka port lain di firewall Anda untuk rsync - cukup jika port 22 (SSH) terbuka. Masalahnya adalah SSH memerlukan kata sandi untuk masuk yang tidak baik jika Anda ingin menjalankan rsync sebagai pekerjaan cron. Kebutuhan akan kata sandi membutuhkan interaksi manusia yang tidak kita inginkan.

Tapi untungnya ada solusinya:gunakan kunci publik . Kami membuat sepasang kunci (di server cadangan kami mirror.example.com ), salah satunya disimpan dalam file di sistem jarak jauh (server1.example.com ). Setelah itu kita tidak akan dimintai kata sandi lagi saat kita menjalankan rsync. Ini juga termasuk tugas cron yang persis seperti yang kita inginkan.

Seperti yang mungkin sudah Anda duga dari apa yang telah saya tulis sejauh ini, konsepnya adalah kita memulai mirroring server1.example.com langsung dari mirror.example.com; server1.example.com tidak perlu melakukan apa pun untuk dicerminkan.

Saya akan menggunakan pengaturan berikut di sini:

  • Server utama:server1.example.com (server1) - alamat IP:192.168.0.100
  • Mirror/server cadangan:mirror.example.com (mirror) - alamat IP:192.168.0.175
  • Situs web yang akan dicerminkan ada di /var/www pada server1.example.com.

rsync hanya untuk mirroring file dan direktori; jika Anda ingin mencerminkan database MySQL Anda, gunakan mirroring/replikasi MySQL sebagai gantinya.

Saya ingin mengatakan terlebih dahulu bahwa ini bukan satu-satunya cara untuk mengatur sistem seperti itu. Ada banyak cara untuk mencapai tujuan ini tetapi ini adalah cara yang saya ambil.

1 Instal rsync

Pertama, kita harus menginstal rsync di server1.example.com dan mirror.example.com. Untuk sistem Debian dan Ubuntu, ini terlihat seperti ini:

server1/mirror:

(Kami melakukan ini sebagai root!)

apt-get install rsync

Pada distribusi Linux lainnya, Anda akan menggunakan yum (Fedora/CentOS) atau yast (SuSE) untuk menginstal rsync.

2 Buat Pengguna Tanpa Hak Di server1.example.com

Sekarang kita membuat pengguna yang tidak memiliki hak istimewa bernama someuser di server1.example.com yang akan digunakan oleh rsync di mirror.example.com untuk mencerminkan direktori /var/www (tentu saja, beberapa pengguna harus memiliki izin baca di /var/www di server1 .example.com).

server1:

(Kami melakukan ini sebagai root!)

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

Ini akan membuat pengguna someuser dengan direktori home /home/someuser dan shell login /bin/bash (penting bahwa someuser memiliki shell login yang valid - sesuatu seperti /bin/false tidak berfungsi!). Sekarang berikan kata sandi kepada beberapa pengguna:

passwd someuser

3 Uji rsync

Selanjutnya, kami menguji rsync di mirror.example.com. Sebagai root, kami melakukan ini:

cermin:

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

Anda harus melihat sesuatu seperti ini. Jawab dengan ya:

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

Kemudian masukkan kata sandi beberapa pengguna, dan Anda akan melihat bahwa direktori /var/www server1.example.com dicerminkan ke /var/www di mirror.example.com.

Anda dapat memeriksanya seperti ini di kedua server:

server1/mirror:

ls -la /var/www

Anda akan melihat bahwa semua file dan direktori telah dicerminkan ke mirror.example.com, dan file dan direktori harus memiliki izin/kepemilikan yang sama seperti di server1.example.com.

4 Buat Kunci Di mirror.example.com

Sekarang kita membuat pasangan kunci privat/publik di mirror.example.com:

cermin:

(Kami melakukan ini sebagai root!)

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

Anda akan melihat sesuatu seperti ini:

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 [email protected]

Penting agar Anda tidak memasukkan frasa sandi jika tidak, mirroring tidak akan berfungsi tanpa interaksi manusia, jadi cukup tekan enter !

Selanjutnya, kita salin kunci publik kita ke server1.example.com:

cermin:

(Tetap saja, kami melakukan ini sebagai root.)

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

Kunci publik mirror-rsync-key.pub sekarang harus tersedia di /home/someuser di server1.example.com.

5 Konfigurasi server1.example.com

Sekarang masuk melalui SSH di server1.example.com sebagai pengguna tertentu (bukan root!) dan lakukan ini:

server1:

(Silakan lakukan ini sebagai beberapa pengguna!)

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

Dengan melakukan ini, kami telah menambahkan konten mirror-rsync-key.pub ke file /home/someuser/.ssh/authorized_keys. /home/someuser/.ssh/authorized_keys akan terlihat seperti ini:

server1:

(Masih sebagai beberapa pengguna!)

vi /home/someuser/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom [email protected]
mirror

Sekarang kami ingin mengizinkan koneksi hanya dari mirror.example.com, dan pengguna yang terhubung harus diizinkan untuk hanya menggunakan rsync, jadi kami menambahkan

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

tepat di awal /home/someuser/.ssh/authorized_keys:

server1:

(Masih sebagai beberapa pengguna!)

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 [email protected]
mirror

Penting bahwa Anda menggunakan FQDN seperti mirror.example.com alih-alih alamat IP setelah from=, jika tidak, mirroring otomatis tidak akan berfungsi!

Sekarang kita buat skrip /home/someuser/rsync/checkrsync yang menolak semua perintah kecuali rsync.

server1:

(Kami masih melakukan ini sebagai beberapa pengguna!)

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 Uji rsync Di mirror.example.com

Sekarang kita harus menguji di mirror.example.com jika kita bisa mirror server1.example.com tanpa diminta kata sandi beberapa pengguna. Kami melakukan ini:

cermin:

(Kami melakukan ini sebagai root!)

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

(Opsi --delete berarti bahwa file yang telah dihapus di server1.example.com juga harus dihapus di mirror.example.com. Opsi --exclude berarti bahwa file/direktori ini tidak boleh dicerminkan; misalnya --exclude =**/error berarti "jangan mirror /var/www/error". Anda dapat menggunakan beberapa opsi --exclude. Saya telah mencantumkan opsi ini sebagai contoh; Anda dapat menyesuaikan perintah dengan kebutuhan Anda. Lihat di

man rsync

untuk informasi lebih lanjut.)

Anda sekarang akan melihat bahwa mirroring terjadi:

receiving file list ... done

sent 71 bytes received 643 bytes 476.00 bytes/sec
total size is 64657 speedup is 90.56

tanpa diminta kata sandi! Inilah yang kami inginkan.

7 Buat Pekerjaan Cron

Kami ingin mengotomatiskan pencerminan, itulah sebabnya kami membuat tugas cron untuknya di mirror.example.com. Jalankan crontab -e sebagai root:

cermin:

(Kami melakukan ini sebagai root!)

crontab -e

dan buat tugas cron seperti ini:

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

Ini akan menjalankan rsync setiap 5 menit; sesuaikan dengan kebutuhan Anda (lihat

man 5 crontab

). Saya menggunakan path lengkap ke rsync di sini (/ usr/bin/rsync) hanya untuk memastikan bahwa cron tahu di mana menemukan rsync. Lokasi rsync Anda mungkin berbeda. Jalankan

cermin:

(Kami melakukan ini sebagai root!)

which rsync

untuk mencari tahu di mana milik Anda.

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

Linux
  1. Penyimpanan Ketersediaan Tinggi dengan GlusterFS di Debian 8 - Mencerminkan di dua server penyimpanan

  2. Izin File di Linux dengan Contoh

  3. Lokasi DocumentRoot di CentOS

  1. Memelihara situs web jarak jauh dengan sitecopy di Ubuntu 16.04

  2. Memulai dengan ekspresi reguler:Sebuah contoh

  3. Memecahkan masalah jaringan Anda dengan tcpdump

  1. Amankan wadah Anda dengan SELinux

  2. Menggunakan Ansible untuk berinteraksi dengan titik akhir web

  3. Cara Menghidupkan Situs Anda dengan Managed.com