Hulpartikel overzicht

Hulpartikel

Linux redundantie tutorial 2: websites synchroniseren

Dit is het tweede deel van onze Tutorial Series 'Een redundante VPS-omgeving inrichten'. Ben je een nieuwe redundante VPS-omgeving aan het inrichten, dan raden wij aan om bij deel 1 te beginnen en geen delen over te slaan.

Dankzij HA-IP Pro is de failover en loadbalancing van je webservers automatisch verzorgt. In dit deel behandelen wij de synchronisatie van de bestanden op je websites tussen de webservers.

Er zijn twee verschillende situaties waarop de synchronisatie die in dit artikel besproken wordt van toepassing is:

  • Updaten van je websites: Bijvoorbeeld als je een pagina op je website aanpast en de wijziging op je webservers wil doorvoeren.
     
  • Synchroniseren van bestanden op je websites: Stel dat je een WordPress-website hebt waar mensen foto's naar kunnen uploaden, of bijvoorbeeld een forum waar mensen bestanden kunnen uploaden. Het is in dat geval belangrijk dat de bestanden tussen beide gesynchroniseerd blijven en bezoekers altijd dezelfde website zien.

Rsync

Voor de synchronisatie van bestanden op je website, maken wij gebruik van het Rsync-commando. Rsync is een commando waarmee je bestanden en mappen kunt kopieëren van de ene server naar de andere server. Met behulp van een cronjob maak je een taak om doorlopend bestanden tussen de webservers met behulp van Rsync te synchroniseren.

Voor het updaten van je websites upload je middels FTPS of SFTP je updated website naar één van je VPS'en. Rsync zorgt er daarna automatisch voor dat de update naar je andere webserver(s) wordt gesynchronizeerd. Uiterlijk binnen een paar minuten zal je update live staan op al je webservers.

Kunnen bezoekers van je website zelf bestanden uploaden naar je website? Dan worden die ook automatisch tussen beide servers gesynchroniseerd.

 

Stap 1

 

Verbind met beide VPS'en via SSH of de VPS console in je controlepaneel en installeer rsync:

Ubuntu / Debian:

apt-get install rsync

CentOS:

yum -y install rsync

 

Stap 2

Om de werking te testen voeren we eerst een dry run uit (i.e. er wordt niets daadwerkelijk gekopieerd) met het onderstaande commando. Voer deze uit vanaf beide VPS'en, maar vergeet daarbij niet het IP aan te passen.

rsync -auvn -e "ssh -p 2233 -o StrictHostKeyChecking=no" transip@192.168.1.1:/var/www/ /var/www/ --no-perms --no-owner --no-group --no-times
Toelichting op het rSync commando:
  • -auvn:a staat voor archive en vind je hier meer informatie over. u staat voor update en zorgt ervoor dat enkel nieuwere bestanden gesynchroniseerd worden. v voegt verbosity toe en n zorgt ervoor dat bestanden niet gekopieerd worden. Verwijder je de n dan worden bestanden wel gekopieerd (komen we zo op terug).
  • -e: deze flag staat toe om extra opties aan ssh toe te voegen (de default verbindmethode van Rsync).
  • ssh -p 2233: ssh specificeert dat je het ssh protocol gebruikt, met -p XX geef je het poortnummer aan. Wij raden aan altijd je ssh poortnummer te veranderen op je VPS uit veiligheidsoverwegingen.
  • StrictHostKeyChecking=no: ssh voegt automatisch nieuwe host keys toe aan de known hosts file.
  • transip@192.168.1.1:/var/www/ /var/www/: respectievelijk zijn dit de gebruikersnaam op de primaire webserver (transip), het IP-adres van de primaire webserver (192.168.1.1, in dit geval verkregen van het private network), de map waarvan de inhoud vanaf de primaire webserver wordt gekopieerd (/var/www/) en de bestemming op de secondaire webserver (/var/www/).
  • --no-perms --no-owner --no-group --no-times: deze bestandsattributen (rechten, eigenaar, group, data) worden niet aangepast door het rsync commando.

 

Stap 3 SSH-Key

Bij het uitvoeren van het commando in de vorige stap wordt om een wachtwoord voor de gebruiker gevraagd (in dit geval de gebruiker transip). Dit gebeurt omdat de Rsync opdracht gebruik maakt van een SSH-verbinding. Wanneer je dit proces wil automatiseren is het dan ook wenselijk dat niet iedere keer om het wachtwoord wordt gevraagd. Hiervoor gebruiken wij een SSH-key.

Maak eerst een RSA key pair aan op beide webserversmet het volgende commando:

ssh-keygen

Druk vervolgens drie maal op enter om toestemming te geven om de RSA key aan te maken in /root/.ssh/id_rsa en om geen passphrase te gebruiken (dit heeft Rsync nodig om zonder wachtwoord prompt uitgevoerd te kunnen worden). Het resultaat ziet er als volgt uit:

ssh keygen


 

Stap 4

Kopieer je SSH key naar de andere webserver met onderstaand commando (standaard aanwezig in de meeste OS'en).

  • Vervang 22 door je daadwerkelijke SSH-poortnummer.
  • Vervang transip door de gebruikersnaam die je ook in stap 2 gebruikte.
  • Vervang 192.168.1.1 door het private network IP-adres vande andere VPS dan waar je de key op hebt aangemaakt.

rsync add private key

ssh-copy-id -p 22 transip@192.168.1.1

Er wordt om toestemming en het wachtwoord van de gebruiker gevraagd. Geef toestemming en het wachtwoord om verder te gaan. De output ziet er uit als volgt:

ssh copy id

De output hierboven raadt aan om vanaf je slave VPS via SSH met je primaire webserver te verbinden. In plaats daarvan kun je ook direct rsync testen met het commando uit stap 2.


 

Stap 5

Tot slot maak je een cronjob aan om rsync te automatiseren:

crontab -e

 

Stap 6

Geef je cronjob bijvoorbeeld de volgende inhoud:

SHELL=/bin/bash
HOME=/
2 * * * * date >> /var/log/rsync_log
2 * * * * rsync -auvn -e "ssh -p 2233 -o StrictHostKeyChecking=no" transip@192.168.1.1:/var/www/ /var/www/ --no-perms --no-owner --no-group --no-times >> /var/log/rsync_log

Kort samengevat doet bovenstaand het volgende:

  • De cronjob wordt uitgevoerd iedere 2 minuten (gedefinieerd door 2 * * * *).
  • date >> /var/log/rsync_log: dit stukje zorgt dat iedere keer dat de cronjob wordt uitgevoerd in /var/log/rsync_log op een nieuwe regel aan het eind van /var/log/rsync_log de datum en tijd wordt vermeld van de synchronisatie.
  • Het Rsync commando is in stap 2 uitgelegd. De toevoeging >> /var/log/rsync_log zorgt ervoor dat de output in /var/log/rsync_log weggeschreven wordt (onder de datum en tijd). Zo kun je altijd terugkijken hoe de synchronisatie is verlopen (cat /var/log/rsync_log | less).

Desgewenst verwijder je de cronjob als volgt:

crontab -r

Je cronjob zelf controleer je (zonder hem aan te passen) met:

crontab -l

Let op: gebruik je een custom logfile-directory zoals hierboven, vergeet dan niet die aan te maken (mkdir /var/log/siteupdates).


 

Permission denied

Met enige regelmaat ervaren mensen problemen met rsync als gevolg van folder permissies / eigenaar die niet juist staan. Krijg je een permission denied error, controleer dan de rechten van de betreffende map met ls -l /mapnaam/ (e.g. ls -l /var/www/transip.nl_a/) en pas de eigenaar /rechten indien nodig aan met chown / chmod.


 

Daarmee zijn wij aan het eind van dit deel gekomen en heb je nu de tools om een prima synchronisatie van je website op te zetten. Klik hier om door te gaan naar het volgende deel: je database synchroniseren.

Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' aan de onderzijde van deze pagina.

Wil je dit artikel met andere gebruikers bespreken, laat dan vooral een bericht achter onder 'Reacties'.

Heb je ook een goed idee?

Stuur jouw idee in! Met genoeg stemmen komt jouw idee op onze wishlist!

Heeft dit artikel je geholpen?

Maak een account aan of log in om een beoordeling achter te laten.

Reacties

Maak een account aan of log in om een reactie te plaatsen.

Kom je er niet uit?

Ontvang persoonlijke hulp van onze supporters

Neem contact op