LINUX:Glusterfs - Type Répliqué

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour au menu de Glusterfs - Gestion des serveurs


But

Ce second type répliqué correspond au RAID1. Les fichiers sont distribués sur les divers espaces disques individuels des machines du cluster. Chaque espace disque accueille tous les fichiers. Ils sont tous en doublons.


Notons que les commandes peuvent se faire à partir de n'importe quel serveur du cluster.


Réplication sur deux espaces disques

Ce premier exemple va créer un volume utilisant deux espaces disques individuels se trouvant sur deux machines.


Mise en place

La commande suivante crée un volume nommé "diskgfs3" sur les machines "sv1.home.dom" et "sv2.home.dom":

gluster volume create diskgfs3 replica 2 transport tcp sv1.home.dom:/disk1/glusterfs/brique3 sv2.home.dom:/disk1/glusterfs/brique3

Ici nous avons un message:


Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this. See: http://docs.gluster.org/en/latest/Administrator-Guide/Split-brain-and-ways-to-deal-with-it/.
Do you still want to continue?
 (y/n)

En effet pour une question de "split-brain" car nous sommes en réseau, il est conseillé d'avoir au moins trois "replicas". Nous confirmons.

Sur chacune de ces machines, un sous-répertoire "brique3" est créé automatiquement sous le répertoire "/disk1/glusterfs". Je conseille fortement de ne pas créer ce répertoire "brique3" au préalable. Glusterfs va lui attribuer des droits spéciaux à ne pas modifier. Et en cas de réutilisation, vous aurez des problèmes. Pour une question de clarté, nous utilisons la même arborescence de répertoires.

Il y a une contrainte; si nous demandons deux "replica", il nous faut deux espaces disques individuels.

Le schéma ci-dessous illustre la réplication de 8 fichiers. Les huit sont placés sur la première machine et sur la seconde.

LINUX:Glusterfs4.pdf

On remarque tout de suite que comme le système RAID1, si un disque entre en erreur, on ne perd pas ces fichiers.


Maintenant que ce volume est créé, il faut le démarrer pour le rendre accessible grâce à la commande suivante:

gluster volume start diskgfs3


Processus

En listant la liste des processus, on remarque que de nouveaux sont lancés.

ps axf | grep glusterfs

qui donne sur la machine "sv1.home.dom":


  9716 ?        SLsl   0:00 /usr/sbin/glusterfsd -s sv1.home.dom --volfile-id diskgfs3.sv1.home.dom.disk1-glusterfs-brique3 -p /var/run/gluster/vols/diskgfs3/sv1.home.dom-disk1-glusterfs-brique3.pid -S /var/run/gluster/59cfac74a3c16f5f.socket --brick-name /disk1/glusterfs/brique3 -l /var/log/glusterfs/bricks/disk1-glusterfs-brique3.log --xlator-option *-posix.glusterd-uuid=1ea22555-2c1b-40a9-8183-020b621c6d06 --process-name brick --brick-port 57603 --xlator-option diskgfs3-server.listen-port=57603
  9748 ?        SLsl   0:00 /usr/sbin/glusterfs -s localhost --volfile-id shd/diskgfs3 -p /var/run/gluster/shd/diskgfs3/diskgfs3-shd.pid -l /var/log/glusterfs/glustershd.log -S /var/run/gluster/432231f833cff617.socket --xlator-option *replicate*.node-uuid=1ea22555-2c1b-40a9-8183-020b621c6d06 --process-name glustershd --client-pid=-6

On trouve deux processus: "glustersfd" et "glusterfs". On les retrouvera aussi sur l'autre serveur participant à ce volume "sv2.home.dom".


Mais sur les machines ne participant pas à ce volume, on trouve aussi un processus: "glusterfs"; ici sur "sv3.home.dom":


  5984 ?        SLsl   0:00 /usr/sbin/glusterfs -s localhost --volfile-id shd/diskgfs3 -p /var/run/gluster/shd/diskgfs3/diskgfs3-shd.pid -l /var/log/glusterfs/glustershd.log -S /var/run/gluster/89c1a2ecea747dc4.socket --xlator-option *replicate*.node-uuid=27bd8184-14c8-4176-987d-db0a03fc6993 --process-name glustershd --client-pid=-6


Connexions réseaux

Au niveau réseau, un nouveau port est à l'écoute lancé par ce processus "glusterfsd" et des interconnexions sont faites avec toutes les autres machines du cluster. D'autres interconnexions sont faites entre les machines concernées par le volume; les processus "glustersfd" et "glusterfs" et le service "glusterd.service" sont concernés:

netstat -natp | grep gluster

qui donne par différence sur la machine "sv1.home.dom" pour le premier volume:


tcp        0      0 0.0.0.0:57603           0.0.0.0:*               LISTEN      9716/glusterfsd
tcp        0      0 192.168.1.71:57603      192.168.1.71:49145      ESTABLISHED 9716/glusterfsd
tcp        0      0 192.168.1.71:57603      192.168.1.72:49145      ESTABLISHED 9716/glusterfsd
tcp        0      0 192.168.1.71:57603      192.168.1.73:49146      ESTABLISHED 9716/glusterfsd
tcp        0      0 192.168.1.71:57603      192.168.1.74:49146      ESTABLISHED 9716/glusterfsd
tcp        0      0 192.168.1.71:57603      192.168.1.75:49146      ESTABLISHED 9716/glusterfsd
tcp        0      0 192.168.1.71:57603      192.168.1.76:49150      ESTABLISHED 9716/glusterfsd
  
tcp        0      0 127.0.0.1:24007         127.0.0.1:49145         ESTABLISHED 1215/glusterd
tcp        0      0 127.0.0.1:49145         127.0.0.1:24007         ESTABLISHED 9748/glusterfs
tcp        0      0 192.168.1.71:24007      192.168.1.71:49146      ESTABLISHED 1215/glusterd
tcp        0      0 192.168.1.71:49141      192.168.1.72:53502      ESTABLISHED 9748/glusterfs
tcp        0      0 192.168.1.71:49145      192.168.1.71:57603      ESTABLISHED 9748/glusterfs
tcp        0      0 192.168.1.71:49146      192.168.1.71:24007      ESTABLISHED 9716/glusterfsd

Cette situation est identique sur l'autre machine impliquée dans ce volume; "sv2.home.dom".


Mais sur les machines ne participant pas à ce volume, on trouve aussi des interconnexions; ici sur "sv3.home.dom":


tcp        0      0 127.0.0.1:24007         127.0.0.1:49146         ESTABLISHED 801/glusterd
tcp        0      0 127.0.0.1:49146         127.0.0.1:24007         ESTABLISHED 5984/glusterfs
tcp        0      0 192.168.1.73:49143      192.168.1.72:53502      ESTABLISHED 5984/glusterfs
tcp        0      0 192.168.1.73:49146      192.168.1.71:57603      ESTABLISHED 5984/glusterfs

Il faudra en tenir compte dans le Firewall. Mais ces nouveaux ports TCP sont très aléatoires.


Statut

Les informations ci-dessus peuvent être obtenues grâce à la commande suivante pour le volume "diskgfs3":

gluster volume status diskgfs3

qui donne:


Status of volume: diskgfs3
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick sv1.home.dom:/disk1/glusterfs/brique3 57603     0          Y       9716
Brick sv2.home.dom:/disk1/glusterfs/brique3 53502     0          Y       5538
Self-heal Daemon on localhost               N/A       N/A        Y       9748
Self-heal Daemon on sv4.home.dom            N/A       N/A        Y       5377
Self-heal Daemon on sv3.home.dom            N/A       N/A        Y       5984
Self-heal Daemon on sv2.home.dom            N/A       N/A        Y       5570
Self-heal Daemon on sv5.home.dom            N/A       N/A        Y       4212
Self-heal Daemon on sv6.home.dom            N/A       N/A        Y       9397
  
Task Status of Volume diskgfs3
------------------------------------------------------------------------------
There are no active volume tasks


D'autres informations peuvent être obtenues:

gluster volume info diskgfs3

qui donne:


Volume Name: diskgfs3
Type: Distributed-Replicate
Volume ID: 157d711a-fa5b-4b36-816e-a519aab633c0
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: sv1.home.dom:/disk1/glusterfs/brique3
Brick2: sv2.home.dom:/disk1/glusterfs/brique3
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

On y remarque le type et le nombre de briques. Le type est combiné Distribué et Répliqué mais la partie Distribuée est simple ("1") donc non utilisée.


Réplication sur trois espaces disques

Ce second exemple va créer un volume utilisant trois espaces disques individuels se trouvant sur trois machines.


Mise en place

La commande suivante crée un volume nommé "diskgfs4" sur les machines "sv3.home.dom", "sv4.home.dom" et "sv5.home.dom":

gluster volume create diskgfs4 replica 3 transport tcp sv3.home.dom:/disk1/glusterfs/brique4 sv4.home.dom:/disk1/glusterfs/brique4 \
                                                       sv5.home.dom:/disk1/glusterfs/brique4 

Sur chacune de ces machines, un sous-répertoire "brique4" est créé automatiquement sous le répertoire "/disk1/glusterfs".

Le schéma ci-dessous illustre la répartition de 8 fichiers. Les huit sont placés sur chacune des trois machines.

LINUX:Glusterfs5.pdf

On remarque tout de suite que comme le système RAID1, si un disque entre en erreur, on ne perd pas ces fichiers. Nous n'avons plus le message rencontré précédemment concernant le "split-brain".


Maintenant que ce volume est créé, il faut le démarrer pour le rendre accessible grâce à la commande suivante:

gluster volume start diskgfs4


Processus

En listant la liste des processus, on remarque que de nouveaux sont lancés.

ps axf | grep glusterfs

qui donne sur la machine "sv3.home.dom":


  6072 ?        SLsl   0:00 /usr/sbin/glusterfsd -s sv3.home.dom --volfile-id diskgfs4.sv3.home.dom.disk1-glusterfs-brique4 -p /var/run/gluster/vols/diskgfs4/sv3.home.dom-disk1-glusterfs-brique4.pid -S /var/run/gluster/6ce5fcbef1e29ecc.socket --brick-name /disk1/glusterfs/brique4 -l /var/log/glusterfs/bricks/disk1-glusterfs-brique4.log --xlator-option *-posix.glusterd-uuid=27bd8184-14c8-4176-987d-db0a03fc6993 --process-name brick --brick-port 59730 --xlator-option diskgfs4-server.listen-port=59730
  6104 ?        SLsl   0:00 /usr/sbin/glusterfs -s localhost --volfile-id shd/diskgfs4 -p /var/run/gluster/shd/diskgfs4/diskgfs4-shd.pid -l /var/log/glusterfs/glustershd.log -S /var/run/gluster/9f7e18bc15b075d5.socket --xlator-option *replicate*.node-uuid=27bd8184-14c8-4176-987d-db0a03fc6993 --process-name glustershd --client-pid=-6

On trouve deux processus: "glustersfd" et "glusterfs". On les retrouvera aussi sur les autres serveurs participant à ce volume "sv4.home.dom" et "sv5.home.dom".


Mais sur les machines ne participant pas à ce volume, on trouve aussi un processus: "glusterfs"; ici sur "sv1.home.dom":


  9869 ?        SLsl   0:00 /usr/sbin/glusterfs -s localhost --volfile-id shd/diskgfs4 -p /var/run/gluster/shd/diskgfs4/diskgfs4-shd.pid -l /var/log/glusterfs/glustershd.log -S /var/run/gluster/c6fefa88d78ddd6f.socket --xlator-option *replicate*.node-uuid=1ea22555-2c1b-40a9-8183-020b621c6d06 --process-name glustershd --client-pid=-6


Connexions réseaux

Au niveau réseau, un nouveau port est à l'écoute lancé par ce processus "glusterfsd" et des interconnexions sont faites avec toutes les autres machines du cluster. D'autres interconnexions sont faites entre les machines concernées par le volume; les processus "glustersfd" et "glusterfs" et le service "glusterd.service" sont concernés:

netstat -natp | grep gluster

qui donne par différence sur la machine "sv3.home.dom" pour le premier volume:


tcp        0      0 0.0.0.0:59730           0.0.0.0:*               LISTEN      6072/glusterfsd
tcp        0      0 192.168.1.73:59730      192.168.1.71:49139      ESTABLISHED 6072/glusterfsd
tcp        0      0 192.168.1.73:59730      192.168.1.72:49146      ESTABLISHED 6072/glusterfsd
tcp        0      0 192.168.1.73:59730      192.168.1.73:49145      ESTABLISHED 6072/glusterfsd
tcp        0      0 192.168.1.73:59730      192.168.1.74:49145      ESTABLISHED 6072/glusterfsd
tcp        0      0 192.168.1.73:59730      192.168.1.75:49145      ESTABLISHED 6072/glusterfsd
tcp        0      0 192.168.1.73:59730      192.168.1.76:49150      ESTABLISHED 6072/glusterfsd
  
tcp        0      0 127.0.0.1:24007         127.0.0.1:49145         ESTABLISHED 801/glusterd
tcp        0      0 127.0.0.1:49145         127.0.0.1:24007         ESTABLISHED 6104/glusterfs
tcp        0      0 192.168.1.73:24007      192.168.1.73:49146      ESTABLISHED 801/glusterd
tcp        0      0 192.168.1.73:49140      192.168.1.70:49338      ESTABLISHED 6104/glusterfs
tcp        0      0 192.168.1.73:49141      192.168.1.74:55571      ESTABLISHED 6104/glusterfs
tcp        0      0 192.168.1.73:49145      192.168.1.73:59730      ESTABLISHED 6104/glusterfs
tcp        0      0 192.168.1.73:49146      192.168.1.73:24007      ESTABLISHED 6072/glusterfsd

Cette situation est identique sur les autres machines impliquées dans ce volume; "sv4.home.dom" et "sv5.home.dom".


Mais sur les machines ne participant pas à ce volume, on trouve aussi des interconnexions; ici sur "sv1.home.dom":


tcp        0      0 127.0.0.1:24007         127.0.0.1:49146         ESTABLISHED 1215/glusterd
tcp        0      0 127.0.0.1:49146         127.0.0.1:24007         ESTABLISHED 9869/glusterfs
tcp        0      0 192.168.1.71:49138      192.168.1.70:49338      ESTABLISHED 9869/glusterfs
tcp        0      0 192.168.1.71:49139      192.168.1.73:59730      ESTABLISHED 9869/glusterfs
tcp        0      0 192.168.1.71:49140      192.168.1.74:55571      ESTABLISHED 9869/glusterfs

Il faudra en tenir compte dans le Firewall. Mais ces nouveaux ports TCP sont très aléatoires.


Statut

Les informations ci-dessus peuvent être obtenues grâce à la commande suivante pour le volume "diskgfs4":

gluster volume status diskgfs4

qui donne:


Status of volume: diskgfs4
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick sv3.home.dom:/disk1/glusterfs/brique4 59730     0          Y       6072
Brick sv4.home.dom:/disk1/glusterfs/brique4 55571     0          Y       5427
Brick sv5.home.dom:/disk1/glusterfs/brique4 49338     0          Y       4261
Self-heal Daemon on localhost               N/A       N/A        Y       6104
Self-heal Daemon on sv1.home.dom            N/A       N/A        Y       9869
Self-heal Daemon on sv2.home.dom            N/A       N/A        Y       5626
Self-heal Daemon on sv4.home.dom            N/A       N/A        Y       5459
Self-heal Daemon on sv5.home.dom            N/A       N/A        Y       4293
Self-heal Daemon on sv6.home.dom            N/A       N/A        Y       9536
  
Task Status of Volume diskgfs4
------------------------------------------------------------------------------
There are no active volume tasks


D'autres informations peuvent être obtenues:

gluster volume info diskgfs4

qui donne:


Volume Name: diskgfs4
Type: Distributed-Replicate
Volume ID: 4803549d-9008-4c3f-80a6-35aa45ff07be
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: sv3.home.dom:/disk1/glusterfs/brique4
Brick2: sv4.home.dom:/disk1/glusterfs/brique4
Brick3: sv5.home.dom:/disk1/glusterfs/brique4
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

On y remarque le type et le nombre de briques. Le type est combiné Distribué et Répliqué mais la partie Distribuée est simple ("1") donc non utilisée.


Modifications

Ces configurations sont dynamiquement modifiables grâce à un ensemble d'autres commandes. Il est facilement possible d'agrandir un volume; on agrandit ainsi l'espace disque global. Dans le cas d'un rétrécissement ou d'une réparation, il faut prendre des précautions pour ne pas perdre des données. Nous n'allons pas aborder ce dernier point.


Extension

Supposons que l'on désire ajouter au volume "diskgfs3" un "replica" en l'étendant sur la machine "sv3.home.dom", nous exécutons la commande suivante:

gluster volume add-brick diskgfs3 replica 3 sv3.home.dom:/disk1/glusterfs/brique3

On remarque la modification du nombre de "replica" qui de 2 passe à 3.

Maintenant voyons le statut:

gluster volume status diskgfs3

qui donne:


Status of volume: diskgfs3
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick sv1.home.dom:/disk1/glusterfs/brique3 60029     0          Y       2134
Brick sv2.home.dom:/disk1/glusterfs/brique3 56421     0          Y       11319
Brick sv3.home.dom:/disk1/glusterfs/brique3 49403     0          Y       12480
Self-heal Daemon on localhost               N/A       N/A        Y       2614
Self-heal Daemon on sv4.home.dom            N/A       N/A        Y       11215
Self-heal Daemon on sv2.home.dom            N/A       N/A        Y       11463
Self-heal Daemon on sv5.home.dom            N/A       N/A        Y       12078
Self-heal Daemon on sv3.home.dom            N/A       N/A        Y       12512
Self-heal Daemon on sv6.home.dom            N/A       N/A        Y       3880
  
Task Status of Volume diskgfs3
------------------------------------------------------------------------------
There are no active volume tasks


Et:

gluster volume info diskgfs3

qui donne:


Volume Name: diskgfs3
Type: Distributed-Replicate
Volume ID: 5f91ce00-14f4-43a7-89bc-d25c6e7896d2
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: sv1.home.dom:/disk1/glusterfs/brique3
Brick2: sv2.home.dom:/disk1/glusterfs/brique3
Brick3: sv3.home.dom:/disk1/glusterfs/brique3
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off


Notons qu'ici, il n'est pas nécessaire d'utiliser le re-balancement qui est réservée à la distribution car elle est unique. La réplication sur la nouvelle brique se fait automatiquement.




retour au menu de Glusterfs - Gestion des serveurs