Winkelwagen

/ VPS-Infrastructuur

Alles over de zelfontwikkelde VPS-infrastructuur

Register now

/ Up to date

/ Nieuws

Lancering PerformanceVPS

Meer info
Hulp nodig?

    Sorry, we konden geen resultaten vinden voor jouw zoekopdracht.

    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/fileserver automatisch verzorgt. In dit deel behandelen wij de synchronisatie van de bestanden op je websites tussen de webservers.

    Er zijn veel verschillende opties om bestanden op je servers te synchroniseren, maar in deze tutorials bespreken we alleen twee opties die (relatief) eenvoudig op te zetten zijn en naast het aanbieden van dezelfde bestanden op verschillende servers ook ervoor zorgen dat bestanden redundant worden opgeslagen:

    • GlusterFS
    • Rsync (beschreven in dit artikel)

     

    GlusterFS

    We raden in principe voor alle use cases GlusterFS. Het is relatief eenvoudig op te zetten (Rsync is nog iets eenvoudiger), synchroniseert bestanden in real-time (Rsync doet dat niet) en biedt een combinatie van zeer goede functionaliteit (e.g. uitstekende automatische failover en recovery tools) en performance.

    Waar in onze GlusterFS-handleiding over een server- en clientconfiguratie gesproken wordt, kun je ervoor kiezen om zowel de server als client role op dezelfde VPS'en te installeren. Je kunt dan bijvoorbeeld twee of drie VPS'en gebruiken die ieder de rol van server en client vervullen, in plaats van twee tot drie aparte servers en twee tot drie aparte clients. Dit scheelt de helft van de hardware en doet geen afbreuk aan de redundantie van je setup.

    Wanneer je een server inricht met GlusterFS, bijvoorbeeld een webserver, is het ook belangrijk dat je bij de client-configuratie rekening houdt met waar je de data opslaat, bijvoorbeeld in /var/www/users/ en je je klanten dan een directorie aanbiedt zoals /var/www/users/username.


     

    Rsync

    Voor de synchronisatie van bestanden op je server die niet in real-time hoeft plaats te vinden, kun je gebruik maken 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 via een Rsync-commando bestanden tussen je servers 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 (bijna altijd standaard al aanwezig):

    Ubuntu / Debian:

    apt -y install rsync
    

    CentOS / AlmaLinux / Rocky Linux:

    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. staat voor update en zorgt ervoor dat enkel nieuwere bestanden gesynchroniseerd worden. v voegt verbosity toe en zorgt ervoor dat bestanden niet gekopieerd worden. Verwijder je de 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 webservers met 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 van de 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 * * * * flock -n /tmp/rsync.lock 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 flock -n /tmp/rsync.lock maakt een bestand aan genaamd /tmp/rsync.lock. Wanneer de volgende keer de Rsync-cronjob wordt uitgevoerd, wordt gecontroleerd of dit bestand beschikbaar is of niet. Als die nog gelocked is vanuit een eerdere run van deze cronjob (i.e. rsync is nog niet klaar met synchroniseren), dan wordt rsync niet opnieuw uitgevoerd.
      • 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.

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op