[Tuto/HowTo] [Debian] [cluster] GlusterFS Server

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

[Tuto/HowTo] [Debian] [cluster] GlusterFS Server

Message par voxdemonix » dim. mai 08, 2016 11:14 pm

antmascot.png

GlusterFS
    • GlusterFS permet de créer des volumes/répertoires virtuels agrégeant un nombre X de serveurs. Pour cela GlusterFS crée des volumes (sorte de partition JBOD) à cheval sur les serveurs que vous stipulez lors de la création du volume et dispose d'un mode de redondance (replication) afin de lutter contre les pannes de stockage. Par défaut, sans réplication, gluster fait une sorte de raid0 (si vous uploader 10 fichiers sur un pool contenant deux Servers/Node, vous aurez 5 fichiers par server) (source). Vous pouvez utiliser l'argument stripe nombreDecoupage si vous souhaitez que les fichiers soient découpé avec leur data propre dispersée sur les différents stockages (le but étant d'augmenter les performances en lecture).
      En une phrase, il permet de faire un cluster de stockage.

      GlusterFS supporte : Les types de volume/répertoire sont :
      • RAID0 non Strip (fichier) (les fichiers sont répartis sur les différentes unités de stockage (bricks), si vous perdez une unité les données sur les autres bricks sont encore valable et accessible)
        RAID0 Strip (data) (chaque fichier est découpé N fois et ses datas respective distribuées sur N espaces de stockage, en cas de perte d'une unité de stockage TOUTES les données sont perdues; infos)
        Replication X - Raid1 (les fichiers sont dupliqués X fois à travers les Nodes comme du Raid1, perdre une unité de stockage n'a aucune incidence sur les données)
        Distributed Replicated (les fichiers sont distribué sur certains nodes et dupliqués sur d'autres comme du Raid10; infos)
        Distributed Stripped Replicated - RAID10 Strip (chaque fichier est découpé en N morceau répartis sur N Nodes et répliqué X fois sur X Nodes)
La mise en place est simple :
  1. vous installez le server sur au moins une machine
  2. vous connectez les serveurs entre eux.
  3. vous créez un volume virtuel
  4. avec un logiciel client vous pouvez accéder à votre volume (qui se comporte comme une partition) en vous connectant à n'importe lequel des deux Serveurs/Nodes.
Note : vous pouvez créer un raid local sur plusieurs disques. Par contre vous ne pouvez hélas pas créer un raid gluster dans un autre raid/jbod gluster.


Note de voxdemonix :
  • Glusterfs comporte beaucoup de bugs (peer disconnected, l'impossibilité de supprimer facilement des volumes dont tout les bricks ont disparut, systemd[1]: Failed to start LSB: GlusterFS server., volume qui ne démarre pas au boot, etc).
    Il a aussi la sale manie de ne JAMAIS avoir les versions qui coïncide dans les packages Ubuntu<=>Raspbian.
    Et, oh comble du désespoirs: la doc est uniquement en anglais (avec aucun module permettant une traduction par la communauté hein) et le bug trackers complètement illisible comme cet exemple qui, au lieu d'aider quand on à un problème, rajoute une énorme couche de frustration.
    glusterfs donne cette impression d'être un gros Proof-Of-Concept sans être réellement terminé.
Farm Link :
Installer GlusterFS Server
  • Installer le logiciel glusterfs-server :
    • Code : Tout sélectionner

      sudo apt-get install glusterfs-server attr
      Note : si vous souhaitez installer une version spécifique de Gluster utilisez l'attribut --version=id_version par exemple :
      • Code : Tout sélectionner

        sudo apt-get install glusterfs-server --version=3.7.15-ubuntu1~xenial1
        Pour connaître la version du package installé entrez dans un terminal
    Donner le droits d'accès (rw) au fichiers log : Lancer le démon :
Désinstaller glusterfs-server
Au choix :
  • Supprimer gluster sans supprimer les données (volumes, peer, etc) Supprimer gluster ET ses données
    • Code : Tout sélectionner

      sudo apt-get purge -y --auto-remove glusterfs-server
      sudo rm -R /etc/glusterfs
      sudo rm -R /var/lib/glusterd
      sudo rm /etc/ssl/gluster*
      
Créer un nouveau volume avec mode réplication (type RAID1 avec choix du nombre de réplication)
  1. Adaptez puis entrez cette commande dans votre terminal
    • Code : Tout sélectionner

      sudo gluster volume create NomVolume replica 2 transport tcp HOSTNAME_server1:/media/superPartition HOSTNAME_server2:/media/superPartition force
      • HOSTNAME => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
        NomVolume => le nom du volume dans dans la grille GlusterFS
        replica 2 => le nombre de fois que les fichiers doivent être dupliqué
        transport tcp => on utilise TCP/IP
        force => ne se met qu'à la fin de la commande, permet d'utiliser le mode root
        exemple officiel : gluster volume create NEW-VOLNAME [replica COUNT] [transport tcp | rdma | tcp,rdma] NEW-BRICK...
  2. Ensuite démarrer votre volume/répertoire :
    • Code : Tout sélectionner

      sudo gluster volume start NomVolume
      • Note : remplacez start par stop pour arrêter un volume (c'est un umount version gluster)

Options & Utilisations :
Note :Pour utiliser les commandes suivantes dans un script vous devez ajouter en fin de commande force --mode=script
  • Ajouter un Noeud/Node (ajouter peer):
    • Code : Tout sélectionner

      sudo gluster peer probe HOSTNAME
      • HOSTNAME peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
        Note : Une fois que le pool est établi, seuls les membres de confiance (trust) peuvent ajouter de nouveaux servers au pool. Un nouveau server ne peut PAS s'ajouter au pool, il doit être ajouté par le pool. (source)
    Retirer un Noeud/peers (supprimer peer):
    • Code : Tout sélectionner

      sudo gluster peer detach HOSTNAME
      • HOSTNAME peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
        Note : Tout les volumes ouvert en commun entre ses pairs (peers) doivent être stoppé AVANT.
    Retirer un Noeud/peers et les bricks liés :
    • Code : Tout sélectionner

      sudo gluster peer detach HOSTNAME
      • HOSTNAME peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
        Note : Tout les volumes ouvert en commun entre ses pairs (peers) doivent être stoppé AVANT.
        Récupérez les infos des bricks à supprimer On supprime le peer de son bricks
        • Code : Tout sélectionner

          sudo gluster volume remove-brick nomBricks replica 1  HOSTNAME:/media/monDisk/monDossier force
        ou on supprime le bricks

    Ajouter un ou plusieurs serveurs à un volume / augmenter la taille d'un volume :
    • Code : Tout sélectionner

      sudo gluster volume add-brick NomVolume HOSTNAME:/media/maPartition
      • NomVolume => le nom du volume dans dans la grille GlusterFS
        HOSTNAME => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
        /media/maPartition => le path où stocker les données sur le serveur
        Exemple officiel : gluster volume add-brick VOLNAME NEW-BRICK
        Source : http://www.gluster.org/community/docume ... ng_Volumes
    Afficher le status des connexions en cours : Afficher les infos des volumes : Supprimer un serveur d'un volume en cours en mode répliqué (raid) /diminuer un volume :
    • Code : Tout sélectionner

      sudo gluster volume remove-brick monVolume replica 2 HOSTNAME:/media/maPartition
      • NomVolume => le nom du volume dans dans la grille GlusterFS
        replica 2 => le nombre de replication
        HOSTNAME => peut valoir l'ip, le nom de domaine ou tout path réseau valable d'un des server du cluster
        /media/maPartition => le path où stocker les données sur le serveur
        Source : https://support.rackspace.com/how-to/ad ... s-servers/
    Supprimer un volume :
    • Code : Tout sélectionner

      sudo gluster volume delete NomVolume
      • Note : ça ne supprime pas les fichiers
        Le volume doit être stoppé avant via
    Lister les fichiers logs : Restreindre l'accès à une ou plusieurs IP/plage d'IP :
    • Code : Tout sélectionner

      sudo gluster volume set nomVolume auth.allow 192.168.1.2,192.168.*.1
      • nomVolume => le nom identifiant votre volume
        192.168.1.2,192.168.*.1 => un exemple d'ip suivis d'un exemple de plage d'ip à autoriser
        Note : Fonctionne aussi si le volume est en cours de fonctionnement.
Questions :
  • Que se passe-t-il si on ajoute sur le serveur comme point de montage un dossier dans lequel il y a un ou des fichiers/dossiers?
    • Réponse : Le ou les fichiers sont ignoré par GlusterFS purement et simplement. Ils sont toujours accessible via le système de fichier du serveur mais pas via un quelconque volume glusterfs.
    Que se passe-t-il si on ajoute sur le client comme point de montage un dossier dans lequel il y a un ou plusieurs fichiers/dossiers ?
    • Réponse : Le ou les fichiers disparaissent jusqu'à ce que le volume soit démonté (umount), il ne semble rien leur arriver de malheureux. Lorsque le volume est démonté en cas d'écriture vers son point de montage, alors les données sont écrites sur le disque dur principal (système), ce qui peut être un problème pour certains usages (motion sur raspberry pi entre autre).
    Si un serveur doit lire des données, va-t-il uniquement le lire localement où va-t-il utiliser les autres serveurs afin de compenser la latence des disques dur?
    • Réponse : les données sont envoyées/reçues vers les différents serveurs en même temps.
    Que se passe-t-il si un des bricks/disques dur tombe en panne en cours avec un volume fonctionnement ?
    • Réponse : Si vous êtes en raid1, il n'y a aucune perte de données mais le volume devient inaccessible. Si vous etes en replica 3 (avec arbitre ou non),normalement tant que deux Nodes sont connecté, le volume reste fonctionnel. Notez toute fois que si la machine que vous avez indiquez comme point de montage n'est plus accessible, vous aurez l'erreur "Transport endpoint is not connected".
    Quels sont les débits over Tor entre deux serveurs?
    • Réponse :
    Quels sont les débits en local (127.0.0.1) ?
    • Réponse :
      • screenshot d'un test en local d'un disque sata vers un JBOD/raid1 gluster utilisant deux HDD Seagate en sata.
        • screenshot-25_11_2016-exemple_copie_HDD_vers_gluster_JBOD.png
        screenshot d'un test en local d'un disque SSD sata vers un JBOD/raid1 gluster utilisant deux SSD en sata.
        • screenshot-27_12_2016-exemple_copie_SSD_vers_gluster_JBOD_sur_SSD.png
    Peut-on synchroniser des servers en local (malgré un loopback foireux (Hairpinning) - impossible d'utiliser le nom de domaine depuis l'intérieur du réseau) pour ensuite les disséminer sur d'autres connexions sans changer la configuration ? (et sans utiliser Tor)
    • Réponse : Une solution est de configurer en utilisant un hostname, puis en modifiant le ficher /etc/hosts (infos) pour indiquer les IP locales des différents Nodes correspondant à chaque nom de domaine. Une fois que les machines quittent votre réseau local vous devez bien entendu allez supprimer les valeurs temporaires.
    Quelques filtres d'affichages wireshark pour zieuter tout cela ?
    • Réponse : Entrez une des valeurs suivantes pour voir se qu'il se passe : glusterfs
    Les communications sont-elles chiffrées ?
    • Réponse : Par défaut Non, mais vous pouvez activer le chiffrement par TLS (ex-ssl) en suivant ce tuto : GlusterFS Security.
    Les données stockées sur le(s) serveur(s) sont-elles chiffrées ?
    • Réponse : Par défaut Non. Une feature/extension (Doc - Features/disk-encryption) est en fin de conception afin de rendre gluster compatible avec le chiffrement côté serveur (disk encryption).
    Quels sont les ports utilisés par les serveurs gluster ? Si on a un volume répliqué sur deux Nodes/Serveurs ("replicate 2") et que l'un d'eux n'est pas présent au démarrage de l'autre, le volume fonctionne-t-il?
    • Réponse : Non ( !!!) Monter le volume devient impossible même en local (127.0.0.1) !
    Quelle est la différence entre le paramètre "replicate" et "geo-replication"?
    • Réponse : replicate applique les modifications en temps réelle sur tout les Serveurs d'un Volume et lit les données sur X Serveurs en même temps. Geo-replication par contre fait des mises à jours régulières des modifications du système de fichier depuis un serveur Maître vers des serveurs Esclaves et ne lit les données que depuis le serveur Maitre.
    Que se passe-t-il si le point de montage tombe en panne en cours de fonctionnement ?
    • Réponse : Il est automatiquement remplacé par un autre en cas de mirroring.
    Que se passe-t-il si on fait un raid local (sur la même machine) et que la carte réseau n'est pas connectée
    • Réponse : le raid/jbod ne sera pas accessible tant que la machine ne sera pas connectée au réseau et ce même si le raid/jbod est uniquement local.
    Peut-on utiliser un volumegluster commeDocumentRoot pour apache2
    • Réponse : Oui mais c'est fort lent (lag important).
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par voxdemonix le jeu. oct. 19, 2017 8:42 pm, modifié 80 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: [Tuto/HowTo] [Debian] [cluster] GlusterFS Server

Message par voxdemonix » mer. mai 18, 2016 2:14 pm

!!! EN COURS DE RÉDACTIONS !!!

Faire passer les connexions entre Serveur/Node à travers Tor via SSH tunneling :
Liens utile : Pré-Requis :
  1. Installez Tor et SSH :
  2. Ouvrez le fichier /etc/tor/torrc :
  3. Cherchez (CTRL+W) "hidden service" et dé-commentez (ou ajouter selon votre envie) les lignes suivantes :
    • Code : Tout sélectionner

          HiddenServiceDir /var/lib/tor/hidden_service/ssh
          HiddenServicePort 22 127.0.0.1:22
  4. Créez le path /var/lib/tor/hidden_service/ssh :
    • Code : Tout sélectionner

      sudo mkdir /var/lib/tor/hidden_service
      sudo mkdir /var/lib/tor/hidden_service/ssh
      
  5. Attribuez les bons droits d'accès :
    • Code : Tout sélectionner

      sudo chown debian-tor:root -R /var/lib/tor/hidden_service/
      sudo chmod 700 -R /var/lib/tor/hidden_service/
  6. Éditez le fichier /etc/ssh/ssh_config :
  7. Ajoutez les lignes suivantes :
  8. Redémarrez le service Tor :
  9. Affichez l'hostname du Tor Hidden Service de votre serveur :
Mise en place des tunnels SSH :
Éditez le fichier /etc/rc.local : Ajoutez AVANT exit 0 les commandes pour créer les tunnel SSH en suivant le schema suivant.
  • Pour chaque Server/Node il faut trois tunnels fixe et un tunnel par volume/repertoire partagé. Répétez l'action pour chaque Server/Node/Peer
    • Les tunnels fixes :
      • Code : Tout sélectionner

        su pi -c 'autossh -M 0 -q -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -L 111:127.0.0.1:111 user_ssh_externe@monHiddenService.onion -f' 

        Code : Tout sélectionner

        su pi -c 'autossh -M 0 -q -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -L 24007:127.0.0.1:24007 user_ssh_externe@monHiddenService.onion -f' 

        Code : Tout sélectionner

        su pi -c 'autossh -M 0 -q -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -L 24008:127.0.0.1:24008 user_ssh_externe@monHiddenService.onion -f' 
        • pi => l'utilisateur système utilisé pour monter le tunnel ssh
          nombre:127.0.0.1:nombre => portEntrée:127.0.0.1:portSortie Attention que les ports d'entrées doivent obligatoirement être différent et unique! En effet l'adresse utilisée pour passer par le tunnel ssh sera 127.0.0.1:portEntrée et ne doit JAMAIS être en conflit avec les ports réellement utilisé par gluster. (utiliser votre propre range afin de n'entrer en conflit avec aucun logiciel et pour conserver une cohérence :) )
          user_ssh_externe => l'utilisateur utilisé sur la machine distante pour se connecter via SSH
          @monHiddenService.onion => l'hostname de votre Tor Hidden Service
      Les tunnels dynamiques :
      • Les ports concernant les volumes/repertoires débutent à partir du numéro 49152. Si votre peers gluster ne fais tourner qu'un seul volume, alors vous n'avez besoin que de faire un tunnel ssh vers 49152. Si votre peers fait tourner deux volumes/répertoires, alors vous devez faire un tunnel pour les ports 49152 et 49153.
        Ici j'explique pour un seul port ouvert, mais pour ajouter d'autres volumes/répertoires vous n'avez qu'à répéter l'action en remplacant 49152 par le port de votre volume.
        • Code : Tout sélectionner

          su pi -c 'autossh -M 0 -q -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -L 49152:127.0.0.1:49152 user_ssh_externe@monHiddenService.onion -f' 
          • pi => l'utilisateur système utilisé pour monter le tunnel ssh
            49152:127.0.0.1:49152 => portEntrée:127.0.0.1:portSortie, soit le port du volume. Attention que les ports d'entrées doivent obligatoirement être différent et unique! En effet l'adresse utilisée pour passer par le tunnel ssh sera 127.0.0.1:portEntrée et ne doit PAS être en conflit avec les ports réellement utilisé par gluster.
            user_ssh_externe => l'utilisateur utilisé sur la machine distante pour se connecter via SSH
            @monHiddenService.onion => l'hostname de votre Tor Hidden Service
Note : il semble que les ports soient choisis par le serveur gluster lors de la création d'un volume (need vérification ainsi que voir si on peut forcer un port). Les ports utilisé par les serveurs gluster pour communiquer entre eux sont : 111, 24007, 24008 et un port par volume à partir de 49152.
Each brick for every volume on the host requires its own port. For every new brick, one new port will be used starting at 24009 for GlusterFS versions earlier than 3.4 and 49152 for version 3.4 and later.
For example, if you have one volume with two bricks, you must open 24009-24010 or 49152-49153.
source : https://support.rackspace.com/how-to/ge ... tallation/
--brick-port PORT
Brick Port to be registered with Gluster portmapper

--volfile-server-port=PORT
Port number of volfile server
source : http://manpages.ubuntu.com/manpages/wil ... fsd.8.html

!!! FIN DE L'ARTICLE EN COURS DE RÉDACTIONS !!!
Modifié en dernier par voxdemonix le mar. juin 07, 2016 12:33 pm, modifié 7 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: [Tuto/HowTo] [Debian] [cluster] GlusterFS et fichier hosts

Message par voxdemonix » sam. mai 21, 2016 12:55 pm

[Linux] GlusterFS et fichier hosts
    • GlustersFS n'a pas l'air 'être compatible avec le changement d'hostname pour un peers/Node. Une solution est donc d'utiliser le fichier /etc/hosts afin de référencer nos servers/nodes. Ainsi la configuration sera toujours bonne mais nécessitera, en cas de changement, d'être éditée manuellement.
  1. Éditez le fichier /etc/hosts
  2. Ajoutez dedans pour chacun de vos Nodes/Servers/Peers
    • Code : Tout sélectionner

      hostnameLocal hostnameDistant_OU_adresse_Ip
      • hostnameLocal : l'hostname utilisé dans vos configurations
        hostnameDistant_OU_adresse_Ip : l'hostname/adresseIP utilisé pour joindre la machine sur le réseau
        Note : si vos serveurs communiquent via Internet et que votre routeur n'est PAS compatible HairPinning, il faut ajouter pour chaque serveur/node dans son fichier /etc/hosts son propre HOSTNAME avec comme valeur associée 127.0.0.1
        Exemple pour deux Nodes "GlusterServeurJacky" et "GlusterServeurMichel" :
        • sur GlusterServeurJacky
          127.0.0.1 GlusterServeurJacky
          192.168.1.22 GlusterServeurMichel
          et sur GlusterServeurMichel
          192.168.1.69 GlusterServeurJacky
          127.0.0.1 GlusterServeurMichel
  3. Enregistrez et quittez via CTRL+X
Modifié en dernier par voxdemonix le lun. oct. 31, 2016 6:20 pm, modifié 2 fois.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

[Tuto/HowTo] [Glusterfs] Changer le type de transport d'un volume/répertoire en rdma

Message par voxdemonix » lun. mai 30, 2016 6:57 pm

[Tuto/HowTo] [Glusterfs] Changer le type de transport d'un volume/répertoire en rdma

Liens Utile :
  • Démontez la partition Arrêtez le volume Changez le type de transport Redémarrez le volume Montez le volume via rdma
    • Code : Tout sélectionner

      sudo mount -t glusterfs -o transport=rdma HOSTNAME:/superPartition /media/superPartition
Questions :
  • Cela fonctionne-t-il en boucle locale (localhost/127.0.0.1) ?
    • Réponse : Non, on chope l'erreur suivante "volume start: superPartition: failed: Commit failed on localhost. Please check the log file for more details."
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: [Tuto/HowTo] [Debian] [cluster] GlusterFS Server

Message par voxdemonix » lun. oct. 02, 2017 1:06 pm

~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Avatar du membre
voxdemonix
Messages : 1237
Enregistré le : lun. févr. 02, 2015 7:28 pm

Re: [Tuto/HowTo] [Debian] [cluster] GlusterFS Server

Message par voxdemonix » lun. oct. 02, 2017 2:01 pm

Problème "State: Peer in Cluster (Disconnected)" malgré que les machines sont bien joignable.

Dans les logs :
SSL routines:ssl3_read_bytes:sslv3 alert certificate expired
Se règle en régénérant les clés et certificat TLS : voir ici.

Aucune idée pourquoi ce bug apparaît.
~ Infernalis Creatorem ~
  • Rejoins le côté obscure, on a des cookies !
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Donation Dash : XmowiBRku3tsEREp7PhpheY4TgeLLDyKdM

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité