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.

    Een NFS-server opzetten

    Wanneer je met meerdere VPS'en werkt, kan het wenselijk zijn om bestanden op de ene VPS ook beschikbaar te maken op de andere. Een manier om dit te bereiken is door een Network File System (NFS) te gebruiken.

    Met een NFS-server exporteer je lokale bestandssystemen over het netwerk en deel je ze met NFS-clients. Je kunt hiermee dus bestanden en mappen op jouw VPS of Big Storage met andere VPS'en delen. Dit doe je door directories die je op een NFS-server deelt te mounten (koppelen) op een NFS-client.

    In deze handleiding laten we zien hoe je een NFS-server en NFS-client installeert op een server met CentOS, AlmaLinux, Rocky Linux, Ubuntu of Debian. De combinatie van besturingssystemen maakt in principe niet uit.

    • Voor de stappen in deze handleiding heb je nodig:
       
      • Twee of meer VPS'en met CentOS, AlmaLinux, Rocky Linux, Ubuntu of Debian.
      • Een private network waarop de VPS'en zijn opgenomen. In onze handleiding 'een intern IP-adres instellen'-laten we zien hoe je je VPS'en een IP-adres op je private netwerk geeft.
         
    • Voer de stappen in dit artikel uit als root, of als gebruiker met root-rechten.
       
    • In uitvoerige tests hebben we gezien dat de performance in Debian 11 in de loop van tijd vertraagd. AlmaLinux performed bijvoorbeeld een stuk sneller bij het gebruik van NFS. Dit zit vermoedelijk in de kernel en voor projecten waar performance een must is, raden we daarom AlmaLinux aan.

    Een NFS-server installeren

     

    Stap 1

    Installeer afhankelijk van je besturingssysteem een NFS-server met het commando:

    CentOS 7:

    yum -y install nfs-utils nfs-utils-lib

    CentOS Stream / AlmaLinux / Rocky Linux:

    dnf -y install nfs-utils

    Ubuntu / Debian:

    apt -y install nfs-kernel-server

     

    Stap 2

    Schakel na de installatie de NFS-server in:

    CentOS / AlmaLinux / Rocky Linux:

    systemctl start nfs-server
    systemctl enable nfs-server

    Ubuntu / Debian:

    systemctl start nfs-kernel-server
    systemctl enable nfs-kernel-server

     

    Stap 3

    Maak een directory aan die je wil delen met de NFS-clients. Je bent vrij de naam en lokatie in het voorbeeld aan te passen, maar vergeet niet dat ook bij alle volgende stappen te doen:

    mkdir /mnt/nfs_share

    Optioneel:

    De ins en outs van eigendom van mappen en bestanden vallen buiten de scope van deze handleiding, maar is wel belangrijk om bij stil te staan. Om er bijvoorbeeld voor te zorgen dat alle clients straks bij de gedeelde map kunnen, kun je alle permissie restricties verwijderen:

    CentOS / AlmaLinux / Rocky Linux:

    chown -R nobody:nobody /mnt/nfs_share/

    Ubuntu/Debian:

    chown -R nobody:nogroup /mnt/nfs_share/

    Pas desgewenst ook de bestandspermissies aan op de aangemaakte map. Dit is vooral belangrijk wanneer je de optie root_squash gebruikt in stap 3.

    chmod 777 /mnt/nfs_share/

    De optie 777 geeft alle gebruikers en groepen rechten om bestanden te schrijven, lezen en uitvoeren. Op deze pagina vind je een cheat sheet voor beschikbare chmod opties.


     

    Stap 3

    Maak nu het bestand /etc/exports aan. Hierin wordt de toestemming en configuratie geregeld voor toegang tot de NFS server.

    nano /etc/exports

    De inhoud van het bestand hangt af van je use case (zie de toelichting onder de code). Een simpel voorbeeld kan zijn:

    /mnt/nfs_share 192.168.2.0/24 (rw,async,root_squash)

    Je geeft dus eerst de directory op die je wil delen, vervolgens het IP-adres of range die je toegang wil verlenen tot de NFS-share (de IP-adressen van je private network) en daarna aanvullende opties. Je voegt de opties tussen de haakjes komma gescheiden zonder spaties toe en kunt kiezen uit:

    • ro: read only rechten tot de NFS share
    • rw: read write rechten tot de NFS share
    • sync: schrijfacties worden één voor één voltooid en bevestigd (zowel IO acties als write acties worden voltooid) voor een nieuwe schrijfactie van een NFS-client wordt geaccepteerd. Dit zorgt voor tragere performance, maar wanneer de NFS-server of netwerkverbinding onderling uitvalt is er geen dataverlies.
    • async: Zodra IO requests verwerkt zijn en naar het lole bestandssysteem worden verstuurd kan een volgende actie worden uitgevoerd; er wordt niet gewacht tot data daadwerkelijk op de schijf staat voor gereageerd wordt op een nieuwe actie van een NFS client. Als de server of netwerkverbinding wegvalt tijdens schrijfacties kan er dataloss optreden. De performance van async is wel aanzienlijk sneller dan van sync.
    • no_subtree_check: Voorkomt substree controles (de standaard actie). Als een gedeelde map een onderliggende map is van een groter geheel scant nfs de directories daarboven om permissies e.d. te controleren. Het gebruik van no_subtree_check kan een zekere performancewinst geven.
    • root_squash: root-gebruikers op de NFS-client worden door de NFS-server behandelt als anonieme gebruikers zonder root-rechten
    • no_root_squash: root-gebruikers op de NFS-client blijven root-gebruikers op de NFS-share.
    • no_all_squash: alle gebruikers op de NFS-client worden indien aanwezig behandelt als dezelfde gebruikers op de NFS-server
    • all_squash: alle gebruikers op de NFS-client worden behandelt als anonieme gebruikers door de NFS-server.

    Voor iedere nieuwe directory voeg je een nieuwe regel toe aan het bestand. Sla daarna je wijzigingen op en sluit het bestand (ctrl + > > enter).

    Let op: na iedere aanpassing van deze opties, is het belangrijk je nfs-server te herstarten en het commando exportfs uit de stap hieronder opnieuw uit te voeren.


     

    Stap 4

    Vervolgens exporteer je het bestandssysteem zoals je die in stap 3 hebt ingesteld met het commando exportfs:

    exportfs -arv
    • -a exporteert alle directories.
    • -r herexporteert alle directories en synchroniseert /var/lib/nfs/etab met /etc/exports en bestanden onder /etc/exports.d
    • -v schakelt verbose output in.

     

    Stap 5

    Geef tot slot in je firewall toegang tot de nfs share:

    CentOS / AlmaLinux / Rocky Linux:

    firewall-cmd --permanent --add-service=nfs
    firewall-cmd --permanent --add-service=rpc-bind
    firewall-cmd --permanent --add-service=mountd
    firewall-cmd --reload

    In principe heb je al in /etc/exports aangegeven dat alleen IP-adressen op je private network toegang hebben. Je kunt eventueel dit ook nog aan de bovenstaande regels toevoegen door tussen --permanent en --add-service=nfs de volgende opties toe te voegen:

    --add-rich-rule="rule family='ipv4' source address='192.168.2.0/24' 

    Ubuntu / Debian:

    ufw allow from 192.168.2.0/24 to any port nfs

    De NFS-client configureren

     

    Stap 1

    Installeer de benodigde packages op de servers die je gebruikt als NFS-clients:

    CentOS / AlmaLinux / Rocky Linux:

    dnf -y install nfs-utils nfs4-acl-tools

    Ubuntu / Debian:

    apt -y install nfs-common nfs4-acl-tools

     

    Stap 2

    Maak nu een directory aan waarop je de NFS-share wil mounten, bijvoorbeeld:

    mkdir /mnt/nfs

     

    Stap 3

    Mount vervolgens de NFS-share op je NFS-clients:

    mount 192.168.2.1:/mnt/nfs_share /mnt/nfs
    
    • Vervang het adres 192.168.2.1 door het interne IP-adres van de NFS-server
    • Vervang /mnt/nfs_share door de directory die je op de server gedeeld hebt (stap 3 van de eerste paragraaf)
    • Vervang /mnt/nfs door de in de vorige stap aangemaakte directory

     

    Stap 4 - optioneel

    Het commando in stap 3 gaat om een tijdelijke mount die na een reboot verloren gaat. Om automatisch de NFS-share te mounten na een reboot van de client, open je het bestand /etc/fstab:

    nano /etc/fstab
    

    Voeg daar de volgende inhoud aan toe:

    192.168.2.1:/mnt/nfs_share /mnt/nfs  nfs defaults 0 0

    Sla de wijzigingen op en sluit het bestand met ctrl + > > enter.


    De mount verwijderen

     

    De gemounte NFS-share ontkoppel je eenvoudig op je NFS-client met het commando:

    umount /mnt/nfs
    

    Krijg je een foutmelding dat de share nog bezig is, terwijl je zeker weet dat er geen bestanden geschreven worden? Dan kun je het umount commando forceren met:

    umount -l /mnt/nfs

    Performance tuning

     

    Binnen dezelfde availability zone is de performance van een NFS-server erg vlot. Mocht je veel kleine bestanden wegschrijven naar een andere availability zone (bijv. van Delft naar Amsterdam), dan zal er ongeveer een factor 5 verschil zitten in de snelheid.

    In alle scenario's zijn er enkele opties die je kunt overwegen om meer performance uit je NFS-server te knijpen. We zetten de belangrijkste op een rijtje:

    • sync vs async: Of async (stap 3 van de NFS-server installatie) een optie is voor jouw setup hangt af van je risicobereidheid. In principe is er alleen sprake van een risico in het geval van als je NFS-server tijdens een schrijf-(niet lees-)actie onbereikbaar wordt. Als je een lokale back-up van je bestanden hebt, of een verloren bestand snel kunt reproduceren, kun je veilig async gebruiken. Gemiddeld is de performance van async ongeveer twee keer zo snel als sync.
       
    • RPCNFSDCOUNT: NFS-servers gebruiken standaard 8 processen/threads om verbindingen van NFS-clients te verwerken. Bij grotere aantallen NFS-clients kan het verhogen van het aantal processen/threads een impact maken op de performance. Een goede standaard waarde is om dit op te hogen naar 16 per core van je VPS. Afhankelijk van je OS pas je dit als volgt aan:

      CentOS / AlmaLinux Rocky Linux:
      Open de NFS-configuratie:
      nano /etc/nfs.conf
      Scroll naar onderen naar [nfsd] en pas de waarde #threads aan naar 16 per core, bijvoorbeeld:
      [nfsd]
      threads = 32
      Sla de wijzigingen op en sluit het bestand (ctrl + > > enter). Herstart hierna je NFS-server (het kan geen kwaad hierna ook de NFS-clients te ontkoppelen en opnieuw te koppelen):
      systemctl restart nfs-server

      Ubuntu / Debian:
      Open de NFS-configuratie:
      nano /etc/sysconfig/nfs
      Pas de waarde van RPCNFSDCOUNT aan naar 16 per core, bijvoorbeeld:
      RPCNFSDCOUNT=32
      Sla de wijzigingen op en sluit het bestand (ctrl + > > enter). Herstart hierna je NFS-server (het kan geen kwaad hierna ook de NFS-clients te onkoppelen en opnieuw te koppelen):
      systemctl restart nfs-server
       
    • MTU: MTU is een optie van de netwerkadapter die bepaalt hoe groot pakketjes data zijn die verstuurt worden in bits. Standaard staat de MTU op 1500. Als je veel bestanden schrijft van tussen de 1000 en 6000 bytes, dan kan het wenselijk zijn een hogere MTU in te stellen. In overige gevallen zal de MTU aanpassen weinig impact hebben.
      De MTU moet in ieder geval op alle NFS-clients en de NFS-server in dat geval identiek instellen. Een goede optie is bijvoorbeeld een waarde van 8000. We raden aan eerst alle NFS-shares te ontkoppelen (umount /dir) op de NFS-clients. Je stelt de MTU bijvoorbeeld in als volgt:
      ip link set dev eth1 mtu 8000
      
      Let wel dat je eth1 aanpast naar de naam van je private netwerkadapter. Het commando hierboven blijft ook niet behouden na een reboot, maar je kunt bijvoorbeeld de configuratie van je private network adapter zelf aanpassen om die wel te behouden.

    Er zijn nog meer opties beschikbaar zoals het aanpassen van de wtime en rtime waardes, maar in onze eigen tests konden we hier geen duidelijk merkbaar verschil mee vaststellen.


     

    Daarmee zijn we aan het eind gekomen van deze handleiding over het configureren en gebruiken van een NFS-server.

    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' onderaan deze pagina.

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op