One place for hosting & domains

      Comment créer un pool de stockage redondant en utilisant GlusterFS sur Ubuntu 20.04


      Une version antérieure de ce tutoriel a été écrite par Brennan Bearnes.

      Introduction

      Lorsque vous stockez des données critiques, avoir un seul point de défaillance est très risqué. Alors que beaucoup de bases de données et autres logiciels vous permettent de répartir les données dans le contexte d’une seule application, d’autres systèmes peuvent fonctionner au niveau du système de fichiers pour s’assurer que les données sont copiées à un autre endroit chaque fois qu’elles sont écrites sur le disque.

      GlusterFS est un système de fichiers de stockage connecté en réseau qui vous permet de mettre en commun les ressources de stockage de plusieurs machines. Cela vous permet de traiter plusieurs périphériques de stockage répartis sur plusieurs ordinateurs comme une seule unité plus puissante. GlusterFS vous donne également la liberté de créer différents types de configurations de stockage, dont beaucoup sont fonctionnellement similaires aux niveaux RAID. Par exemple, vous pouvez répartir les données sur différents nœuds du cluster, ou vous pouvez mettre en place une redondance pour une meilleure disponibilité des données.

      Objectifs

      Dans ce guide, vous créerez un tableau de stockage redondant en grappe, également connu sous le nom de système de fichiers distribués ou, comme il est mentionné dans la documentation GlusterFS, un pool de stockage fiable. Cela fournira des fonctionnalités similaires à une configuration RAID en miroir sur le réseau : chaque serveur indépendant contiendra sa propre copie des données, ce qui permettra à vos applications d’accéder à l’une ou l’autre des copies, contribuant ainsi à répartir votre charge de lecture.

      Ce cluster GlusterFS redondant sera composé de deux serveurs Ubuntu 20.04. I agira comme un serveur NAS avec RAID en miroir. Vous accéderez ensuite au cluster à partir d’un troisième serveur Ubuntu 20.04 configuré pour fonctionner comme client GlusterFS.

      Une note sur l’exécution sécurisée de GlusterFS

      Lorsque vous ajoutez des données à un volume GlusterFS, les données sont synchronisées à chaque machine du pool de stockage où le volume est hébergé. Ce trafic entre les nœuds n’est pas crypté par défaut, ce qui signifie qu’il y a un risque qu’il puisse être intercepté par des acteurs malveillants.

      Pour cette raison, si vous souhaitez utiliser GlusterFS en production, il est recommandé de l’exécuter sur un réseau isolé. Par exemple, vous pouvez le configurer pour qu’il fonctionne sur un nuage privé virtuel (VPC) ou avec un VPN fonctionnant entre chacun des nœuds.

      Si vous prévoyez de déployer GlusterFS sur DigitalOcean, vous pouvez le configurer comme un réseau isolé en ajoutant votre infrastructure de serveur à un nuage privé virtuel DigitalOcean. Pour plus de détails sur la manière de le mettre en place, consultez notre documentation sur les produits VPC.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin de trois serveurs fonctionnant sous Ubuntu 20.04. Chaque serveur doit avoir un utilisateur non root avec des privilèges administratifs et un pare-feu configuré avec UFW. Pour le mettre en place, suivez notre guide de configuration initiale du serveur pour Ubuntu 20.04.

      Remarque : Comme mentionné à la section Objectifs, ce tutoriel vous guidera à travers la configuration de deux de vos serveurs Ubuntu pour qu’ils agissent comme des serveurs dans votre pool de stockage et le dernier pour qu’il agisse comme un client que vous utiliserez pour accéder à ces nœuds.

      Pour plus de clarté, ce tutoriel fera référence à ces machines avec les noms d’hôte suivants :

      Nom d’hôte Rôle dans le pool de stockage
      gluster0 Serveur
      gluster1 Serveur
      gluster2 Client

      Les commandes qui devraient être exécutées sur gluster0 ou gluster1 auront respectivement des arrière-plans bleu et rouge :

      Les commandes qui ne devraient être exécutées que sur le client (gluster2) auront un arrière-plan vert :

      Les commandes qui peuvent ou devraient être exécutées sur plusieurs machines auront un arrière-plan gris :

      Étape 1 – Configuration de la résolution DNS sur chaque machine

      La mise en place d’une sorte de résolution de nom d’hôte entre chaque ordinateur peut aider à gérer votre pool de stockage Gluster. De cette façon, chaque fois que vous devez référencer une de vos machines dans une commande gluster plus loin dans ce tutoriel, vous pourrez le faire avec un nom de domaine facile à mémoriser ou même un surnom au lieu de leurs adresses IP respectives.

      Si vous n’avez pas de nom de domaine de rechange, ou si vous souhaitez simplement configurer quelque chose rapidement, vous pouvez à la place modifier le fichier /etc/hosts sur chaque ordinateur. Il s’agit d’un fichier spécial sur les machines Linux où vous pouvez configurer le système de manière statique pour résoudre tous les noms d’hôte contenus dans le fichier en adresses IP statiques.

      Remarque : Si vous souhaitez configurer vos serveurs pour qu’ils s’authentifient avec un domaine qui vous appartient, vous devrez d’abord obtenir un nom de domaine à partir d’un registraire de domaine — comme Namecheap ou Enom — et configurer les enregistrements DNS appropriés.

      Une fois que vous avez configuré un enregistrement A pour chaque serveur, vous pouvez passer à l’étape 2. En suivant ce guide, assurez-vous de remplacer glusterN.example.com et gluster<^>N<^> par le nom de domaine qui se résout au serveur respectif référencé dans la commande example.

      Si vous avez obtenu votre infrastructure auprès de DigitalOcean, vous pouvez ajouter votre nom de domaine à DigitalOcean puis configurer un enregistrement A unique pour chacun de vos serveurs.

      À l’aide de votre éditeur de texte préféré, ouvrez ce fichier avec des privilèges root sur chacune de vos machines. Ici, nous utiliserons nano :

      Par défaut, le fichier ressemblera à quelque chose comme celui-ci avec les commentaires supprimés :

      /etc/hosts

      127.0.1.1 hostname hostname
      127.0.0.1 localhost
      
      ::1 ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      ff02::3 ip6-allhosts
      

      Sur l’un de vos serveurs Ubuntu, ajoutez l’adresse IP de chaque serveur, suivi des noms que vous souhaitez utiliser pour les référencer dans des commandes sous la définition de l’hôte locale.

      Dans l’exemple suivant, chaque serveur a un long nom d’hôte qui s’aligne sur glusterN.example.com et un nom court qui s’aligne sur glusterN. Vous pouvez changer les portions de glusterN.example.com et de glusterN de chaque ligne en n’importe quel nom — ou des noms séparés par des espaces uniques — que vous souhaitez utiliser pour accéder à chaque serveur. Notez, cependant, que ce tutoriel utilisera ces exemples tout au long :

      Remarque : Si vos serveurs font partie d’un pool d’infrastructure VPC, vous devez utiliser l’adresse IP privée de chaque serveur dans le fichier /etc/hosts plutôt que leurs IP publiques.

      /etc/hosts

      . . .
      127.0.0.1       localhost
      first_ip_address gluster0.example.com gluster0
      second_ip_address gluster1.example.com gluster1
      third_ip_address gluster2.example.com gluster2
      
      . . .
      

      Lorsque vous avez terminé d’ajouter ces nouvelles lignes au fichier /etc/hosts d'une machine, copiez-les et ajoutez-les aux fichiers /etc/hosts de vos autres machines. Chaque fichier /etc/hosts devrait contenir les mêmes lignes, reliant les adresses IP de vos serveurs aux noms que vous avez sélectionnés.

      Enregistrez et fermez chaque fichier lorsque vous avez terminé. Si vous avez utilisé nano, faites-le en appuyant sur CTRL+X, Y, puis ENTER.

      Maintenant que vous avez configuré la résolution de nom d’hôte entre chacun de vos serveurs, il sera plus facile d’exécuter des commandes plus tard lorsque vous configurez un pool de stockage et un volume. Ensuite, vous passerez par une autre étape qui doit être réalisée sur chacun de vos serveurs. À savoir, ajouter l’archive personnelle officielle des paquets du projet Gluster (PPA) à chacun de vos trois serveurs Ubuntu pour vous assurer que vous pouvez installer la dernière version de GlusterFS.

      Étape 2 – Configuration des sources logicielles sur chaque machine

      Bien que les référentiels Ubuntu 20.04 APT par défaut contiennent des paquets GlusterFS, au moment où nous écrivons ces lignes, ce ne sont pas les versions les plus récentes. Une façon d’installer la dernière version stable de GlusterFS (version 7.6 au moment où nous écrivons ces lignes) consiste à ajouter le PPA officiel du projet Gluster à chacun de vos trois serveurs Ubuntu.

      Ajoutez le PPA pour les paquets GlusterFS en exécutant la commande suivante sur chaque serveur :

      • sudo add-apt-repository ppa:gluster/glusterfs-7

      Appuyez sur ENTER lorsque vous êtes invité à confirmer que vous souhaitez réellement ajouter le PPA.

      Après avoir ajouté le PPA, actualisez l’index local des paquets de chaque serveur. Cela permettra à chaque serveur de prendre connaissance des nouveaux paquets disponibles :

      Après avoir ajouté le PPA officiel du projet Gluster sur chaque serveur et mis à jour l’index local des paquets, vous êtes prêt à installer les paquets GlusterFS nécessaires. Cependant, comme deux de vos trois machines agira comme serveurs Gluster et l’autre comme client, il existe deux procédures distinctes d’installation et de configuration. Tout d’abord, vous installerez et configurez les composants du serveur.

      Étape 3 – Installation des composants du serveur et création d’un pool de stockage de confiance

      Un pool de stockage est toute quantité de capacité de stockage agrégée à partir de plusieurs ressources de stockage. Au cours de cette étape, vous configurez deux de vos serveurs — gluster0 et gluster1 — comme les composants du cluster.

      Sur gluster0 et gluster1, installez le paquet de serveur GlusterFS en saisissant :

      • sudo apt install glusterfs-server

      Lorsque vous y êtes invité, appuyez sur Y et ensuite ENTER pour confirmer l’installation.

      Le processus d’installation configure automatiquement GlusterFS pour qu’il fonctionne comme un service systemd. Cependant, il ne démarre pas automatiquement le service ou ne lui permet pas de s’exécuter au démarrage.

      Pour démarrer glusterd, le service GlusterFS, exécutez la commande systemctl start suivante sur gluster0 et gluster1 :

      • sudo systemctl start glusterd.service

      Ensuite, lancez la commande suivante sur les deux serveurs. Cela permettra au service de démarrer chaque fois que le serveur démarre :

      • sudo systemctl enable glusterd.service

      Ensuite, vous pouvez vérifier l’état du service sur l’un ou les deux serveurs :

      • sudo systemctl status glusterd.service

      Si le service est opérationnel, vous recevrez un résultat comme celui-ci :

      Output

      ● glusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago Docs: man:glusterd(8) Main PID: 14742 (glusterd) Tasks: 9 (limit: 2362) CGroup: /system.slice/glusterd.service └─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

      En supposant que vous ayez suivi le guide initial des prérequis de configuration du serveur, vous aurez mis en place un pare-feu avec UFW sur chacune de vos machines. À cause de cela, vous devrez ouvrir le pare-feu sur chaque nœud avant de pouvoir établir des communications entre eux et créer un pool de stockage.

      Le démon Gluster utilise le port 24007, vous devrez donc autoriser chaque nœud à accéder à ce port à travers le pare-feu de chaque autres nœuds de votre pool de stockage. Pour ce faire, lancez la commande suivante sur gluster0. N’oubliez pas de remplacer gluster1_ip_address par l’adresse IP de gluster1 :

      • sudo ufw allow from gluster1_ip_address to any port 24007

      Et lancez la commande suivante sur gluster1. Encore une fois, veillez à remplacer gluster0_ip_address par l’adresse IP de gluster0 :

      • sudo ufw allow from gluster0_ip_address to any port 24007

      Vous devrez également autoriser votre machine client (gluster2) à accéder à ce port. Sinon, vous rencontrerez des problèmes plus tard lorsque vous essayerez de monter le volume. Exécutez la commande suivante sur gluster0 et gluster1 pour ouvrir ce port à votre machine cliente :

      • sudo ufw allow from gluster2_ip_address to any port 24007

      Ensuite, pour s’assurer qu’aucune autre machine ne soit puisse accéder au port de Gluster sur l’un ou l’autre des serveurs, ajoutez la règle deny absolue suivante à la fois à gluster0 et gluster1 :

      Vous êtes maintenant prêt à établir la communication entre gluster0 et gluster1. Pour ce faire, vous devrez exécuter la commande gluster peer probe sur l’un de vos nœuds. Peu importe le nœud que vous utilisez, mais l’exemple suivant montre la commande en cours sur gluster0 :

      • sudo gluster peer probe gluster1

      En gros, cette commande indique à gluster0 de faire confiance à gluster1 et de l’enregistrer comme faisant partie de son pool de stockage. Si le sondage est réussi, il renverra la sortie suivante :

      Output

      peer probe: success

      Vous pouvez vérifier que les nœuds communiquent à tout moment en exécutant la commande gluster peer status sur l’un ou l’autre . Dans cet exemple, il est exécuté sur gluster1 :

      Si vous lancez cette commande à partir de gluster1, il affichera la sortie suivante :

      Output

      Number of Peers: 1 Hostname: gluster0.example.com Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be State: Peer in Cluster (Connected)

      À ce stade, vos deux serveurs communiquent et sont prêts à créer des volumes de stockage entre eux.

      Étape 4 – Créer un volume de stockage

      Rappelons que l’objectif principal de ce tutoriel est de créer un pool de stockage redondant. À cette fin, vous allez mettre en place un volume avec une fonctionnalité de réplication, vous permettant de conserver plusieurs copies de vos données et d’éviter à votre cluster d’avoir un seul point de défaillance.

      Pour créer un volume, vous utiliserez la commande gluster volume create avec cette syntaxe générale :

      sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force
      

      Voici ce que ce signifient les arguments et les options cette commande gluster volume create signifient :

      • volume_name : C’est le nom que vous utiliserez pour faire référence au volume après sa création. L’exemple de commande suivant crée un volume nommé volume1.
      • réplica number_of_servers: : À la suite du nom du volume, vous pouvez définir le type de volume que vous souhaitez créer. Rappelons que l’objectif de ce tutoriel est de créer un pool de stockage redondant, nous utiliserons donc le type de volume replica. Cela exige un argument indiquant sur combien de serveurs les données du volume seront répliquées (2 dans le cas de ce tutoriel).
      • domain1.com:/… et domain2.com:/… : Ces éléments définissent les machines et l’emplacement du répertoire des briques — le terme de GlusterFS pour son unité de stockage de base, qui comprend tous les répertoires sur toutes les machines qui servent comme partie ou copie d’un volume plus important — qui constitueront le volume1. L’exemple suivant créera un répertoire nommé gluster-storage dans le répertoire racine des deux serveurs.
      • force : Cette option remplacera les avertissements ou les options qui autrement pourraient apparaître et arrêter la création du volume.

      En suivant les conventions établies précédemment dans ce tutoriel, vous pouvez exécuter cette commande pour créer un volume. Notez que vous pouvez l’exécuter à partir de gluster0 ou de gluster1 :

      • sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force

      Si le volume a été créé avec succès, vous recevrez la sortie suivante :

      Output

      volume create: volume1: success: please start the volume to access data

      À ce stade, votre volume a été créé, mais il n’est pas encore actif. Vous pouvez démarrer le volume et le rendre disponible pour l’utilisation en exécutant la commande suivante, toujours à partir de l’un de vos serveurs Gluster :

      • sudo gluster volume start volume1

      Vous recevrez cette sortie si le volume a été démarré correctement :

      Output

      volume start: volume1: success

      Ensuite, vérifiez que le volume est en ligne. Exécutez la commande suivante à partir de l’un de vos nœuds :

      • sudo gluster volume status

      Cela renverra la sortie semblable à celle-ci :

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028 Self-heal Daemon on localhost N/A N/A Y 19049 Self-heal Daemon on gluster0.example.com N/A N/A Y 18822 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Sur la base de cette sortie, les briques sur les deux serveurs sont en ligne.

      En guise de dernière étape pour configurer votre volume, vous devrez ouvrir le pare-feu sur les deux serveurs pour que votre machine cliente puisse se connecter et monter le volume. Selon l’exemple de sortie de la commande précédente, volume1 tourne sur le port 49152 sur les deux machines. C’est le port par défaut de GlusterFS pour son volume initial, et le prochain volume que vous crérez utilisera le port 49153, puis 49154, etc.

      Exécutez la commande suivante sur gluster0 et gluster1 pour autoriser gluster2 à accéder à ce port à travers le pare-feu respectif de chacun :

      • sudo ufw allow from gluster2_ip_address to any port 49152

      Ensuite, pour une couche de sécurité supplémentaire, ajoutez une autre règle deny absolue pour le port du volume sur gluster0 et gluster1. Cela garantira qu’aucune machine autre que votre machine cliente ne puisse accéder au volume sur l’un ou l’autre des serveurs :

      Maintenant que votre volume est opérationnel, vous pouvez configurer votre machine cliente et commencer à l’utiliser à distance.

      Étape 5 — Installation et configuration des composants du client

      Votre volume est maintenant configuré et disponible pour être utilisé par votre machine cliente. Mais, avant de commencer, vous devez installer le paquet glusterfs-client à partir du PPA que vous avez mis en place à l’étape 1 sur votre machine cliente. Les dépendances de ce paquet comprennent certaines des bibliothèques et modules de traduction communs de GlusterFS, ainsi que les outils FUSE nécessaires à son fonctionnement.

      Exécutez la commande suivante sur gluster2 :

      • sudo apt install glusterfs-client

      Vous allez bientôt monter votre volume de stockage à distance sur votre ordinateur client. Cependant, avant de pouvoir le faire, vous devez créer un point de montage. Traditionnellement, cela se fait dans le répertoire /mnt, mais vous pouvez l’utiliser n’importe où.

      Pour plus de simplicité, créez un répertoire nommé /storage-pool sur votre machine cliente pour servir de point de montage. Ce nom de répertoire commence par une barre (/) oblique qui le place dans le répertoire racine, vous devrez donc le créer avec des privilèges sudo :

      Vous pouvez maintenant monter le volume distant. Cependant, consultez d’abord la syntaxe de la commande mount que vous utiliserez pour le faire :

      sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point
      

      mount est un utilitaire que l’on trouve dans plusieurs systèmes d’exploitation de type Unix. Il est utilisé pour monter des systèmes de fichiers — n’importe quoi depuis des périphériques de stockage externes, comme les cartes SD ou les clés USB, à du stockage connecté comme dans le cas de ce tutoriel — sur des répertoires du système de fichiers existant de la machine. La syntaxe de la commande mount que vous utiliserez comprend l’option -t, qui nécessite trois arguments : le type de système de fichiers à monter, le périphérique où le système de fichiers à monter peut être trouvé, et le répertoire sur le client où vous allez monter le volume.

      Notez que dans cet exemple, l’argument périphérique pointe vers un nom d’hôte suivi de deux points et ensuite le nom du volume. GlusterFS extrait les répertoires de stockage réels sur chaque hôte, ce qui signifie que cette commande ne cherche pas à monter le répertoire /gluster-storage, mais plutôt le volume volume1.

      Notez également que vous n’avez à spécifier qu’un seul membre du cluster de stockage. Cela peut être n’importe quel nœud, puisque le service GlusterFS les traite comme une seule machine.

      Exécutez la commande suivante sur votre machine cliente (gluster2) pour monter le volume sur le répertoire /storage-pool que vous avez créé :

      • sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool

      Ensuite, exécutez la commande df. Cela affichera la quantité d’espace disque disponible pour les systèmes de fichiers auxquels l’utilisateur qui l’invoque a accès :

      Cette commande montrera que le volume GlusterFS est monté au bon endroit :

      Output

      Filesystem 1K-blocks Used Available Use% Mounted on . . . gluster0.example.com:/volume1 50633164 1938032 48695132 4% /storage-pool

      Vous pouvez maintenant passer au test pour vérifier que toutes les données que vous écrivez sur le volume de votre client sont répliquées sur les nœuds de votre serveur, comme prévu.

      Étape 6 — Tester les fonctionnalités de redondance

      Maintenant que vous avez mis en place votre client pour utiliser votre pool de stockage et votre volume, vous pouvez tester sa fonctionnalité.

      Sur votre machine cliente (gluster2), naviguez jusqu’au point de montage que vous avez défini à l’étape précédente :

      Ensuite, créez quelques fichiers de test. La commande suivante crée dix fichiers vides séparés dans votre pool de stockage :

      • sudo touch file_{0..9}.test

      Si vous examinez les répertoires de stockage que vous avez définis précédemment sur chaque hôte de stockage, vous découvrirez que tous ces fichiers sont présents sur chaque système.

      Sur gluster0 :

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      De même, sur gluster1 :

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Comme ces sorties le montrent, les fichiers test que vous avez ajoutés au client ont également été écrits sur vos deux nœuds.

      S’il arrive jamais un moment où l’un des nœuds de votre cluster de stockage est hors service, il pourrait se désynchroniser avec le pool de stockage si des modifications sont apportées au système de fichiers. En effectuant une opération en lecture sur le point de montage du client après la remise en ligne du nœud, ce dernier sera avisé de récupérer les fichiers manquants :

      Maintenant que vous avez vérifié que votre volume de stockage est correctement monté et qu’il peut reproduire des données sur les deux machines du cluster, vous pouvez verrouiller l’accès au pool de stockage.

      Étape 7 — Restriction des fonctionnalités de redondance

      À ce stade, n’importe quel ordinateur peut se connecter à votre volume de stockage sans aucune restriction. Vous pouvez changer cela en réglant l’option auth.allow, qui définit les adresses IP de tous les clients qui devraient avoir accès au volume.

      Si vous utilisez la configuration /etc/hosts, les noms que vous avez définis pour chaque serveur ne seront pas acheminés correctement. Vous devez utiliser une adresse IP statique à la place. En revanche, si vous utilisez des enregistrements DNS, le nom de domaine que vous avez configuré fonctionnera ici.

      Sur l’un ou l’autre de vos nœuds de stockage (gluster0 ou gluster1), exécutez la commande suivante :

      • sudo gluster volume set volume1 auth.allow gluster2_ip_address

      Si la commande se termine avec succès, elle renverra cette sortie :

      Output

      volume set: success

      Si vous avez besoin de supprimer la restriction à n’importe quel moment, vous pouvez saisir :

      • sudo gluster volume set volume1 auth.allow *

      Cela permettra de se connecter à nouveau depuis n’importe quelle machine. C’est n’est pas sûr, mais peut être utile pour les problèmes de débogage.

      Si vous avez plusieurs clients, vous pouvez spécifier leurs adresses IP ou leurs noms de domaine en même temps (selon que vous utilisez /etc/hosts ou la résolution de noms d’hôtes DNS), séparés par des virgules :

      • sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

      Votre pool de stockage est maintenant configuré, sécurisé, et prêt à être utilisé. Ensuite, vous allez apprendre quelques commandes qui vous aideront à obtenir des informations sur l’état de votre pool de stockage.

      Étape 8 — Obtenir des informations sur votre pool de stockage avec des commandes GlusterFS

      Lorsque vous commencez à changer certains des paramètres de votre stockage GlusterFS, vous pouvez être perdus concernant quelles options sont disponibles, quels volumes sont actifs, et quels nœuds sont associés à chaque volume.

      Plusieurs commandes différentes sont disponibles sur vos nœuds pour récupérer ces données et interagir avec votre pool de stockage.

      Si vous souhaitez des informations sur chacun de vos volumes, exécutez la commande gluster volume info :

      Output

      Volume Name: volume1 Type: Replicate Volume ID: a1e03075-a223-43ab-a0f6-612585940b0c Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster0.example.com:/gluster-storage Brick2: gluster1.example.com:/gluster-storage Options Reconfigured: auth.allow: gluster2_ip_address transport.address-family: inet storage.fips-mode-rchecksum: on nfs.disable: on performance.client-io-threads: off

      De même, pour obtenir des informations sur tous les pairs auxquels ce nœud est connecté, vous pouvez saisir :

      Number of Peers: 1
      
      Hostname: gluster0.example.com
      Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9
      State: Peer in Cluster (Connected)
      

      Si vous souhaitez des informations détaillées sur la performance de chaque nœud, vous pouvez établir le profile d’un volume en saisissant :

      • sudo gluster volume profile volume_name start

      Lorsque cette commande est terminée, vous pouvez obtenir les informations recueillies en saisissant :

      • sudo gluster volume profile volume_name info

      Output

      Brick: gluster0.example.com:/gluster-storage -------------------------------------------- Cumulative Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes Interval 0 Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes . . .

      Comme indiqué précédemment, pour obtenir la liste de tous les composants associés à GlusterFS fonctionnant sur chacun de vos nœuds, exécutez la commande gluster volume status :

      • sudo gluster volume status

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040 Self-heal Daemon on localhost N/A N/A Y 19061 Self-heal Daemon on gluster0.example.com N/A N/A Y 19836 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Si vous comptez administrer vos volumes de stockage GlusterFS, il peut être judicieux de vous rendre dans la console GlusterFS. Cela vous permettra d’interagir avec votre environnement GlusterFS sans avoir besoin de saisir sudo gluster avant toute saisie :

      Cela vous donnera une invite où vous pouvez saisir vos commandes. help en est une bonne pour vous orienter :

      Output

      peer help - display help for peer commands volume help - display help for volume commands volume bitrot help - display help for volume bitrot commands volume quota help - display help for volume quota commands snapshot help - display help for snapshot commands global help - list global commands

      Lorsque vous avez terminé, exécutez exit pour quitter la console Gluster :

      Avec cela, vous êtes prêt à commencer à intégrer GlusterFS à votre prochaine application.

      Conclusion

      En suivant ce tutoriel, vous disposez d’un système de stockage redondant qui vous permettra d’écrire simultanément sur deux serveurs distincts. Cela peut être utile pour un certain nombre d’applications et peut garantir la disponibilité de vos données même en cas de panne d’un serveur.



      Source link

      Como criar uma pool de armazenamento com redundância usando o GlusterFS no Ubuntu 20.04


      Existe uma versão anterior deste tutorial, escrita por Justin Ellingwood.

      Introdução

      Ao armazenar dados críticos, ter um ponto único de falha é bastante arriscado. Embora muitos bancos de dados e outros softwares permitam que você distribua dados no contexto de um único aplicativo, outros sistemas podem operar no nível de sistema de arquivos para garantir que os dados sejam copiados para outro local sempre que eles são escritos para o disco.

      O GlusterFS é um sistema de arquivos de armazenamento conectado à rede que lhe permite agrupar recursos de armazenamento de várias máquinas. Desta forma, isso permite que você trate vários dispositivos de armazenamento que são distribuídos entre vários computadores como uma unidade única e mais poderosa. O GlusterFS também lhe dá a liberdade de criar diferentes tipos de configurações de armazenamento, muitas das quais são similares em funcionamento aos níveis RAID. Por exemplo, você pode distribuir os dados em diferentes nós no cluster, ou implementar redundância para uma melhor disponibilidade de dados.

      Objetivos

      Neste guia, você irá criar uma matriz de armazenamento em clusters redundante, também conhecida como um sistema de arquivos distribuído ou, como ela está referida na documentação do GlusterFS, uma Trusted Storage Pool (pool de armazenamento confiável). Isso irá proporcionar funcionalidades semelhantes a uma configuração RAID espelhada pela rede: cada servidor independente irá conter sua própria cópia dos dados, permitindo que suas aplicações acessem qualquer cópia, ajudando assim a distribuir sua carga de leitura.

      Esse cluster do GlusterFS redundante consistirá em dois servidores do Ubuntu 20.04. Isso irá agir de maneira semelhante a um servidor NAS com RAID espelhado. Então, você irá acessar o cluster a partir de um terceiro servidor Ubuntu 20.04 configurado para funcionar como um cliente do GlusterFS.

      Quando você adiciona dados a um volume do GlusterFS, esses dados são sincronizados para todas as máquinas na pool de armazenamento onde o volume está hospedado. Este tráfego entre nós não é criptografado por padrão, o que significa que há um risco dele ser interceptado por agentes maliciosos.

      Por isso, se você vai usar o GlusterFS na produção, é recomendado que você execute-o em uma rede isolada. Por exemplo, você pode configurá-lo para executar em uma *Virtual Private Cloud *(VPC) ou com um VPN em funcionamento entre cada um dos nós.

      Se você planeja implantar o GlusterFS na DigitalOcean, você pode configurá-lo em uma rede isolada adicionando sua infraestrutura de servidor a uma Virtual Private Network da Digital Ocean. Para obter detalhes sobre como configurar isso, consulte nossa documentação de produtos VPC.

      Pré-requisitos

      Para seguir este tutorial, você precisará de três servidores executando o Ubuntu 20.04. Cada servidor deve ter um usuário não-root com privilégios administrativos e um firewall configurado com o UFW. Para configurar isso, siga nosso guia de configuração inicial de servidor para o Ubuntu 20.04.

      Note: Como mencionado na seção de Objetivos, este tutorial irá guiá-lo para configurar dois dos seus servidores Ubuntu para que atuem como servidores em sua pool de armazenamento e o servidor restante para agir como um cliente que você usará para acessar esses nós.

      Para maior clareza, este tutorial irá se referir a essas máquinas com os seguintes nomes de host:

      Hostname Papel na pool de armazenamento
      gluster0 Servidor
      gluster1 Servidor
      gluster2 Cliente

      Os comandos que devem ser executados em gluster0 ou gluster1 terão fundo em azul e vermelho, respectivamente:

      Os comandos que só devem ser executados no cliente (gluster2) terão um fundo verde:

      Os comandos que podem ou devem ser executados em mais de uma máquina terão um fundo cinza:

      Passo 1 — Configurando a resolução de DNS em cada máquina

      Configurar algum tipo de resolução de nome de host entre cada computador pode ajudar na gestão da sua pool de armazenamento do Gluster. Desta forma, sempre que precisar fazer referência a uma de suas máquinas em um comando gluster mais tarde neste tutorial, faça isso com um nome de domínio de fácil memorização ou um apelido em vez dos respectivos endereços IP.

      Se você não tiver um nome de domínio sobrando ou se você quiser configurar algo rapidamente, você pode editar o arquivo /etc/hosts em cada computador como alternativa. Este é um arquivo especial em máquinas Linux, onde é possível configurar o sistema de forma estática para atribuir todos os nomes de host contidos no arquivo para endereços IP estáticos.

      Note: Se você quiser configurar seus servidores para se autenticarem com um domínio que você possua, será necessário primeiro obter um nome de domínio de registrador de domínios — como o Namecheap ou o Enom — e configurar os registros de DNS apropriados.

      Depois de configurar um registro A para cada servidor, você pode seguir em frente para o Passo 2. Conforme for seguindo este guia, certifique-se de substituir o glusterN.example.com e o glusterN pelo nome de domínio que direciona para o servidor respectivo referenciado no comando de exemplo.

      Se você obteve sua infraestrutura da DigitalOcean, é possível adicionar seu nome de domínio à DigitalOcean e, em seguida, configurar um registro A único para cada um de seus servidores.

      Usando seu editor de texto preferido, abra este arquivo com privilégios de root em cada uma das suas máquinas. Aqui, usaremos o nano:

      Por padrão, o arquivo vai ficar parecido com isto aqui,com os comentários removidos:

      /etc/hosts

      127.0.1.1 hostname hostname
      127.0.0.1 localhost
      
      ::1 ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      ff02::3 ip6-allhosts
      

      Em um dos seus servidores Ubuntu, adicione o endereço IP de cada servidor seguido dos nomes que você deseja utilizar para fazer referência a eles em comandos abaixo da definição local de host.

      No exemplo a seguir, cada servidor recebe um nome de host longo que segue o padrão de glusterN.example.com e um menor que segue o padrão de glusterN. Você pode alterar as partes glusterN.example.com e glusterN de cada linha para qualquer nome — ou nomes separados por espaços únicos — que você quiser usar para acessar cada servidor. Observe, porém, que este tutorial irá usar estes exemplos a todo momento:

      Nota: Se seus servidores fazem parte de uma pool de infraestrutura Virtual Private Cloud, você deve usar o endereço IP privado de cada servidor no arquivo /etc/hosts em vez de seus IP públicos.

      /etc/hosts

      . . .
      127.0.0.1       localhost
      first_ip_address gluster0.example.com gluster0
      second_ip_address gluster1.example.com gluster1
      third_ip_address gluster2.example.com gluster2
      
      . . .
      

      Quando você terminar de adicionar estas novas linhas ao arquivo /etc/hosts de uma máquina, copie e adicione-as aos arquivos /etc/hosts em suas outras máquinas. Cada arquivo /etc/hosts deve conter as mesmas linhas, ligando os endereços IP dos seus servidores aos nomes que você selecionou.

      Salve e feche cada arquivo quando você terminar. Se usou o nano, faça isso pressionando as teclas CTRL+X, Y e depois ENTER.

      Agora que você configurou a resolução de nomes de host entre cada um dos seus servidores, será mais fácil executar comandos mais tarde enquanto configura uma pool de armazenamento e um volume. Em seguida, você vai percorrer outro passo que deve ser concluído em cada um dos seus servidores. Isto é, você irá adicionar o arquivo de pacotes pessoais (PPA) oficial do projeto Gluster a cada um dos seus três servidores Ubuntu para garantir que você possa instalar a versão mais recente do GlusterFS.

      Passo 2 — Configurando as fontes de software em cada máquina

      Embora os repositórios APT padrão do Ubuntu 20.04 contém os pacotes do GlusterFS, no momento em que este tutorial está sendo escrito, eles não são as versões mais recentes. Uma maneira de instalar a última versão estável do GlusterFS (versão 7.6 no momento em que este tutorial está sendo escrito) é adicionando o PPA oficial do projeto Gluster a cada um dos seus três servidores Ubuntu.

      Adicione o PPA para os pacotes do GlusterFS executando o seguinte comando em cada servidor:

      • sudo add-apt-repository ppa:gluster/glusterfs-7

      Pressione ENTER quando solicitado para confirmar se você realmente deseja adicionar o PPA.

      Depois de adicionar o PPA, atualize o índice de pacotes local de cada servidor. Isso fará com que cada servidor reconheça os novos pacotes disponíveis:

      Depois de adicionar o PPA oficial do projeto Gluster a cada servidor e atualizar o índice de pacotes local, você está pronto para instalar os pacotes do GlusterFS necessários. No entanto, como duas de suas três máquinas irão atuar como servidores Gluster e a outra irá agir como cliente, há dois procedimentos de instalação e configuração separados. Primeiro, você irá instalar e configurar os componentes do servidor.

      Passo 3 — Instalando componentes do servidor e criando uma pool de armazenamento confiável

      Uma pool de armazenamento é qualquer quantidade de capacidade de armazenamento agregada a partir de mais de uma fonte de armazenamento. Neste passo, você irá configurar dois dos seus servidores — o gluster0 e o gluster1 — como os componentes do cluster.

      Em ambos o gluster0 e o gluster1, instale o pacote de servidor do GlusterFS digitando:

      • sudo apt install glusterfs-server

      Quando solicitado, pressione Y e então ENTER para confirmar a instalação.

      O processo de instalação configura automaticamente o GlusterFS para ser executado como um serviço do systemd. No entanto, ele não inicializa automaticamente o serviço ou o habilita para ser executado na inicialização do sistema.

      Para iniciar o glusterd, o serviço do GlusterFS, execute o seguinte comando systemctl start em ambos o gluster0 e gluster1:

      • sudo systemctl start glusterd.service

      Então, execute o seguinte comando em ambos os servidores. Isso permitirá que o serviço seja iniciado sempre que o servidor for inicializado:

      • sudo systemctl enable glusterd.service

      Depois disso, você pode verificar o status do serviço em ambos os servidores:

      • sudo systemctl status glusterd.service

      Se o serviço estiver em operação, você receberá um resultado parecido com este:

      Output

      ● glusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago Docs: man:glusterd(8) Main PID: 14742 (glusterd) Tasks: 9 (limit: 2362) CGroup: /system.slice/glusterd.service └─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

      Supondo que você tenha seguido o guia de configuração inicial do servidor pré-requisito, você terá configurado um firewall com o UFW em cada uma das suas máquinas. Por isso, é necessário abrir o firewall em cada nó antes de estabelecer comunicações entre eles e criar uma pool de armazenamento.

      O daemon do Gluster usa a porta 24007, então será necessário permitir que cada nó tenha acesso a essa porta através do firewall de cada um dos nós em sua pool de armazenamento. Para fazer isso, execute o seguinte comando no gluster0. Lembre-se de alterar gluster1_ip_address para o endereço IP do gluster1:

      • sudo ufw allow from gluster1_ip_address to any port 24007

      E execute o seguinte comando no gluster1. Novamente, certifique-se de alterar gluster0_ip_address para o endereço IP do gluster0:

      • sudo ufw allow from gluster0_ip_address to any port 24007

      Também será necessário permitir que sua máquina cliente (gluster2) tenha acesso a esta porta. Caso contrário, você encontrará problemas mais tarde quando for tentar montar o volume. Execute o seguinte comando tanto no gluster0 quanto no gluster1 para abrir esta porta para a sua máquina cliente:

      • sudo ufw allow from gluster2_ip_address to any port 24007

      Então, para garantir que nenhuma outra máquina seja capaz de acessar a porta do Gluster em ambos os servidores, adicione a seguinte regra ampla deny ao gluster0 e ao gluster1:

      Agora, você está pronto para estabelecer uma comunicação entre o gluster0 e o gluster1. Para fazer isso, você precisará executar o comando gluster peer probe em um dos seus nós. Não importa qual nó você use, mas o seguinte exemplo mostra o comando sendo executado no gluster0:

      • sudo gluster peer probe gluster1

      Essencialmente, este comando diz ao gluster0 para confiar no gluster1 e registrá-lo como parte de sua pool de armazenamento. Se a investigação for bem-sucedida, ela irá retornar o seguinte resultado:

      Output

      peer probe: success

      Você pode verificar se os nós estão se comunicando a qualquer momento, executando o comando gluster peer status em cada um dos dois. Neste exemplo, ele está sendo executado no gluster1:

      Se você executar este comando do gluster1, ele irá mostrar um resultado desta forma:

      Output

      Number of Peers: 1 Hostname: gluster0.example.com Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be State: Peer in Cluster (Connected)

      Neste momento, seus dois servidores estão se comunicando e prontos para criar volumes de armazenamento um com o outro.

      Passo 4 — Criando um volume de armazenamento

      Lembre-se que o objetivo principal deste tutorial é criar uma pool de armazenamento redundante. Para este fim, você irá configurar um volume com funcionalidade de réplica. Ele permitirá que você mantenha várias cópias dos seus dados e impedirá que seu cluster tenha um ponto único de falha.

      Para criar um volume, você irá usar o comando gluster volume create com esta sintaxe geral:

      sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force
      

      Veja o que os argumentos e opções do comando gluster volume create significam:

      • volume_name: Este é o nome que você irá usar para se referir ao volume depois de ele ser criado. O comando de exemplo a seguir cria um volume chamado volume1.
      • replica number_of_servers: Após o nome do volume, você pode definir que tipo de volume você deseja criar. Lembre-se que o objetivo deste tutorial é criar uma pool de armazenamento redundante, então vamos usar o tipo de volume replica. Isso requer um argumento que indique para quantos servidores os dados do volume serão replicados (2, no caso deste tutorial).
      • domain1.com:/… e domain2.com:/…: Eles definem a localização das máquinas e do diretório do bricks — o termo do GlusterFS para sua unidade básica de armazenamento, que inclui todos os diretórios em todas as máquinas que sirvam como parte ou uma cópia de um volume maior — que formarão o volume1. O exemplo a seguir irá criar um diretório chamado gluster-storage no diretório root de ambos os servidores.
      • force: Essa opção irá sobrescrever quaisquer avisos ou opções que de outra forma apareceriam e interromperiam a criação do volume.

      Seguindo as convenções estabelecidas anteriormente neste tutorial, você pode executar este comando para criar um volume. Observe que pode executá-lo tanto a partir do gluster0 quanto do gluster1:

      • sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force

      Se o volume for criado com sucesso, você receberá o seguinte resultado:

      Output

      volume create: volume1: success: please start the volume to access data

      Neste momento, seu volume foi criado, mas ele ainda não está ativo. Você pode iniciar o volume e torná-lo disponível para uso executando o seguinte comando novamente a partir de um dos seus servidores do Gluster:

      • sudo gluster volume start volume1

      Você receberá este resultado se o volume for iniciado corretamente:

      Output

      volume start: volume1: success

      Em seguida, verifique se o volume está online. Execute o seguinte comando a partir de um dos seus nós:

      • sudo gluster volume status

      Isso irá retornar um resultado semelhante a este:

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028 Self-heal Daemon on localhost N/A N/A Y 19049 Self-heal Daemon on gluster0.example.com N/A N/A Y 18822 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Com base neste resultado, os bricks em ambos os servidores estão online.

      Como um passo final para configurar seu volume, você precisará abrir o firewall em ambos os servidores para que sua máquina cliente seja capaz de se conectar e montar o volume. De acordo com o resultado amostral do comando anterior, o volume1 está em execução na porta 49152 em ambas as máquinas. Esta é a porta padrão do GlusterFS para seu volume inicial, e o próximo volume que você criar irá usar a porta 49153, então 49154 e assim por diante.

      Execute o seguinte comando em ambos o gluster0 e o gluster1 para permitir que o gluster2 tenha acesso a esta porta através dos seus respectivos firewalls:

      • sudo ufw allow from gluster2_ip_address to any port 49152

      Então, para uma camada adicional de segurança, adicione outra regra ampla deny para a porta do volume tanto no gluster0 quanto no gluster1. Isso irá garantir que nenhuma máquina que não seja o seu cliente possa acessar o volume em ambos os servidores:

      Agora que seu volume está em operação, você pode configurar sua máquina cliente e começar a usá-la remotamente.

      Passo 5 — Instalando e configurando componentes do cliente

      Seu volume agora está configurado e disponível para uso pela sua máquina cliente. Apesar disso, antes de começar, você precisa instalar o pacote glusterfs-client a partir do PPA que você configurou no Passo 1 na sua máquina cliente. As dependências deste pacote incluem algumas das bibliotecas comuns e módulos de tradutor do GlusterFS, além das ferramentas FUSE necessárias para que ele funcione.

      Execute o seguinte comando no gluster2:

      • sudo apt install glusterfs-client

      Você irá montar seu volume de armazenamento remoto em seu computador cliente em breve. Antes que possa fazer isso, no entanto, você precisa criar um ponto de montagem. Tradicionalmente, ele está localizado no diretório /mnt, mas qualquer lugar que seja conveniente pode ser usado.

      Para simplificar, crie um diretório chamado /storage-pool em sua máquina cliente para servir como o ponto de montagem. Este nome de diretório começa com uma barra (/) que o coloca no diretório root. Sendo assim, você precisará criá-lo com privilégios sudo:

      Agora, você pode montar o volume remoto. Antes disso, porém, dê uma olhada na sintaxe do comando mount que você irá usar para isso.

      sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point
      

      O mount é um utilitário encontrado em muitos sistemas operacionais semelhantes ao Unix. Ele é usado para montar sistemas de arquivos — qualquer coisa desde dispositivos de armazenamento externo, como cartões SD ou pendrives, até armazenamento ligado à rede como no caso deste tutorial — em diretórios no sistema de arquivos existente da máquina. A sintaxe do comando mount que você irá usar inclui a opção -t, que requer três argumentos: o tipo do sistema de arquivos a ser montado, o dispositivo onde o sistema de arquivos a ser montado pode ser encontrado, e o diretório no cliente onde você irá montar o volume.

      Observe que neste exemplo de sintaxe, o argumento do dispositivo aponta para um nome de host seguido por dois pontos e depois o nome do volume. O GlusterFS abstrai os diretórios de armazenamento reais em cada host, o que significa que este comando não procura montar o diretório /gluster-storage, mas sim o volume volume1.

      Também observe que você só precisa especificar um membro do cluster de armazenamento. Isso pode ser qualquer um dos nós, pois o serviço do GlusterFS os trata como uma máquina.

      Execute o seguinte comando em sua máquina cliente (gluster2) para montar o volume no diretório /storage-pool que você criou:

      • sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool

      Depois disso, execute o comando df. Isso irá exibir a quantidade de espaço em disco disponível para sistemas de arquivos aos quais o usuário que o invocou tem acesso:

      Este comando irá mostrar que o volume do GlusterFS está montado na localização correta:

      Output

      Filesystem 1K-blocks Used Available Use% Mounted on . . . gluster0.example.com:/volume1 50633164 1938032 48695132 4% /storage-pool

      Agora, teste se todos os dados que você escreve no volume no seu cliente são replicados para os nós do servidor como esperado.

      Passo 6 — Testando recursos de redundância

      Agora que você configurou seu cliente para usar sua pool de armazenamento e volume, você pode testar sua funcionalidade.

      Em sua máquina cliente (gluster2), navegue até o ponto de montagem que você definiu no passo anterior:

      Em seguida, crie alguns arquivos de teste. O comando a seguir cria dez arquivos vazios separados em sua pool de armazenamento:

      • sudo touch file_{0..9}.test

      Se você examinar os diretórios de armazenamento definidos anteriormente em cada host de armazenamento, você irá descobrir que todos os arquivos estão presentes em cada sistema.

      No gluster0:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Da mesma forma, no gluster1:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Como estes resultados mostram, os arquivos de teste que você adicionou ao cliente também foram escritos em ambos os seus nós.

      Se um dos nós em seu cluster de armazenamento estiver desligado em algum momento, eles podem perder a sincronia com o pool de armazenamento, caso haja alterações feitas no sistema de arquivos. Fazer uma operação de leitura no ponto de montagem do cliente depois que o nó voltar a ficar online irá alertar o nó para obter qualquer arquivo em falta:

      Agora que verificou que seu volume de armazenamento está montado corretamente e pode replicar dados para ambas as máquinas no cluster, você pode bloquear o acesso à pool de armazenamento.

      Passo 7 — Restringindo recursos de redundância

      Neste momento, qualquer computador pode se conectar ao seu volume de armazenamento sem nenhuma restrição. Você pode mudar isso alterando a opção auth.allow que define os endereços IP de quais clientes têm acesso ao volume.

      Se estiver usando a configuração do /etc/hosts, os nomes que você configurou para cada servidor não serão encaminhados corretamente. Você deve usar um endereço IP estático disso.ao invés disso. Por outro lado, se você estiver usando registros DNS, o nome de domínio que você configurou irá funcionar aqui.

      Em um dos seus nós de armazenamento (gluster0 ou gluster1), execute o seguinte comando:

      • sudo gluster volume set volume1 auth.allow gluster2_ip_address

      Se o comando terminar com sucesso, ele irá retornar este resultado:

      Output

      volume set: success

      Se precisar remover a restrição a qualquer momento, você pode digitar:

      • sudo gluster volume set volume1 auth.allow *

      Isso permitirá as conexões de qualquer máquina novamente. Isso é inseguro, mas pode ser útil para depurar problemas.

      Se você tiver vários clientes, pode especificar os endereços IP ou nomes de domínio deles ao mesmo tempo (dependendo se estiver usando a resolução /etc/hosts ou a resolução de nomes de host DNS), separados por vírgulas:

      • sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

      Seu pool de armazenamento agora está configurado, seguro e pronto para uso. Em seguida, você irá aprender alguns comandos que lhe ajudarão a obter informações sobre o status da sua pool de armazenamento.

      Quando começar a alterar algumas das configurações para seu armazenamento do GlusterFS, você pode se confundir com as opções disponíveis, quais volumes estão ativos e quais nós estão associados a cada volume.

      Há vários comandos diferentes que estão disponíveis em seus nós para recuperar esses dados e interagir com sua pool de armazenamento.

      Se você quiser informações sobre cada um dos seus volumes, execute o comando gluster volume info:

      Output

      Volume Name: volume1 Type: Replicate Volume ID: a1e03075-a223-43ab-a0f6-612585940b0c Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster0.example.com:/gluster-storage Brick2: gluster1.example.com:/gluster-storage Options Reconfigured: auth.allow: gluster2_ip_address transport.address-family: inet storage.fips-mode-rchecksum: on nfs.disable: on performance.client-io-threads: off

      Da mesma forma, para obter informações sobre quaisquer pares aos quais este nó esteja conectado, você pode digitar:

      Number of Peers: 1
      
      Hostname: gluster0.example.com
      Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9
      State: Peer in Cluster (Connected)
      

      Se quiser informações detalhadas sobre como cada nó está desempenhando, faça um perfil de volume digitando:

      • sudo gluster volume profile volume_name start

      Quando este comando for concluído, obtenha as informações que foram reunidas digitando:

      • sudo gluster volume profile volume_name info

      Output

      Brick: gluster0.example.com:/gluster-storage -------------------------------------------- Cumulative Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes Interval 0 Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes . . .

      Como mostrado anteriormente, para uma lista de todos os componentes associados ao GlusterFS em execução em cada um dos seus nós, execute o comando gluster volume status:

      • sudo gluster volume status

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040 Self-heal Daemon on localhost N/A N/A Y 19061 Self-heal Daemon on gluster0.example.com N/A N/A Y 19836 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Se você estiver administrando seus volumes de armazenamento do GlusterFS, pode ser uma boa ideia adentrar-se no console do GlusterFS. Isso permitirá que você interaja com seu ambiente do GlusterFS sem precisar digitar sudo gluster antes de tudo:

      Isso lhe dará um prompt onde você pode digitar seus comandos. O help é um bom recurso para se orientar:

      Output

      peer help - display help for peer commands volume help - display help for volume commands volume bitrot help - display help for volume bitrot commands volume quota help - display help for volume quota commands snapshot help - display help for snapshot commands global help - list global commands

      Quando você terminar, execute exit para sair do console do Gluster:

      Com isso, você está pronto para começar a integrar o GlusterFS com seu próximo aplicativo.

      Conclusão

      Após completar este tutorial, você tem agora um sistema de armazenamento redundante que lhe permitirá escrever em dois servidores separados simultaneamente. Isso pode ser útil para uma série de aplicativos e pode garantir que seus dados estejam disponíveis mesmo quando um servidor cair.



      Source link

      How To Create a Redundant Storage Pool Using GlusterFS on Ubuntu 18.04


      An earlier version of this tutorial was written by Justin Ellingwood.

      Introduction

      When storing any critical data, having a single point of failure is very risky. While many databases and other software allow you to spread data out in the context of a single application, other systems can operate on the filesystem level to ensure that data is copied to another location whenever it’s written to disk.

      GlusterFS is a network-attached storage filesystem that allows you to pool storage resources of multiple machines. In turn, this lets you treat multiple storage devices that are distributed among many computers as a single, more powerful unit. GlusterFS also gives you the freedom to create different kinds of storage configurations, many of which are functionally similar to RAID levels. For instance, you can stripe data across different nodes in the cluster, or you can implement redundancy for better data availability.

      Goals

      In this guide, you will create a redundant clustered storage array, also known as a distributed file system or, as it’s referred to in the GlusterFS documentation, a Trusted Storage Pool. This will provide functionality similar to a mirrored RAID configuration over the network: each independent server will contain its own copy of the data, allowing your applications to access either copy, thereby helping distribute your read load.

      This redundant GlusterFS cluster will consist of two Ubuntu 18.04 servers. This will act similar to an NAS server with mirrored RAID. You’ll then access the cluster from a third Ubuntu 18.04 server configured to function as a GlusterFS client.

      A Note About Running GlusterFS Securely

      When you add data to a GlusterFS volume, that data gets synced to every machine in the storage pool where the volume is hosted. This traffic between nodes isn’t encrypted by default, meaning there’s a risk it could be intercepted by malicious actors.

      For this reason, if you’re going to use GlusterFS in production, it’s recommended that you run it on an isolated network. For example, you could set it up to run in a Virtual Private Cloud (VPC) or with a VPN running between each of the nodes.

      If you plan to deploy GlusterFS on DigitalOcean, you can set it up in an isolated network by adding your server infrastructure to a DigitalOcean Virtual Private Cloud. For details on how to set this up, see our VPC product documentation.

      Prerequisites

      To follow this tutorial, you will need three servers running Ubuntu 18.04. Each server should have a non-root user with administrative privileges, and a firewall configured with UFW. To set this up, follow our initial server setup guide for Ubuntu 18.04.

      Note: As mentioned in the Goals section, this tutorial will walk you through configuring two of your Ubuntu servers to act as servers in your storage pool and the remaining one to act as a client which you’ll use to access these nodes.

      For clarity, this tutorial will refer to these machines with the following hostnames:

      Hostname Role in Storage Pool
      gluster0 Server
      gluster1 Server
      gluster2 Client

      Commands that should be run on either gluster0 or gluster1 will have blue and red backgrounds, respectively:

      Commands that should only be run on the client (gluster2) will have a green background:

      Commands that can or should be run on more than one machine will have a gray background:

      Step 1 — Configuring DNS Resolution on Each Machine

      Setting up some kind of hostname resolution between each computer can help with managing your Gluster storage pool. This way, whenever you have to reference one of your machines in a gluster command later in this tutorial, you can do so with an easy-to-remember domain name or even a nickname instead of their respective IP addresses.

      If you do not have a spare domain name, or if you just want to set up something quickly, you can instead edit the /etc/hosts file on each computer. This is a special file on Linux machines where you can statically configure the system to resolve any hostnames contained in the file to static IP addresses.

      Note: If you’d like to configure your servers to authenticate with a domain that you own, you’ll first need to obtain a domain name from a domain registrar — like Namecheap or Enom — and configure the appropriate DNS records.

      Once you’ve configured an A record for each server, you can jump ahead to Step 2. As you follow this guide, make sure that you replace glusterN.example.com and glusterN with the domain name that resolves to the respective server referenced in the example command.

      If you obtained your infrastructure from DigitalOcean, you could add your domain name to DigitalOcean then set up a unique A record for each of your servers.

      Using your preferred text editor, open this file with root privileges on each of your machines. Here, we’ll use nano:

      By default, the file will look something like this with comments removed:

      /etc/hosts

      127.0.1.1 hostname hostname
      127.0.0.1 localhost
      
      ::1 ip6-localhost ip6-loopback
      fe00::0 ip6-localnet
      ff00::0 ip6-mcastprefix
      ff02::1 ip6-allnodes
      ff02::2 ip6-allrouters
      ff02::3 ip6-allhosts
      

      On one of your Ubuntu servers, add each server’s IP address followed by any names you wish to use to reference them in commands below the local host definition.

      In the following example, each server is given a long hostname that aligns with glusterN.example.com and a short one that aligns with glusterN. You can change the glusterN.example.com and glusterN portions of each line to whatever name — or names separated by single spaces — you would like to use to access each server. Note, though, that this tutorial will use these examples throughout:

      Note: If your servers are part of a Virtual Private Cloud infrastructure pool, you should use each server’s private IP address in the /etc/hosts file rather than their public IPs.

      /etc/hosts

      . . .
      127.0.0.1       localhost
      first_ip_address gluster0.example.com gluster0
      second_ip_address gluster1.example.com gluster1
      third_ip_address gluster2.example.com gluster2
      
      . . .
      

      When you are finished adding these new lines to the /etc/hosts file of one machine, copy and add them to the /etc/hosts files on your other machines. Each /etc/hosts file should contain the same lines, linking your servers’ IP addresses to the names you’ve selected.

      Save and close each file when you are finished. If you used nano, do so by pressing CTRL + X, Y, and then ENTER.

      Now that you’ve configured hostname resolution between each of your servers, it will be easier to run commands later on as you set up a storage pool and volume. Next, you’ll go through another step that must be completed on each of your servers. Namely, you’ll add the Gluster project’s official personal package archive (PPA) to each of your three Ubuntu servers to ensure that you can install the latest version of GlusterFS.

      Step 2 — Setting Up Software Sources on Each Machine

      Although the default Ubuntu 18.04 APT repositories contain GlusterFS packages, they are fairly out-of-date. One way to install the latest stable version of GlusterFS (version 7 as of this writing) is to add the Gluster project’s official PPA to each of your three Ubuntu servers.

      First, update the local package index on each of your servers:

      Then install the software-properties-common package on each machine. This package will allow you to manage PPAs with greater flexibility:

      • sudo apt install software-properties-common

      Once the PPA tools are installed, add the PPA for the GlusterFS packages by running the following command on each server:

      • sudo add-apt-repository ppa:gluster/glusterfs-7

      Press ENTER when prompted to confirm that you actually want to add the PPA.

      After adding the PPA, refresh each server’s local package index. This will make each server aware of the new packages available:

      After adding the Gluster project’s official PPA to each server and updating the local package index, you’re ready to install the necessary GlusterFS packages. However, because two of your three machines will act as Gluster servers and the other will act as a client, there are two separate installation and configuration procedures. First, you’ll install and set up the server components.

      Step 3 — Installing Server Components and Creating a Trusted Storage Pool

      A storage pool is any amount of storage capacity aggregated from more than one storage resource. In this step, you will configure two of your servers — gluster0 and gluster1 — as the cluster components.

      On both gluster0 and gluster1, install the GlusterFS server package by typing:

      • sudo apt install glusterfs-server

      When prompted, press Y and then ENTER to confirm the installation.

      At this point, both gluster0 and gluster1 have GlusterFS installed and the glusterd service should be running. You can test this by running following command on each server:

      • sudo systemctl status glusterd.service

      If the service is up and running, you’ll receive output like this:

      Output

      ● glusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/lib/systemd/system/glusterd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-06-02 21:32:21 UTC; 32s ago Docs: man:glusterd(8) Main PID: 14742 (glusterd) Tasks: 9 (limit: 2362) CGroup: /system.slice/glusterd.service └─14742 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO

      Assuming you followed the prerequisite initial server setup guide, you will have set up a firewall with UFW on each of your machines. Because of this, you’ll need to open up the firewall on each node before you can establish communications between them and create a storage pool.

      The Gluster daemon uses port 24007, so you’ll need to allow each node access to that port through the firewall of each other node in your storage pool. To do so, run the following command on gluster0. Remember to change gluster1_ip_address to gluster1’s IP address:

      • sudo ufw allow from gluster1_ip_address to any port 24007

      And run the following command on gluster1. Again, be sure to change gluster0_ip_address to gluster0’s IP address:

      • sudo ufw allow from gluster0_ip_address to any port 24007

      You’ll also need to allow your client machine (gluster2) access to this port. Otherwise, you’ll run into issues later on when you try to mount the volume. Run the following command on both gluster0 and gluster1 to open up this port to your client machine:

      • sudo ufw allow from gluster2_ip_address to any port 24007

      Then, to ensure that no other machines are able to access Gluster’s port on either server, add the following blanket deny rule to both gluster0 and gluster1:

      Next, you’ll need to establish communication between gluster0 and gluster1.

      To do so, you’ll need to run the gluster peer probe command on one of your nodes. It doesn’t matter which node you use, but the following example shows the command being run on gluster0:

      • sudo gluster peer probe gluster1

      Essentially, this command tells gluster0 to trust gluster1 and register it as part of its storage pool. If the probe is successful, it will return the following output:

      Output

      peer probe: success

      You can check that the nodes are communicating at any time by running the gluster peer status command on either one. In this example, it’s run on gluster1:

      If you run this command from gluster1, it will show output like this:

      Output

      Number of Peers: 1 Hostname: gluster0.example.com Uuid: a3fae496-c4eb-4b20-9ed2-7840230407be State: Peer in Cluster (Connected)

      At this point, your two servers are communicating and ready to create storage volumes with each other.

      Step 4 — Creating a Storage Volume

      Recall that the primary goal of this tutorial is to create a redundant storage pool. To this end you’ll set up a volume with replica functionality, allowing you to keep multiple copies of your data and prevent your cluster from having a single point of failure.

      To create a volume, you’ll use the gluster volume create command with this general syntax:

      sudo gluster volume create volume_name replica number_of_servers domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory force
      

      Here’s what this gluster volume create command’s arguments and options mean:

      • volume_name: This is the name you’ll use to refer to the volume after it’s created. The following example command creates a volume named volume1.
      • replica number_of_servers: Following the volume name, you can define what type of volume you want to create. Recall that the goal of this tutorial is to create a redundant storage pool, so we’ll use the replica volume type. This requires an argument indicating how many servers the volume’s data will be replicated to (2 in the case of this tutorial).
      • domain1.com:/… and domain2.com:/…: These define the machines and directory location of the bricks — GlusterFS’s term for its basic unit of storage, which includes any directories on any machines that serve as a part or a copy of a larger volume — that will make up volume1. The following example will create a directory named gluster-storage in the root directory of both servers.
      • force: This option will override any warnings or options that would otherwise come up and halt the volume’s creation.

      Following the conventions established earlier in this tutorial, you can run this command to create a volume. Note that you can run it from either gluster0 or gluster1:

      • sudo gluster volume create volume1 replica 2 gluster0.example.com:/gluster-storage gluster1.example.com:/gluster-storage force

      If the volume was created successfully, you’ll receive the following output:

      Output

      volume create: volume1: success: please start the volume to access data

      At this point, your volume has been created, but it’s not yet active. You can start the volume and make it available for use by running the following command, again from either of your Gluster servers:

      • sudo gluster volume start volume1

      You’ll receive this output if the volume was started correctly:

      Output

      volume start: volume1: success

      Next, check that the volume is online. Run the following command from either one of your nodes:

      • sudo gluster volume status

      This will return output similar to this:

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 18801 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19028 Self-heal Daemon on localhost N/A N/A Y 19049 Self-heal Daemon on gluster0.example.com N/A N/A Y 18822 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      Based on this output, the bricks on both servers are online.

      As a final step to configuring your volume, you’ll need to open up the firewall on both servers so your client machine will be able to connect to and mount the volume. Based on the previous command’s sample output, volume1 is running on port 49152 on both machines. This is GlusterFS’s default port for its initial volume, and the next volume you create will use port 49153, then 49154, and so on.

      Run the following command on both gluster0 and gluster1 to allow gluster2 access to this port through each one’s respective firewall:

      • sudo ufw allow from gluster2_ip_address to any port 49152

      Then, for an added layer of security, add another blanket deny rule for the volume’s port on both gluster0 and gluster1 This will ensure that no machines other than your client can access the volume on either server:

      Now that your volume is up and running, you can set up your client machine and begin using it remotely.

      Step 5 — Installing and Configuring Client Components

      Now that your volume has been configured, it’s available for use by your client machine.

      Before you begin though, you need to install the glusterfs-client package from the PPA you set up in Step 1. This package’s dependencies include some of GlusterFS’s common libraries and translator modules and the FUSE tools required for it to work.

      Run the following command on gluster2:

      • sudo apt install glusterfs-client

      You will mount your remote storage volume on your client computer shortly. Before you can do that, though, you need to create a mount point. Traditionally, this is in the /mnt directory, but anywhere convenient can be used.

      For simplicity’s sake, create a directory named /storage-pool on your client machine to serve as the mount point. This directory name starts with a forward slash (/) which places it in the root directory, so you’ll need to create it with sudo privileges:

      Now you can mount the remote volume. Before that, though, take a look at the syntax of the mount command you’ll use to do so:

      sudo mount -t glusterfs domain1.com:volume_name /path/to/mount/point
      

      mount is a utility found in many Unix-like operating systems. It’s used to mount filesystems — anything from external storage devices, like SD cards or USB sticks, to network-attached storage as in the case of this tutorial — to directories on the machine’s existing filesystem. The mount command syntax you’ll use includes the -t option, which requires three arguments: the type of filesystem to be mounted, the device where the filesystem to mount can be found, and the directory on the client where you’ll mount the volume.

      Notice that in this example syntax, the device argument points to a hostname followed by a colon and then the volume’s name. GlusterFS abstracts the actual storage directories on each host, meaning that this command doesn’t look to mount the /gluster-storage directory, but instead the volume1 volume.

      Also notice that you only have to specify one member of the storage cluster. This can be either node, since the GlusterFS service treats them as one machine.

      Run the following command on your client machine (gluster2) to mount the volume to the /storage-pool directory you created:

      • sudo mount -t glusterfs gluster0.example.com:/volume1 /storage-pool

      Following that, run the df command. This will display the amount of available disk space for file systems to which the user invoking it has access:

      This command will show that the GlusterFS volume is mounted at the correct location:

      Output

      Filesystem 1K-blocks Used Available Use% Mounted on . . . gluster0.example.com:/volume1 50633164 1747596 48885568 4% /storage-pool

      Now, you can move on to testing that any data you write to the volume on your client gets replicated to your server nodes as expected.

      Step 6 — Testing Redundancy Features

      Now that you’ve set up your client to use your storage pool and volume, you can test its functionality.

      On your client machine (gluster2), navigate to the mount point that you defined in the previous step:

      Then create a few test files. The following command creates ten separate empty files in your storage pool:

      • sudo touch file_{0..9}.test

      If you examine the storage directories you defined earlier on each storage host, you’ll discover that all of these files are present on each system.

      On gluster0:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      Likewise, on gluster1:

      Output

      file_0.test file_2.test file_4.test file_6.test file_8.test file_1.test file_3.test file_5.test file_7.test file_9.test

      As these outputs show, the test files that you added to the client were also written to both of your nodes.

      If there is ever a point when one of the nodes in your storage cluster is down, it could fall out of sync with the storage pool if any changes are made to the filesystem. Doing a read operation on the client mount point after the node comes back online will alert the node to get any missing files:

      Now that you’ve verified that your storage volume is mounted correctly and can replicate data to both machines in the cluster, you can lock down access to the storage pool.

      Step 7 — Restricting Redundancy Features

      At this point, any computer can connect to your storage volume without any restrictions. You can change this by setting the auth.allow option, which defines the IP addresses of whatever clients should have access to the volume.

      If you’re using the /etc/hosts configuration, the names you’ve set for each server will not route correctly. You must use a static IP address instead. On the other hand, if you’re using DNS records, the domain name you’ve configured will work here.

      On either one of your storage nodes (gluster0 or gluster1), run the following command:

      • sudo gluster volume set volume1 auth.allow gluster2_ip_address

      If the command completes successfully, it will return this output:

      Output

      volume set: success

      If you need to remove the restriction at any point, you can type:

      • sudo gluster volume set volume1 auth.allow *

      This will allow connections from any machine again. This is insecure, but can be useful for debugging issues.

      If you have multiple clients, you can specify their IP addresses or domain names at the same time (depending whether you are using /etc/hosts or DNS hostname resolution), separated by commas:

      • sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

      Your storage pool is now configured, secured, and ready for use. Next you’ll learn a few commands that will help you get information about the status of your storage pool.

      Step 8 — Getting Information About your Storage Pool with GlusterFS Commands

      When you begin changing some of the settings for your GlusterFS storage, you might get confused about what options you have available, which volumes are live, and which nodes are associated with each volume.

      There are a number of different commands that are available on your nodes to retrieve this data and interact with your storage pool.

      If you want information about each of your volumes, run the gluster volume info command:

      Output

      Volume Name: volume1 Type: Replicate Volume ID: 8da67ffa-b193-4973-ad92-5b7fed8d0357 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster0.example.com:/gluster-storage Brick2: gluster1.example.com:/gluster-storage Options Reconfigured: auth.allow: gluster2_ip_address transport.address-family: inet storage.fips-mode-rchecksum: on nfs.disable: on performance.client-io-threads: off

      Similarly, to get information about any peers that this node is connected to, you can type:

      Number of Peers: 1
      
      Hostname: gluster0.example.com
      Uuid: cb00a2fc-2384-41ac-b2a8-e7a1793bb5a9
      State: Peer in Cluster (Connected)
      

      If you want detailed information about how each node is performing, you can profile a volume by typing:

      • sudo gluster volume profile volume_name start

      When this command is complete, you can obtain the information that was gathered by typing:

      • sudo gluster volume profile volume_name info

      Output

      Brick: gluster0.example.com:/gluster-storage -------------------------------------------- Cumulative Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes Interval 0 Stats: %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 30 FORGET 0.00 0.00 us 0.00 us 0.00 us 36 RELEASE 0.00 0.00 us 0.00 us 0.00 us 38 RELEASEDIR Duration: 5445 seconds Data Read: 0 bytes Data Written: 0 bytes . . .

      As shown previously, for a list of all of the GlusterFS associated components running on each of your nodes, run the gluster volume status command:

      • sudo gluster volume status

      Output

      Status of volume: volume1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick gluster0.example.com:/gluster-storage 49152 0 Y 19003 Brick gluster1.example.com:/gluster-storage 49152 0 Y 19040 Self-heal Daemon on localhost N/A N/A Y 19061 Self-heal Daemon on gluster0.example.com N/A N/A Y 19836 Task Status of Volume volume1 ------------------------------------------------------------------------------ There are no active volume tasks

      If you are going to be administering your GlusterFS storage volumes, it may be a good idea to drop into the GlusterFS console. This will allow you to interact with your GlusterFS environment without needing to type sudo gluster before everything:

      This will give you a prompt where you can type your commands. help is a good one to get yourself oriented:

      Output

      peer help - display help for peer commands volume help - display help for volume commands volume bitrot help - display help for volume bitrot commands volume quota help - display help for volume quota commands snapshot help - display help for snapshot commands global help - list global commands

      When you are finished, run exit to exit the Gluster console:

      With that, you’re ready to begin integrating GlusterFS with your next application.

      Conclusion

      By completing this tutorial, you have a redundant storage system that will allow you to write to two separate servers simultaneously. This can be useful for a number of applications and can ensure that your data is available even when one server goes down.



      Source link