GNU/Linux >> Znalost Linux >  >> Linux

Zrcadlete svůj web pomocí rsync

Tento tutoriál ukazuje, jak můžete zrcadlit svůj web z hlavního webového serveru na záložní server, který může převzít kontrolu, pokud hlavní server selže. Používáme k tomu nástroj rsync a necháváme jej spouštět cronovou úlohou, která každých x minut kontroluje, zda je na zrcadle něco k aktualizaci. Váš záložní server by tedy měl být obvykle aktuální, pokud má převzít kontrolu.

rsync aktualizuje pouze soubory, které se změnily, takže při každém spuštění rsync nemusíte přenášet 5 GB dat. Zrcadlí pouze nové/změněné soubory a může také odstranit soubory ze zrcadla, které byly smazány na hlavním serveru. Kromě toho může zachovat oprávnění a vlastnictví zrcadlených souborů a adresářů; abychom zachovali vlastnictví, musíme spustit rsync jako root, což je to, co zde děláme. Pokud se změní oprávnění a/nebo vlastnictví na hlavním serveru, rsync je změní také na záložním serveru.

V tomto tutoriálu budeme tunelovat rsync přes SSH, které je bezpečnější; to také znamená, že pro rsync nemusíte otevírat další port ve vašem firewallu - stačí, když je otevřený port 22 (SSH). Problém je v tom, že SSH vyžaduje heslo pro přihlášení, což není dobré, pokud chcete spouštět rsync jako úlohu cron. Potřeba hesla vyžaduje lidskou interakci, což není to, co chceme.

Ale naštěstí existuje řešení:použití veřejných klíčů . Vytvoříme pár klíčů (na našem záložním serveru mirror.example.com ), z nichž jeden je uložen v souboru na vzdáleném systému (server1.example.com ). Poté již nebudeme při spuštění rsync vyzváni k zadání hesla. To také zahrnuje úlohy cron, což je přesně to, co chceme.

Jak jste již možná uhodli z toho, co jsem dosud napsal, koncept je takový, že iniciujeme zrcadlení server1.example.com přímo z mirror.example.com; server1.example.com pro zrcadlení nemusí nic dělat.

Zde použiji následující nastavení:

  • Hlavní server:server1.example.com (server1) – IP adresa:192.168.0.100
  • Zrcadlový/záložní server:mirror.example.com (mirror) – IP adresa:192.168.0.175
  • Webová stránka, která má být zrcadlena, je v /var/www na server1.example.com.

rsync je pouze pro zrcadlení souborů a adresářů; pokud chcete zrcadlit svou databázi MySQL, použijte místo toho zrcadlení/replikaci MySQL.

Nejprve chci říci, že to není jediný způsob, jak nastavit takový systém. Existuje mnoho způsobů, jak tohoto cíle dosáhnout, ale já volím tento způsob.

1 Nainstalovat rsync

Nejprve musíme nainstalovat rsync na server1.example.com i mirror.example.com. Pro systémy Debian a Ubuntu to vypadá takto:

server1/mirror:

(To děláme jako root!)

apt-get install rsync

Na jiných distribucích Linuxu byste k instalaci rsync použili yum (Fedora/CentOS) nebo yast (SuSE).

2 Vytvoření neprivilegovaného uživatele na server1.example.com

Nyní vytvoříme neprivilegovaného uživatele s názvem someuser na server1.example.com, kterého použije rsync na mirror.example.com k zrcadlení adresáře /var/www (některý uživatel musí mít samozřejmě oprávnění ke čtení na /var/www na serveru1 .example.com).

server1:

(To děláme jako root!)

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

Tím se vytvoří uživatel someuser s domovským adresářem /home/someuser a přihlašovacím shellem /bin/bash (je důležité, aby měl someuser platný přihlašovací shell - něco jako /bin/false nefunguje!). Nyní dejte některému uživateli heslo:

passwd someuser

3 Test rsync

Dále otestujeme rsync na mirror.example.com. Jako root uděláme toto:

zrcadlo:

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

Měli byste vidět něco takového. Odpovězte ano:

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

Poté zadejte heslo některého uživatele a měli byste vidět, že adresář /var/www serveru1.example.com je zrcadlen do /var/www na mirror.example.com.

Můžete to zkontrolovat takto na obou serverech:

server1/mirror:

ls -la /var/www

Měli byste vidět, že všechny soubory a adresáře byly zrcadleny na mirror.example.com a soubory a adresáře by měly mít stejná oprávnění/vlastnictví jako na server1.example.com.

4 Vytvořte klíče na mirror.example.com

Nyní vytvoříme pár soukromý/veřejný klíč na mirror.example.com:

zrcadlo:

(To děláme jako root!)

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

Uvidíte něco takového:

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]

Je důležité, abyste nezadávali přístupovou frázi, jinak nebude zrcadlení fungovat bez lidské interakce, takže jednoduše stiskněte enter !

Dále zkopírujeme náš veřejný klíč na server1.example.com:

zrcadlo:

(Přesto to děláme jako root.)

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

Veřejný klíč mirror-rsync-key.pub by nyní měl být dostupný v /home/someuser na server1.example.com.

5 Konfigurace server1.example.com

Nyní se přihlaste přes SSH na server1.example.com jako uživatel (nikoli root!) a proveďte toto:

server1:

(Udělejte to prosím jako uživatel!)

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

Tímto jsme přidali obsah mirror-rsync-key.pub do souboru /home/someuser/.ssh/authorized_keys. /home/someuser/.ssh/authorized_keys by měl vypadat podobně jako toto:

server1:

(Stále jako nějaký uživatel!)

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

Nyní chceme povolit připojení pouze z mirror.example.com a připojující se uživatel by měl mít povoleno používat pouze rsync, takže přidáváme

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

hned na začátku /home/someuser/.ssh/authorized_keys:

server1:

(Stále jako nějaký uživatel!)

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

Je důležité, abyste místo IP adresy za from=použili FQDN jako mirror.example.com, jinak automatické zrcadlení nebude fungovat!

Nyní vytvoříme skript /home/someuser/rsync/checkrsync, který odmítá všechny příkazy kromě rsync.

server1:

(Stále to děláme jako někteří uživatelé!)

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 Test rsync na mirror.example.com

Nyní musíme otestovat na mirror.example.com, zda můžeme zrcadlit server1.example.com, aniž bychom byli vyzváni k zadání hesla některého uživatele. Děláme toto:

zrcadlo:

(To děláme jako 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/

(Volba --delete znamená, že soubory, které byly smazány na server1.example.com, by měly být smazány také na mirror.example.com. Volba --exclude znamená, že tyto soubory/adresáře nemají být zrcadleny; např. --exclude =**/error znamená „nezrcadlit /var/www/error". Můžete použít více možností --exclude. Tyto možnosti jsem uvedl jako příklady; příkaz si můžete upravit podle svých potřeb. Podívejte se na

man rsync

pro více informací.)

Nyní byste měli vidět, že zrcadlení probíhá:

receiving file list ... done

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

bez výzvy k zadání hesla! Tohle jsme chtěli.

7 Vytvoření úlohy Cron

Chceme zrcadlení automatizovat, proto pro něj vytváříme cron job na mirror.example.com. Spusťte crontab -e jako root:

zrcadlo:

(To děláme jako root!)

crontab -e

a vytvořte úlohu cronu takto:

*/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/ 

Toto by spouštělo rsync každých 5 minut; upravte jej podle svých potřeb (viz

man 5 crontab

). Zde používám úplnou cestu k rsync (/usr/bin/rsync), abych se ujistil, že cron ví, kde najít rsync. Vaše umístění rsync se může lišit. Spustit

zrcadlo:

(To děláme jako root!)

which rsync

abyste zjistili, kde je ten váš.

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

Linux
  1. Zabezpečte své kontejnery pomocí SELinux

  2. Úložiště s vysokou dostupností s GlusterFS na Debianu 8 – zrcadlení mezi dvěma úložnými servery

  3. Údržba vzdálených webových stránek pomocí sitecopy na Ubuntu 16.04

  1. Automatická replikace souborů (zrcadlení) přes dva úložné servery s GlusterFS 3.2.x na Ubuntu 12.10

  2. Úložiště s vysokou dostupností s GlusterFS 3.2.x na CentOS 6.3 – Automatická replikace souborů (zrcadlení) přes dva úložné servery

  3. Začínáme s regulárními výrazy:Příklad

  1. Použití Ansible k interakci s webovými koncovými body

  2. Jak uvést své stránky do provozu pomocí Managed.com

  3. Oprávnění souborů v Linuxu s příkladem