Mise en place d'un volume GlusterFS

Cette page a pour but la mise en place d'un volume partagé utilisant GlusterFS.

Picasoft n'utilise plus de volume GlusterFS dans son infrastructure pour des raisons de performances. Cette page est conservée à titre de tutoriel uniquement et ne reflète pas l'état de l'infrastructure.

Ajouter un autre disque à la VM

Afin de stocker les données, nous devons créer un disque dédié au volume GlusterFS. Pour se faire, il faut aller (sur l'interface proxmox) sur la VM pour laquelle on veut ajouter un disque, puis aller dans la rubrique “Hardware” puis sélectionner l'option “Add”, en haut a gauche du cadrant. On clique dessus et on clique sur l'option “Hard disk”. On configure ce disque de telle sorte a ce qu'il ai une capacité de 15G, au format raw, avec un “storage” local (qui correspond en fait au ssd). On monte le disque dur en SATA.

Le disque devrait être bien ajouté a la liste de composants hardware de la VM. Toutefois, il apparaît en rouge. Pour qu'il soit bien pris en compte et rattaché à la VM, il est nécessaire de la relancer.

Une fois que le disque dur est bien prit en compte par la VM, il est nécessaire d'executer les commandes suivantes dans la VM:

  1. Verifier que le disque a bien été ajouté/est détectable par l'OS: $ fdisk -l
  2. On ajoute le “physical volume” avec pvcreate pour le rendre visible au niveau de LVM. Ainsi on pourra lui ajouter un volume group par dessus $ pvcreate /dev/sdb
  3. On créer un volume groupe data $ vgcreate vg01 /dev/sdb

Volume LVM

C'est ce volume qui sera ensuite partagé avec les différents serveurs sur le réseau.

$ vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg00   1   2   0 wz--n- 39,76g     0
  vg01   1   0   0 wz--n- 15,00g 15,00g

Sur la machine virtuelle, j'ai donc ajouté un nouveau disque d'une taille de 15G ici ajouté sur un groupe logique vg01. Je créé ensuite un volume logique (lv) à partir de ce vg et qui va prendre tout l'espace disponible

$ lvcreate -l 100%FREE -n data vg01

On peux maintenant formater ce disque et le monter sur la machine:

$ mkfs -t ext4 /dev/mapper/vg01-data.
$ echo "/dev/mapper/vg01-data /gluster-data ext4    defaults        0       2" >> /etc/fstab
$ mkdir /gluster-data && mount -a 

Volume GlusterFS

Une fois le volume monté, il faut maintenant créer un volume de plus haut niveau à l'aide de glusterFS. Cela permettra aux différentes machines de notre cluster d'accéder à un volume de données partagé et répliqué automatiquement entre les nœuds. Cela signifie qu'en cas de panne, le nœud restant sera toujours en mesure de fournir le service évitant ainsi l'interruption de service.

La première chose à faire et de s'assurer que les différentes machines du cluster se connaissent les unes les autres:

$ cat /etc/hosts
   127.0.0.1	localhost
   91.224.148.57   pica01 pica01.picasoft.net
   91.224.148.60   pica02 pica02.picasoft.net

Il faut ajouter les clés du repo ainsi que le repo contenant les packages

$ wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.9/rsa.pub | apt-key add -
$ echo deb http://download.gluster.org/pub/gluster/glusterfs/3.9/LATEST/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list
$ apt-get update
$ apt-get -y install glusterfs-server

Ensuite, on ajoute le second serveur à partir du premier noeud du cluster. Ici, on lance donc sur pica01

$ gluster peer probe pica02
$ gluster peer status
  Number of Peers: 1
  Hostname: pica02
  Uuid: 36530258-860b-4403-85b3-3de1fd6bb47a
  State: Peer in Cluster (Connected)
  

On peut maintenant créer un volume répliqué que l'on va configurer en mirroring afin d'avoir une copie parfaite des données entre les noeuds.

$ gluster volume create gluster-data replica 2 transport tcp pica01:/gluster-data pica02:/gluster-data force
$ gluster volume start gluster-data

Une fois le volume créé, on peut vérifier l'état de celui-ci via la commande:

$ gluster volume info
  Volume Name: gluster-data
  Type: Replicate
  Volume ID: 24ec2dcb-84fe-4981-9e01-1a5614cd209b
  Status: Started
  Snapshot Count: 0
  Number of Bricks: 1 x 2 = 2
  Transport-type: tcp
  Bricks:
  Brick1: pica01:/gluster-data
  Brick2: pica02:/gluster-data

Afin d'éviter que n'importe qui puisse accéder à notre volume et faire des écriture, on doit limiter les droits en écriture aux machines pica01/02

$ gluster volume set gluster-data auth.allow pica02

On peut maintenant ajouter une ligne au fichier fstab pour lancer le montage automatique du volume. À noter qu'il faut adapter le point de montage en fonction de la machine

$ echo "pica01:/gluster-data /DATA glusterfs defaults,_netdev 0 0" >> /etc/fstab
$ mkdir /DATA && mount -a

Pour le moment, le montage automatique au boot de la machine ne fonctionne pas. Pour palier à ce problème, j'ai ajouté les lignes suivante a la fin du fichier /etc/rc.local (avant l'instruction exit 0 bien sûr)

systemctl start glusterfs-server
mount -a

Augmentation de la taille d'un volume GlusterFS

L'augmentation de la taille d'un volume GlusterFS se fait de manière transparente en augmentant l'espace utile au niveau de lvm.

  1. Augmenter la taille du disque au niveau de l'hyperviseur. Sur Proxmox, lorsque l'on clique sur une VM puis dans la partie hardware, on peut après avoir cliqué sur un disque le resize via le menu en haut. Il faut ensuite rescanner la table de partition pour que la modification soit prise en compte sur le système d'exploitation. Un reboot permet aussi de rescanner cette table de partition. On peut vérifier l'ajout d'espace à l'aide de la commande fdisk <code>root@pica02:~# fdisk -l /dev/sdb Disque /dev/sdb : 30 GiB, 32212254720 octets, 62914560 secteurs </code>
  2. Augmenter le physical volume. Sur notre installation, un disque est dédié au glusterfs, il n'y a donc aucun problème pour augmenter la taille du physical volume associé (attention, lorsqu'un OS est sur un disque, cette opération peut mener à la corruption du système). <code> pvresize /dev/sdb root@pica02:~# pvs PV VG Fmt Attr PSize PFree /dev/sda5 vg00 lvm2 a– 39,76g 0 /dev/sdb vg01 lvm2 a– 30,00g 0 </code>
  3. Augmentation des logical volumes où XX correspond au nombre de gigaoctets à ajouter <code> lvextend -L+XXG /dev/vg01/data root@pica02:~# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root vg00 -wi-ao—- 37,90g swap vg00 -wi-ao—- 1,86g data vg01 -wi-ao—- 30,00g </code>
  4. Au niveau des volumes logiques, on voit bien le nouveau volume, mais le système de fichier ne voit pas encore tous ces nouveaux octets. On peut s'en convaincre avec un df -h. Il faut donc dire au système de fichier de prendre en compte ces nouveaux octets ajoutés. <code>resize2fs /dev/vg01/data root@pica02:~# df -h | grep data /dev/mapper/vg01-data 30G 4,2G 24G 15% /gluster-data pica02:/gluster-data 30G 4,2G 24G 15% /DATA </code>

Une fois ces opérations réalisées sur les 2 noeuds, glusterfs va augmenter automatiquement le volume disponible. On peut vérifier cela avec la commande:

gluster volume status gluster-data detail
Status of volume: gluster-data
------------------------------------------------------------------------------
Brick                : Brick pica01:/gluster-data
TCP Port             : 49152
RDMA Port            : 0
Online               : Y
Pid                  : 2699
File System          : ext4
Device               : /dev/mapper/vg01-data
Mount Options        : rw,relatime,data=ordered
Inode Size           : 256
Disk Space Free      : 25.2GB
Total Disk Space     : 29.4GB
Inode Count          : 1966080
Free Inodes          : 1881903
------------------------------------------------------------------------------
Brick                : Brick pica02:/gluster-data
TCP Port             : 49152
RDMA Port            : 0
Online               : Y
Pid                  : 2340
File System          : ext4
Device               : /dev/mapper/vg01-data
Mount Options        : rw,relatime,data=ordered
Inode Size           : 256
Disk Space Free      : 25.2GB
Total Disk Space     : 29.4GB
Inode Count          : 1966080
Free Inodes          : 1881903
  • infrastructure/installation_glusterfs.txt
  • Dernière modification: 2019/05/13 15:42
  • (modification externe)