Winkelwagen

    Sorry, we konden geen resultaten vinden voor jouw zoekopdracht.

    Redundante storage in Linux met GlusterFS

    De beschikbaarheid van de data op je VPS of Big Storage is zeer belangrijk. Zelfs wanneer downtime kort en zeldzaam is, kan dat kostbaar zijn voor je onderneming. Waar de middelen het toelaten, raden we daarom aan om je systemen redundant in te richten.

    GlusterFS is een schaalbaar netwerk filesystem dat zeer geschikt is om de data op twee of meer VPS'en en/of Big Storages redundant in te richten. GlusterFS is bovendien ontwikkelt om in een breed scala aan scenario's optimale performance te bieden, namelijk voor:

    • Het werken met grote bestanden of zeer grote aantallen kleine bestanden
    • Read en write intensieve operaties
    • Sequentiele en random access taken
    • Grote aantallen clients die gebruik maken van de beschikbare storage

    In deze handleiding laten we zien hoe je VPS'en met Ubuntu, Debian, AlmaLinux, Rocky Linux of CentOS Stream inricht als GlusterFS-servers (die de redundante storage hosten) en GlusterFS-clients (die gebruik maken van de redundante storage).

    • Voor deze handleiding is minimaal de volgende hardware nodig:
       
      • Twee of meer VPS'en die dienst doen als GlusterFS-servers. In de voorbeelden in dit artikel gebruiken GlusterFS-server 1 en 2 respectievelijk de private network IP's 192.168.1.1 en 192.168.1.2.
      • Een of meer client-VPS'en die gebruik maken van de data op de GlusterFS-servers.
      • Optioneel een Big Storage per GlusterFS-server.
      • Optioneel een Private Network.
         
    • Voer de stappen in deze handleiding uit als root, of als gebruiker met root-rechten.

    Private network vs public network

     

    Waar mogelijk raden we aan om een private network te gebruiken. GlusterFS versleutelt namelijk geen verkeer tussen de verschillende servers en clients. Een private network geeft bescherming omdat je dan gebruik maakt van een afgeschermd netwerk.

    Een ander voordeel van het gebruiken van een private network is dat verkeer over een private network niet meetelt in de traffic pool van je VPS'en.

    Alleen wanneer computers of servers niet aan een private network toegevoegd kunnen worden maar wel rechtstreeks bij de redundante data moeten kunnen, gebruik je het publieke IP-adres van je servers & clients (of de DNS-namen daarvan). In dat geval is het wel raadzaam om gebruik te maken van een VPN-verbinding tussen alle betrokken computers en servers voor extra beveiliging.

    Mocht je twijfelen of voor jouw use case een private network toereikend is, vraag ons dan gerust om advies via een bericht vanuit het TransIP-controlepaneel.


    GlusterFS installeren

     

    Stap 1

    Verbind met de VPS'en (servers en clients) via SSH of de VPS-console in het TransIP-controlepaneel.


     

    Stap 2

    Update en herstart je VPS'en:

    Ubunu / Debian:

    apt -y update && apt -y upgrade
    reboot
    

    CentOS Stream / AlmaLinux / Rocky Linux:

    dnf -y update
    reboot

     

    Stap 3

    Installeer GlusterFS (let op dat je de juiste instructie voor jouw besturingssysteem gebruikt):

     

    Ubuntu:

    Installeer de software properties common package als die nog niet op je servers aanwezig is:

    apt -y install software-properties-common

    Voeg de GlusterFS PPA (repository) toe aan je VPS'en:

    add-apt-repository ppa:gluster/glusterfs-7
    apt -y update

    Installeer de GlusterFS-server software op de VPS'en die je als GlusterFS-servers gaat gebruiken met het commando:

    apt -y install glusterfs-server

    Installeer tot slot de GlusterFS-client software op de clients die de redundante storage gaan gebruiken:

    apt -y install glusterfs-client

     

    CentOS Stream / AlmaLinux / Rocky Linux:

    Installeer de GlusterFS-server software op je GlusterFS-servers met het commando:

    dnf -y install glusterfs-server

    Installeer de GlusterFS-client software op de clients die de redundante storage gaan gebruiken:

    dnf -y install glusterfs-client

     

    Debian: 

    Voeg de GPG-key toe aan apt:

    wget -O - https://download.gluster.org/pub/gluster/glusterfs/9/rsa.pub | apt-key add -

    Voeg de apt-source toe :

    DEBID=$(grep 'VERSION_ID=' /etc/os-release | cut -d '=' -f 2 | tr -d '"')
    DEBVER=$(grep 'VERSION=' /etc/os-release | grep -Eo '[a-z]+')
    DEBARCH=$(dpkg --print-architecture)
    echo deb https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/${DEBID}/${DEBARCH}/apt ${DEBVER} main > /etc/apt/sources.list.d/gluster.list

    Update vervolgens de package list

    apt -y update
    

    Installeer de GlusterFS-server software op je GlusterFS-servers met het commando:

    apt -y install glusterfs-server

    Installeer de GlusterFS-client software op de clients die de redundante storage gaan gebruiken:

    apt -y install glusterfs-client

    GlusterFS-servers configureren

     

    Stap 1

    Schakel GlusterFS in op de VPS'en die je als GlusterFS-servers gaat gebruiken en start de GlusterFS-service:

    systemctl enable glusterd.service
    systemctl start glusterd.service

     

    Stap 2

    De Gluster-daemon maakt gebruik van poort 24007 voor communicatie tussen de GlusterFS-servers. Voer daarom op ieder van de GlusterFS-servers het commando hieronder uit om poort 24007 te openen in je firewall.

    • Vervang 192.168.1.2 door het private network IP-adres van de GlusterFS-server(s) die je toegang tot deze server wil geven (en niet het IP-adres van de server waar vanaf je dit commando uitvoert).
    • Herhaal het commando voor iedere VPS die als GlusterFS-server wordt gebruikt.
    • Gebruik je de VPS-firewall in het TransIP-controlepaneel? Zet dan ook daarin de poorten open.

    Ubuntu/Debian (UFW):

    ufw allow from 192.168.1.2 to any port 24007

    CentOS Stream / AlmaLinux / Rocky Linux:

    firewall-cmd --permanent --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="192.168.1.2"
    port protocol="tcp" port="24007" accept'

     

    Stap 3

    Verbind nu de verschillende GlusterFS-servers met elkaar via het gluster peer probe commando. Het maakt niet uit op welke server je dit commando uitvoert.

    gluster peer probe 192.168.1.2

    Vervang 192.168.1.2 door het (private) IP-adres van de server waar je een verbinding mee tot stand wil brengen.

    Met dit commando vertel je je VPS dat je de server met het IP-adres 192.168.1.2 vertrouwd en die moet registreren als deel van de storage pool.


    Stap 4

    GlusterFS maakt gebruik van 'volumes'. Simpel gezegd is een volume een verzameling van servers die samen een storage pool vormen. Het volume maakt gebruik van een daemon die op iedere GlusterFS-server draait. De daemon maakt op zijn beurt gebruik van een 'brick proces' (genaamd glusterfsd) om de onderliggende storage aan te spreken. In de praktijk wordt vaak een GlusterFS-server een 'brick' genoemd.

    Maak nu een volume aan door op een van de GlusterFS-servers het volgende commando uit te voeren (zie de punten onder het commando):

     gluster volume create volume_naam replica aantal_servers 192.168.1.1:/data/directory 192.168.1.2:/data/directory force
    • gluster volume create: Maakt een volume.
    • volume_naam: Je bent vrij in hoe je het volume noemt, maar het is handig om een naam te gebruiken waaraan je eenvoudig herkent wat het doel van het volume is (bijvoorbeeld een projectnaam).
    • replica: replica is hier het type volume. Dit betekent dat data wordt gerepliceerd op de servers die je in dit commando definieert
    • aantal_servers: Het aantal GlusterFS-servers.
    • 192.168.1.1:/data/directory 192.168.1.2:/data/directory force: Voor iedere GlusterFS-server geef je het IP-adres op gevolgd door de directory die je wil inzetten voor de redundante storage.
    • force: forceert het aanmaken van het volume en negeert eventuele waarschuwingen.

    Een voorbeeld voor een private network met twee GlusterFS-servers met ieder een Big Storage kan er als volgt uit zien:

    gluster volume create storage1 replica 2 192.168.1.1:/mnt/bigstorage 192.168.1.2:/mnt/bigstorage force

    Het handige aan het werken met volumes is dat je op dezelfde servers ook meerdere volumes kunt aanmaken. Dit is bijvoorbeeld handig als je een volume per softwarepakket, klant of project wil gebruiken.


     

    Stap 5

    Het volume is niet automatisch actief en activeer je met het commando:

    gluster volume start volume_naam

    Vervang volume_naam door de naam die je in stap 4 hebt gebruikt bij het aanmaken van het volume.


     

    Stap 6

    Controleer de status van de GlusterFS-servers met het commando:

    gluster volume status

    In de output zie je naast de status bijvoorbeeld ook terug op welke TCP poort de 'brick' actief is, doorgaans 49152:

    Status of volume: volume_naam
    Gluster process                             TCP Port  RDMA Port  Online  Pid
    ------------------------------------------------------------------------------
    Brick 192.168.1.1:/data/storage             49152     0          Y       15179
    Brick 192.168.1.2:/data/storage             49152     0          Y       799
    Self-heal Daemon on localhost               N/A       N/A        Y       15200
    Self-heal Daemon on 192.168.1.3             N/A       N/A        Y       828
    Task Status of Volume volume1
    ------------------------------------------------------------------------------
    There are no active volume tasks

    Stap 7

    Open vanaf alle GlusterFS-servers de poort waarop de 'brick' actief is voor je clients.

    • Vervang 192.168.1.3 door het (private) IP-adres van de client waar je het GlusterFS-volume op wil mounten.
    • Herhaal deze stap op al je GlusterFS-servers voor iedere client waarop je het GlusterFS-volume wil mounten.
    • Zag je in stap 6 een andere poort dan 49152? Pas dat dan aan in de commando's hieronder.

    Ubuntu/Debian:

    ufw allow from 192.168.1.3 to any port 49152

    CentOS Stream / AlmaLinux / Rocky Linux:

    firewall-cmd --permanent --zone=public --add-rich-rule='
     rule family="ipv4"
     source address="192.168.1.3"
     port protocol="tcp" port="49152" accept'

     

    Stap 8 - optioneel

    In de vorige stap heb je toegang tot de 'brick' poort beperkt. Andere computers hebben echter nog vrij toegang tot het GlusterFS-volume. Dit is geen heel groot veiligheidsrisico op een private network, maar wel als je voor de stappen in deze handleiding de publieke netwerkverbinding van je VPS'en gebruikt. Het is dan raadzaam om toegang tot het volume ook te beperken tot de IP's van je clients als volgt:

    gluster volume set volume_naam auth.allow 192.168.1.3
    • Pas volume_naam aan naar de naam van het GlusterFS-volume die je in stap 4 hebt aangemaakt.
    • Vervang 192.168.1.3 door het (private) IP-adres van je client.

    Voor meerdere clients splits je de IP-adressen met komma's als volgt:

    gluster volume set volume_naam auth.allow 192.168.1.3, 192.168.1.4, 192.168.1.5

    Deze restrictie verwijder je eventueel weer met het commando:

    gluster volume set volume_naam auth.allow *

    GlusterFS-clients configureren

     

    Stap 1

    Het GlusterFS-volume dat je in de vorige paragraaf hebt aangemaakt, koppel je eenvoudig aan een client met een mount-commando. Maak eerst een directory aan op je client(s) waar je het volume aan gaat koppelen, bijvoorbeeld:

    mkdir /mnt/storage

    Je bent vrij om de directory in dit voorbeeld aan te passen.


     

    Stap 2

    Vervolgens mount je het GlusterFS-volume. Pas hier de volgende gegevens aan:

    • 192.168.1.1: Pas aan naar het (private) IP-adres van één van je GlusterFS-servers. Het maakt niet uit welke van je GlusterFS-servers je hiervoor gebruikt; GlusterFS ziet je servers namelijk als een enkele entiteit. Ook als de server met IP-adres 192.168.1.1 offline zou gaan, weet GlusterFS nog op welke IP-adressen de andere servers actief zijn.
    • volume_naam: Pas aan naar de naam van het volume dat je in stap 4 van de vorige paragraaf hebt aangemaakt.
    • /mnt/storage: Pas deze directory aan naar de directory die je in de vorige stap hebt aangemaakt.
    mount -t glusterfs 192.168.1.1:/volume_naam /mnt/storage

    De toevoeging -t glusterfs geeft hier aan dat voor het mounten het GlusterFS type filesystem gemount wordt.


     

    That's it! Je kunt nu je redundante storage direct testen door bijvoorbeeld op een client een bestand aan te maken...

    touch /mnt/storage/testbestand

    ... en vervolgens op een server te kijken of je die terugziet:

    ls /data/directory
    

    Pas hier /data/directory aan naar de directory die je in stap 4 van de server-configuratie hebt gebruikt, bijvoorbeeld /mnt/bigstorage.


    Automatisch mounten

     

    In de meeste scenario's is het wenselijk dat de GlusterFS-clients na een herstart van de onderliggende VPS automatisch  het GlusterFS-volume opnieuw mounten.

    Voeg hiervoor eerst een entry toe aan /etc/fstab (dit bestand regelt welke filesystems gemount worden bij het booten van je VPS)

    echo "192.168.1.1:/volume_naam /mnt/storage glusterfs defaults,_netdev 0 0" >> /etc/fstab

    Normaal gesproken is dit voldoende, maar het duurt tijdens het (her)starten van je VPS even voor de glusterfs-server service gestart is (die nodig is om het volume te kunnen mounten). Het proces systemd-mount zorgt voor de mount points in /etc/fstab en start sneller dan de glusterfs-server service. Het gevolg hiervan is dat de poging van systemd-mount om automatisch het GlusterFS-volume te mounten faalt.

    Dit los je op met de volgende commando's:

    touch /etc/systemd/system/gluster-mount.service
    echo "[Unit]" >> /etc/systemd/system/gluster-mount.service
    echo "After=glusterfs-server.service" >> /etc/systemd/system/gluster-mount.service
    echo "Wants=glusterfs-server.service" >> /etc/systemd/system/gluster-mount.service

    Hiermee maak je een service aan die ervoor zorgt dat het GlusterFS-volume alleen gemount wordt wanneer de glusterfs-server service beschikbaar is.


    Servers toevoegen/verwijderen aan een volume

     

    Je hebt een volume aangemaakt, maar na verloop van tijd wil je een extra server toevoegen aan een volume. Doorloop hiervoor eerst op de nieuwe server de stappen in de paragraaf 'GlusterFS installeren' en stap 1 t/m 3 van de paragraaf 'GlusterFS-servers configureren', met twee kleine aanpassingen:

    • Voer stap 2 uit op de nieuwe en bestaande GlusterFS-servers om de servers onderling toegang tot elkaar te verlenen.
    • Gebruik in stap 3 het (private) IP-adres van de nieuwe server.

    Voer nu vanaf een willekeurige bestaande GlusterFS-server het volgende commando uit:

    gluster volume add-brick volume_naam replica 3 192.168.1.10:/data/directory
    • gluster volume add-brick: Het basis commando voor het toevoegen van een nieuwe server aan een bestaand volume.
    • volume_naam: Pas aan naar de naam van het bestaande volume.
    • replica 3: Pas hier de 3 aan naar het nieuwe totale aantal GlusterFS-servers dat het volume aanbiedt. Upgrade je dus van 2 servers naar 3 servers, dan gebruik je hier replica 3.
    • 192.168.1.10:/data/directory: Geef het IP-adres op van de nieuwe server, gevolgd door de directory die je wil inzetten voor de redundante storage.

    Een server (brick) verwijder je van een volume met enkele commando's:

    gluster volume remove-brick volume_naam 192.168.1.1 start 
    • volume_naam: Pas aan naar de naam van het volume waar de server van verwijdert wordt.
    • 192.168.1.1: Geef het (private) IP-adres op van de te verwijderen server.

    Controleer de status van het verwijderen van de brick/server:

    gluster volume remove-brick volume_naam 192.168.1.1 status 

    Wanneer het verwijderen voltooid is bevestig je de verwijdering door deze te 'committen':

    gluster volume remove-brick volume_naam 192.168.1.1 commit

    Clients toevoegen

     

    Wanneer je een volume wil mounten op een nieuwe client, doorloop je de volgende paragraven/stappen in deze volgorde:

    • Doorloop de paragraaf 'GlusterFS installeren' op de nieuwe client.
    • Doorloop stap 7 van de paragraaf 'GlusterFS-servers configureren' op de GlusterFS-servers.
    • Doorloop de paragraaf 'GlusterFS-clients configureren' op de nieuwe client.

    GlusterFS beheren

     

    Tot slot is het handig om bekend te zijn met de commando's die je kunt gebruiken om je GlusterFS setup te beheren (voor zover die niet al aan bod zijn gekomen). Een handige selectie vind je hieronder, maar neem ook een kijkje in GlusterFS' eigen documentatie.

    • gluster volume stop volume_naam
      gluster volume start volume_naam
      Brengt het volume met de naam 'volume_naam' offline / online.
    • gluster volume set volume_naam group metadata-cache 
      Schakelt metadata caching in; dit verbetert de performance van het cluster behalve wanneer heel veel clients hetzelfde bestand tegelijk bewerken.
    • gluster volume delete volume_naam
      Verwijdert het volume met de naam volume_naam, maar niet de data die op je servers staat. Je kunt bijvoorbeeld dus een volume verwijderen en opnieuw toevoegen zonder dat dat impact hoeft te hebben op de data die op je servers staat.
    • gluster volume status
      Hoewel eerder genoemd in dit artikel vermelden we dit commando nog een keer omdat het je eerste 'go to' is bij het troubleshooten van je setup.
    • gluster volume info
      Toont iets uitgebreidere informatie over de beschikbare volumes.
    • gluster volume profile volume_naam start
      Verzamelt informatie over de performance van het opgegeven volume
    • gluster volume profile volume_naam info
      
      Toont de verzamelde performance-informatie van het opgegeven volume
    • gluster
      Start de gluster-console. Gebruik het commando 'help' om beschikbare opties te zien of 'exit' om de gluster-console te sluiten.

     

    Daarmee zijn we aan het eind gekomen van deze handleiding over het installeren en configureren van redundante storage in Linux met behulp van GlusterFS.

     

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op