Dans le monde de la technologie, il est toujours crucial de garder les données hautement disponibles pour s'assurer qu'elles sont accessibles à l'application/à l'utilisateur. La haute disponibilité est obtenue ici en distribuant les données sur plusieurs volumes/nœuds.
Les machines/utilisateurs clients peuvent accéder au stockage comme au stockage local. Chaque fois que l'utilisateur crée des données sur le stockage Gluster, les données seront mises en miroir/distribuées vers d'autres nœuds de stockage.
Qu'est-ce que GlusterFS ?
GlusterFS est un système de fichiers réseau open source et évolutif adapté aux charges de travail à forte intensité de données telles que le streaming multimédia, le stockage dans le cloud et le CDN (Content Delivery Network). GlusterFS a été initialement développé par Gluster Inc, puis par Redhat, à la suite de l'acquisition.
Terminologie :
Vous trouverez ci-dessous les terminologies importantes que nous utilisons tout au long de cet article.
Brique – est le stockage de base (répertoire) sur un serveur du pool de stockage approuvé.
Volume – est une suite logique de briques.
Cluster – est un groupe d'ordinateurs liés, travaillant ensemble comme un seul ordinateur.
Système de fichiers distribué – Un système de fichiers dans lequel les données sont réparties sur plusieurs nœuds de stockage et permet aux clients d'y accéder via un réseau.
Client – est une machine qui monte le volume.
Serveur – est une machine où est hébergé le système de fichiers réel dans lequel les données seront stockées.
Répliquer – Faire plusieurs copies de données pour obtenir une redondance élevée.
Fusible – est un module de noyau chargeable qui permet aux utilisateurs non privilégiés de créer leurs propres systèmes de fichiers sans modifier le code du noyau.
glusterd – est un démon qui s'exécute sur tous les serveurs du pool de stockage approuvé.
RAID – Redundant Array of Inexpensive Disks (RAID) est une technologie qui offre une fiabilité de stockage accrue grâce à la redondance.
Volume :
Comme dit précédemment, le volume est la collection de briques, et la plupart des opérations de gluster telles que la lecture et l'écriture se produisent sur le volume. GlusterFS prend en charge différents types de volumes en fonction des besoins ; adapté à la mise à l'échelle de la taille de stockage ou à l'amélioration des performances ou aux deux.
Dans cet article, nous allons configurer le volume GlusterFS répliqué sur Ubuntu 16.04 / Debian 8. Ce guide devrait également fonctionner sur les versions précédentes d'Ubuntu telles que Ubuntu 14.04 / Ubuntu 12.04.
Volume Glusterfs répliqué est comme un RAID 1 , et le volume conserve des copies exactes des données sur toutes les briques. Vous pouvez décider du nombre de répliques lors de la création du volume, vous aurez donc besoin d'au moins deux briques pour créer un volume avec deux répliques ou trois briques pour créer un volume de 3 répliques.
Ce volume offre une meilleure fiabilité des données et une redondance des données.Pourquoi ne pas en savoir plus sur les types de volumes GlusterFS restants.
Exigences :
Ici, nous allons configurer le volume GlusterFS avec deux répliques. Assurez-vous d'avoir deux systèmes 64 bits (virtuels ou physiques) avec 1 Go de mémoire et un disque dur de rechange sur chaque système.
Nom d'hôte | Adresse IP | SE | Mémoire | Disque | Objectif |
---|---|---|---|---|---|
gluster1.itzgeek.local | 192.168.12.16 | Ubuntu 16.04 LTS | 1 Go | /dev/sdb (5 Go) | Nœud de stockage 1 |
gluster2.itzgeek.local | 192.168.12.17 | Debian 8 | 1 Go | /dev/sdb (5 Go) | Nœud de stockage 2 |
client.itzgeek.local | 192.168.12.8 | CentOS 7 / Debian | NA | NA | Ordinateur client |
Configurer DNS :
Les composants GlusterFS utilisent DNS pour les résolutions de noms, alors configurez DNS ou configurez une entrée d'hôtes. Si vous n'avez pas de DNS sur votre environnement, modifiez le fichier /etc/hosts et mettez-le à jour en conséquence.
sudo vi /etc/hosts 192.168.12.16 gluster1.itzgeek.local gluster1 192.168.12.17 gluster2.itzgeek.local gluster2 192.168.12.20 client.itzgeek.local client
Ajouter un référentiel GlusterFS :
Avant de procéder à l'installation, nous devons configurer le référentiel GlusterFS sur les deux nœuds de stockage. Suivez les instructions pour ajouter le référentiel à votre système.
Debian :
Installez le package de support pour les transactions https.
sudo apt-get install -y lsb-release sudo apt-get install -y apt-transport-https
Ajoutez la clé publique pour le dépôt GlusterFS.
wget -O - http://download.gluster.org/pub/gluster/glusterfs/LATEST/rsa.pub | sudo apt-key add - echo deb https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/$(lsb_release -sc)/apt $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/gluster.list
Ubuntu 16.04 / 14.04 :
sudo apt-get install -y software-properties-common sudo add-apt-repository ppa:gluster/glusterfs-3.8
Installez GlusterFS :
Une fois que vous avez ajouté le référentiel sur vos systèmes, nous sommes prêts à installer GlusterFS.
Mettez à jour le cache du référentiel.
sudo apt-get update
Installez le package GlusterFS à l'aide de la commande suivante.
sudo apt-get install -y glusterfs-server
Démarrez le service glusterfs-server sur tous les nœuds gluster.
sudo service glusterfs-server start
Vérifiez que le service glusterfs fonctionne correctement.
raj@gluster1:~$ sudo service glusterfs-server status ● glusterfs-server.service - LSB: GlusterFS server Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled) Active: active (running) since Sat 2016-09-24 21:47:20 IST; 1min 6s ago Docs: man:systemd-sysv-generator(8) Process: 1570 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS) Process: 1664 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=0/SUCCESS) Tasks: 7 (limit: 512) Memory: 25.5M CPU: 3.552s CGroup: /system.slice/glusterfs-server.service └─1673 /usr/sbin/glusterd -p /var/run/glusterd.pid Sep 24 21:47:16 gluster1.itzgeek.local systemd[1]: Starting LSB: GlusterFS server... Sep 24 21:47:16 gluster1.itzgeek.local glusterfs-server[1664]: * Starting glusterd service glusterd Sep 24 21:47:20 gluster1.itzgeek.local glusterfs-server[1664]: ...done. Sep 24 21:47:20 gluster1.itzgeek.local systemd[1]: Started LSB: GlusterFS server.
Configurer le pare-feu :
Vous devrez soit désactiver le pare-feu, soit configurer le pare-feu pour autoriser toutes les connexions au sein d'un cluster.
sudo iptables -I INPUT -p all -s <ip-address> -j ACCEPT
Ajouter un espace de stockage :
En supposant que vous avez un disque dur de rechange sur votre machine, /dev/sdb est celui que je vais utiliser ici pour une brique. Créez une seule partition sur le disque dur de secours illustré ci-dessous.
Vous devrez effectuer les étapes ci-dessous sur les deux nœuds.
sudo fdisk /dev/sdb
Formatez la partition créée avec le système de fichiers de votre choix.
sudo mkfs.ext4 /dev/sdb1
Montez le disque dans un répertoire appelé /data/gluster .
sudo mkdir -p /data/gluster sudo mount /dev/sdb1 /data/gluster
Ajouter une entrée à /etc/fstab pour garder le montage persistant lors du redémarrage.
echo "/dev/sdb1 /data/gluster ext4 defaults 0 0" | sudo tee --append /etc/fstab
Configurer GlusterFS sur Ubuntu 16.04 :
Avant de créer un volume, nous devons créer un pool de stockage de confiance en ajoutant gluster2.itzgeek.local . Vous pouvez exécuter les commandes de configuration GlusterFS sur n'importe quel serveur du cluster et exécutera la même commande sur tous les autres serveurs.
Ici, je vais exécuter toutes les commandes GlusterFS dans gluster1.itzgeek.local nœud.
raj@gluster1:~$ sudo gluster peer probe gluster2.itzgeek.local peer probe: success.
Vérifiez l'état du pool de stockage approuvé.
raj@gluster1:~$ sudo gluster peer status Number of Peers: 1 Hostname: gluster2.itzgeek.local Uuid: 51470928-dfa8-42e1-a221-d7bbcb8c13bd State: Peer in Cluster (Connected)
Répertorier le pool de stockage.
raj@gluster1:~$ sudo gluster pool list UUID Hostname State 51470928-dfa8-42e1-a221-d7bbcb8c13bd gluster2.itzgeek.local Connected dc7c1639-d21c-4adf-b28f-5150229e6980 localhost Connected
Configurer le volume GlusterFS :
Créez une brique (répertoire) appelée "gvol0 ” dans le système de fichiers monté sur les deux nœuds.
sudo mkdir -p /data/gluster/gvol0
Puisque nous allons utiliser le volume répliqué, créez donc le volume nommé "gvol0 ” avec deux répliques.
raj@gluster1:~$ sudo gluster volume create gvol0 replica 2 gluster1.itzgeek.local:/data/gluster/gvol0 gluster2.itzgeek.local:/data/gluster/gvol0 volume create: gvol0: success: please start the volume to access data
Démarrez le volume.
raj@gluster1:~$ sudo gluster volume start gvol0 volume start: gvol0: success
Vérifiez l'état du volume créé.
raj@gluster1:~$ sudo gluster volume info gvol0 Volume Name: gvol0 Type: Replicate Volume ID: ca102e4b-6cd1-4d9d-9c5a-03b882c76da0 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: gluster1.itzgeek.local:/data/gluster/gvol0 Brick2: gluster2.itzgeek.local:/data/gluster/gvol0 Options Reconfigured: transport.address-family: inet performance.readdir-ahead: on nfs.disable: on
Configurer le client GlusterFS :
Installez glusterfs-client package pour prendre en charge le montage des systèmes de fichiers GlusterFS. Exécutez toutes les commandes en tant que root utilisateur.
$ su - ### CentOS / RHEL ### yum install -y glusterfs-client ### Ubuntu / Debian ### apt-get install -y glusterfs-client
Créez un répertoire pour monter le système de fichiers GlusterFS.
mkdir -p /mnt/glusterfs
Maintenant, montez le système de fichiers GlusterFS sur /mnt/glusterfs en utilisant la commande suivante.
mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt/glusterfs
Vous pouvez également utiliser gluster2.itzgeek.local au lieu de gluster1.itzgeek.com dans la commande ci-dessus.
Vérifiez le système de fichiers GlusterFS monté.
[root@client ~]# df -hP /mnt/glusterfs Filesystem Size Used Avail Use% Mounted on gluster1.itzgeek.local:/gvol0 4.8G 11M 4.6G 1% /mnt/glusterfs
Vous pouvez également utiliser la commande ci-dessous pour vérifier le système de fichiers GlusterFS.
[root@client ~]# cat /proc/mounts rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=490448k,nr_inodes=122612,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0 cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0 cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0 cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0 cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0 cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0 cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0 cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0 cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0 cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0 configfs /sys/kernel/config configfs rw,relatime 0 0 /dev/mapper/centos-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0 systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0 hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0 debugfs /sys/kernel/debug debugfs rw,relatime 0 0 mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0 /dev/mapper/centos-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 /dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0 tmpfs /run/user/0 tmpfs rw,seclabel,nosuid,nodev,relatime,size=100136k,mode=700 0 0 gluster1.itzgeek.local:/gvol0 /mnt/glusterfs fuse.glusterfs rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072 0 0 fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
Ajoutez l'entrée ci-dessous à /etc/fstab pour un montage automatique lors du démarrage du système.
gluster1.itzgeek.local:/gvol0 /mnt/glusterfs glusterfs defaults,_netdev 0 0
Testez la réplication et la haute disponibilité de GlusterFS :
Côté serveur GlusterFS :
Pour vérifier la réplication, montez le volume GlusterFS créé sur le même nœud de stockage.
raj@gluster1:~$ sudo mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt raj@gluster2:~$ sudo mount -t glusterfs gluster2.itzgeek.local:/gvol0 /mnt
Données à l'intérieur de /mnt répertoire des deux nœuds sera toujours le même (réplication).
Côté client GlusterFS :
Créons quelques fichiers sur le système de fichiers monté sur le client.itzgeek.local.
touch /mnt/glusterfs/file1 touch /mnt/glusterfs/file2
Vérifiez les fichiers créés.
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2
Testez les deux nœuds GlusterFS s'ils ont les mêmes données dans /mnt .
raj@gluster1:~$ ll /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 20:52 ./ drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../ -rw-r--r-- 1 root root 0 Sep 26 20:52 file1 -rw-r--r-- 1 root root 0 Sep 26 20:52 file2 raj@gluster2:~$ ls -al /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 06:30 . drwxr-xr-x 23 root root 4096 Sep 24 08:39 .. -rw-r--r-- 1 root root 0 Sep 26 2016 file1 -rw-r--r-- 1 root root 0 Sep 26 2016 file2
Comme vous le savez, nous avons monté le volume GlusterFS à partir de gluster1.itzgeek.local sur client.itzgeek.local , il est maintenant temps de tester la haute disponibilité du volume en fermant le nœud.
raj@gluster1:~$ sudo poweroff
Testez maintenant la disponibilité des fichiers, vous verriez les fichiers que nous avons créés récemment même si le nœud est en panne.
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2Vous pouvez rencontrer une lenteur dans l'exécution des commandes sur le système de fichiers GlusterFS monté en raison du basculement de GlusterFS vers gluster2.itzgeek.local lorsque le client.itzgeek.local ne peut pas atteindre gluster1.itzgeek.local .
Créez d'autres fichiers sur le système de fichiers GlusterFS pour vérifier la réplication.
touch /mnt/glusterfs/file3 touch /mnt/glusterfs/file4
Vérifiez le nombre de fichiers.
[root@client ~]# ll /mnt/glusterfs/ total 0 -rw-r--r--. 1 root root 0 Sep 26 11:22 file1 -rw-r--r--. 1 root root 0 Sep 26 11:22 file2 -rw-r--r--. 1 root root 0 Sep 26 11:26 file3 -rw-r--r--. 1 root root 0 Sep 26 11:26 file4
Depuis le gluster1 est en panne, toutes vos données sont maintenant écrites sur gluster2.itzgeek.local en raison de la haute disponibilité. Allumez maintenant le node1 (gluster1.itzgeek.local ).
Vérifiez le /mnt du gluster1.itzgeekk.local; vous devriez voir les quatre fichiers dans le répertoire, cela confirme que la réplication fonctionne comme prévu.
raj@gluster1:~$ sudo mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt [sudo] password for raj: raj@gluster1:~$ ll /mnt/ total 12 drwxr-xr-x 4 root root 4096 Sep 26 20:59 ./ drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../ -rw-r--r-- 1 root root 0 Sep 26 20:52 file1 -rw-r--r-- 1 root root 0 Sep 26 20:52 file2 -rw-r--r-- 1 root root 0 Sep 26 20:56 file3 -rw-r--r-- 1 root root 0 Sep 26 20:56 file4
C'est tout.