Ldfa Posté(e) le 30 décembre 2019 Partager Posté(e) le 30 décembre 2019 Installation de GlusterFS sur 2 serveurs Proxmox Dans ce tutoriel je vais vous guider pas à pas pour ajouter la fonctionnalité de stockage distribué sur deux serveurs Proxmox. Ce tutoriel est également valable pour tout serveur sous Debian (Proxmox est une distribution Debian modifiée) ou même n’importe quelle autre distribution Linux modulo quelques ajustements. Mais comment en suis-je arrivé là ? Et bien récemment, j’ai commandé un serveur Kimsufi dans le but de pouvoir tester 2 ou 3 nouvelles technos sans encombrer un peu plus le dressing. Un aperçu de mon dressingMe retrouvant donc avec 2 serveurs Kimsufi, j’ai voulu voir si je ne pouvais pas clusteriser tout ça. Pour la partie cluster de virtualisation, malheureusement ce n’est pas possible si les deux serveurs sont dans des réseaux distincts, pour des problèmes de multicast. Une solution aurait pu être de monter un VPN entre les deux mais j’ai préféré ne pas insister et voir si je ne pouvais pas me concentrer sur un autre point : créer un cluster de stockage ! Dans les dernières versions, Proxmox VE propose directement dans la console une visualisation des volumes Ceph ainsi qu’un tutoriel pour configurer la partie serveur directement sur les hôtes de virtualisation. Sur le papier, c’était donc le mécanisme de réplication de stockage à privilégier. Cependant, dans mon cas d’un « lab » avec seulement 2 serveurs sur un WAN, ce n’était pas l’idéal : Before you start with Ceph, you need a working Proxmox VE cluster with 3 nodes (or more). Je me suis donc rabattu sur GlusterFS, qui a l’avantage d’être un peu plus simple de mise en place côté serveur même s’il n’est pas aussi bien intégré côté Proxmox. Le principe Déjà on peut commencer par la définition Wikipedia GlusterFS est un système de fichiers libre distribué en parallèle, qui permet de stocker jusqu’à plusieurs pétaoctets (10^15 octets). C’est un système de fichiers de clusters. Livré en deux parties – un serveur et un client En gros, Gluster Server se charge de faire communiquer entre eux les hôtes et on défini des « bricks » (espace de stockage sur un serveur donné) qu’on assemble entre elles pour donner un volume (espace de stockage répliqué ou non). Et Gluster Client vous permet d’accéder à un espace de fichiers qui va écrire simultanément sur l’ensemble des bricks du volume de manière transparente. Assez de théorie, maintenant, la pratique ! Prérequis Sur les 2 serveurs Proxmox, j’ai créé en préventif un Fflesystem de 5G dédié à la configuration de Gluster. Pourquoi ? Car il y a un gros risque de plantage en cas de remplissage : Note: GlusterFS stores its dynamically generated configuration files at /var/lib/glusterd. If at any point in time GlusterFS is unable to write to these files (for example, when the backing filesystem is full), it will at minimum cause erratic behavior for your system; or worse, take your system offline completely. It is advisable to create separate partitions for directories such as /var/log to ensure this does not happen. lvcreate -L 5G -n var_lib_glusterd pve Logical volume "var_lib_glusterd" created. mkfs.ext4 /dev/pve/var_lib_glusterd mkdir -p /var/lib/glusterd echo '/dev/pve/var_lib_glusterd /var/lib/glusterd ext4 defaults 1 2' >> /etc/fstab mount -a On récupère ensuite les sources sont disponibles sur le site gluster.org. Selon les distributions, la marche à suivre peut être différentes, notamment pour Ubuntu qui utilise un PPA. 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 install glusterfs-server Maintenant que le serveur est opérationnel, on créé nos bricks de 100Go sur un LV sur chaque serveur et on le monte. lvcreate -L 100G -n data_brick1 pve mkfs.xfs /dev/pve/data_brick1 mkdir -p /data/brick1 echo '/dev/pve/data_brick1 /data/brick1 xfs defaults 1 2' >> /etc/fstab mount -a && mount Vérification du service sous Proxmox (Debian) service glusterfs-server status * glusterfs-server.service - LSB: GlusterFS server Loaded: loaded (/etc/init.d/glusterfs-server) Active: active (running) since Wed 2017-02-08 23:21:00 CET; 3 days ago CGroup: /system.slice/glusterfs-server.service └─29562 /usr/sbin/glusterd -p /var/run/glusterd.pid Feb 08 23:21:00 srv2 glusterfs-server[29557]: Starting glusterd service: glusterd. Feb 08 23:21:00 srv2 systemd[1]: Started LSB: GlusterFS server. Comme les nœuds ont besoin d’échanger des informations entre eux, il va falloir ouvrir quelques ports, à savoir : 111/UDP et TCP 24007/TCP 24008/TCP PUIS, un port par brique en partant du port 49152/TCP Sous iptables ça devrait donner quelque chose comme cela iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 24007:24008 -j ACCEPT iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 49152 -j ACCEPT iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT iptables -I INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT service iptables save service iptables restart ATTENTION : J’ai lu sur plusieurs sites qu’il faut ouvrir des ports à partir de 24009 pour les bricks. Ce n’est plus vrai depuis la version 3.4 ! Si vous êtes dans ces versions plutôt ancienne, c’est effectivement le port 24009 et + qu’il faut ouvrir mais ce n’est maintenant plus le cas ! Vous aurez des problèmes difficiles à débuguer car vos noeuds serveurs dialoguerons mais les bricks d’un même volumes répliqué ne se synchroniseront pas. J’ai également lu qu’il était conseillé de s’assurer que la résolution soit toujours opérationnelle et donc de renseigner le fichier hosts mais ça, c’est à vous de voir. vi /etc/hosts On connecte maintenant les deux serveurs entre eux en exécutant cette commande que sur un des deux serveurs. gluster peer probe srv2 peer probe: success. A partir de là, le cluster est actif. On peut le vérifier avec les 2 commandes suivantes : gluster peer status Number of Peers: 1 Hostname: srv2 Uuid: aaaa-7d57-41c1-aaaa-c51f7e1c076a State: Peer in Cluster (Connected) gluster pool list UUID Hostname State aaaa-7d57-41c1-aaaa-c51f7e1c076a srv2 Connected aaaa-6a78-44ce-aaaa-2feb3cfb3627 localhost Connected Sur les deux nœuds du cluster srv1 et srv2 : mkdir -p /data/brick1/gv0 Depuis un des deux serveurs, on créé notre premier volume à partir des deux bricks de nos deux serveurs. gluster volume create gv0 replica 2 srv1:/data/brick1/gv0 srv2:/data/brick1/gv0 volume create: gv0: success: please start the volume to access data gluster volume start gv0 volume start: gv0: success On vérifie que le volume est marqué « Started » : gluster volume info Volume Name: gv0 Type: Replicate Volume ID: a3ffa060-ac5b-4b36-8b6c-8e77bad98cca Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: srv1:/data/brick1/gv0 Brick2: srv2:/data/brick1/gv0 Options Reconfigured: transport.address-family: inet performance.readdir-ahead: on nfs.disable: on A partir de là, notre volume est opérationnel est on peut commencer à le monter pour inscrire des données dedans ! Afficher des infos sur le volume Afficher des infos très précises sur les performances du volume à l’aide des commandes suivantes : root@srv2:~# gluster volume profile gv0 start Starting volume profile on gv0 has been successful root@srv2:~# gluster volume profile gv0 info Brick: srv2:/data/brick1/gv0 --------------------------------------------- Cumulative Stats: Block Size: 512b+ 65536b+ 131072b+ No. of Reads: 4 5 22 No. of Writes: 78 219 44 Block Size: 262144b+ 524288b+ 1048576b+ No. of Reads: 0 0 0 No. of Writes: 35 47 919 %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 5 RELEASE 0.00 0.00 us 0.00 us 0.00 us 442 RELEASEDIR 0.03 22.00 us 22.00 us 22.00 us 1 STATFS 0.04 32.00 us 32.00 us 32.00 us 1 GETXATTR 0.29 110.50 us 55.00 us 166.00 us 2 LOOKUP 99.64 38491.00 us 32866.00 us 44116.00 us 2 WRITE Duration: 87590 seconds Data Read: 3213312 bytes Data Written: 1033611264 bytes [...] Brick: srv1:/data/brick1/gv0 -------------------------------------------- Cumulative Stats: Block Size: 512b+ 65536b+ 131072b+ No. of Reads: 0 0 0 No. of Writes: 78 218 44 Block Size: 262144b+ 524288b+ 1048576b+ No. of Reads: 0 0 0 No. of Writes: 34 45 906 %-latency Avg-latency Min-Latency Max-Latency No. of calls Fop --------- ----------- ----------- ----------- ------------ ---- 0.00 0.00 us 0.00 us 0.00 us 5 RELEASE 0.00 0.00 us 0.00 us 0.00 us 1 RELEASEDIR 0.26 75.00 us 75.00 us 75.00 us 1 STATFS 0.35 103.00 us 103.00 us 103.00 us 1 GETXATTR 1.38 200.50 us 189.00 us 212.00 us 2 LOOKUP 98.01 14246.50 us 4943.00 us 23550.00 us 2 WRITE Duration: 87589 seconds Data Read: 0 bytes Data Written: 1018144768 bytes Je vous rassure, ici, si les performances sont catastrophiques, c’est parce que le test a été réalisé en WAN sur ma lien ADSL pour particulier. Configuration dans proxmox (partie cliente) Maintenant que la partie serveur est configurée, on doit accéder au volume répliqué via le client. En effet, c’est seulement par ce biais que l’on pourra écrire en Y sur notre volume. Ecrire directement dans le dossier d’un brick n’aura pas l’effet escompté. Depuis la console Proxmox, dans le menu « Stockage », cliquer sur « Ajouter / GlusterFS » Dans la capture suivante, vous pouvez admirer ma connexion ADSL saturée en upload par la copie d’un fichier d’une machine virtuelle depuis mon serveur dans mon dressing vers mon kimsufi. Et après vérification, on a bien le fichier de machine virtuelle des deux côtés :-). Sources Partager : Sur le même thème Afficher l’article complet Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.