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
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:
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.
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:
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 -auv -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 * * * *). Op https://crontab.guru/ kun je zien hoe je in een cronjob specifieke tijden opgeeft.
- 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'.