README.md 10 KB
Newer Older
1

2 3
Découverte de GlusterFS
=======================
4

5
Sur les 3 vieux ordis de mon labo pourri, que j'avais préparés lors de ma [découverte d'Ansible](), j'ai poursuivi l'installation de Glusterfs « à la main » à partir de l'étape 5 du [guide d'installation de base](https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/).
6

7 8
Copie de fichiers juste pour voir
---------------------------------
9

10 11
Et sur les trois vieux PCs du labo-pourri, ça copie ferme avec leurs petites cartes 100Mb. Et tout de suite, qui dit envois de fichiers **vers** le GlusterFS, dit que la vitesse du réseau est évidemment divisée par deux puisque ce qui arrive sur un d'entre eux doit aussi aller vers les autres.

12
![TPPP - Trois Petits Pcs Pourris](./assets/Glusterfs_Copie_Plein_De_Fichiers.png)
13 14 15 16 17 18 19 20 21 22

On voit en bas à droite que hpc01 reçoit à ±6000 et envoit à du ±12000 vers les deux autres nœuds.

Avec des cartes Gigabit
-----------------------

Ben oui, parce que l'idée étant quand même de pouvoi compter sur le fait que les disques, même vieux et sur du SATA vieux aussi, peuvent écrire à du 60MB/s.

J'ai donc mis des cartes PCI et modifé le fichier de configuration `/etc/network/interface` pour remplacer la carte 100Mbit/s `enp63s0` par la nouvelle 1Gbit/s `enp7s4` et redémarré les ordis.

23
![TPPP - Trois Petits Pcs Pourris - En Gigabit !](./assets/Rsync_Depuis_Un_Autre_Ordi.png)
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

On voit en haut à gauche que hpc01 reçoit à ±25000 et envoit à du ±50000 vers les deux autres nœuds, ce qui est quand même un peu mieux.

Ça se passe comment la réplication ?
------------------------------------

Selon le [guide d'installation de base](https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/) on a en fait créé un groupe de volumes `gv0` de **réplication** `replica` entre les trois nœuds (`peer`).

```
gluster volume create gv0 replica 3 hpc011:/data/brick1/gv0 hpc012:/data/brick1/gv0 hpc03:/data/brick1/gv0
gluster volume start gv0
```

Noubliez pas que le volume fraichement créé sur l'un des nœud, **devra être monté**, peut-importe sur quel ordinateur. Dans mon cas, c'est dans le dossier `/mnt` sur l'ordinateur `hpc01`.

```
mount -t glusterfs hpc01:/gv0 /mnt
```

![TPPP - Trois Petits Pcs Pourris - En réplication !](assets/Creation_1000_Fichiers_Sur_Hpc01_Vue_En_Nombre_De_Fichiers_Repliques.png)

On voit quelques différences en listant toutes les secondes le dossier `/data/brick1/gv0/files` des trois ordinateurs. Mais au final, les 1000 fichiers seront bien là sure chaque nœuds.

La commande pour créer les 1000 fichiers c'est celle-ci.  Il y a certainement d'autres moyens, mais ça fonctionne bien.

```
for i in `seq -w 1 100`; do cp -rp /var/log/messages /mnt/files/copy-test-$i; done
```
52

53 54 55 56 57 58 59
Évidemment, si on supprime ces fichiers depuis notre point de montage, alors il sont supprimés aussi sur les deux autres nœuds.

Et si on débranche pendant le transfert ?
-----------------------------------------

Je fais un `rsync` d'un fichiers de ±9Gb. _(Oui je sais, c'est moche, le fichier s'appelle windows.ova)_.

60
![TPPP - Trois Petits Pcs Pourris - Copient un gros fichier](./assets/Rsync_Depuis_Un_Autre_Ordi_Plus_Rapide.png)
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81

On voit que ça copie avec de jolis graphiques tout linéaires.

Allez hop ! Je débranche hpc02 et hpc02 durant ±30 secondes à tour de rôle pendant la copie.

![TPPP - Trois Petits Pcs Pourris - Sont déconnectés pendant plusiers secondes](./assets/Enlever_Cable_Du_Hpc02_et_3_Quelques_Secondes.png)

On voit qu'il y a des interruptions dans les graphes mais la copie continue.

![TPPP - Trois Petits Pcs Pourris - Les trois nœuds se parlent à nouveau](./assets/Situation_Suite_Debranchement_Hpc02_Et_3.png)

On voit que tout le monde (les trois nœuds) se reparlent et que la copie continue.  Les graphes sont plus découpés qu'au tout début, probablement parce que GlusterFS _s'informe sur la situation_ entre ses trois nœuds.

![TPPP - Trois Petits Pcs Pourris - Le rsync du gros fichier est fini](./assets/Situation_Suite_Debranchement_Hpc02_Et_3_Rsync_Fini.png)
![TPPP - Trois Petits Pcs Pourris - Et les nœuds pourssuivent leur synchronisation](./assets/Situation_Suite_Debranchement_Hpc02_Et_3_Rsync_Fini_2_et_3_Se_Parlent.png)
![TPPP - Trois Petits Pcs Pourris - Et le premier nœuds est au repos](./assets/Situation_Suite_Debranchement_Hpc02_Et_3_Rsync_Fini_1_et_3_Se_Parlent.png)

Au final je regarde si leur [somme md5](https://fr.wikipedia.org/wiki/Somme_de_contr%C3%B4le#Somme_MD5) sur les trois nœuds est la même.

![TPPP - Trois Petits Pcs Pourris - Et la somme de contrôle md5 est la même](./assets/Situation_Suite_Debranchement_Hpc02_Et_md5sum_identique.png)

82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
Comment se passe la distribution ?
----------------------------------

Dans le [guide d'installation de base](https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/) utilisé au début de cette découverte, on crée un premier volume `gv0` en mode réplication.

Créons maintenant sur ces même nœuds, un volume **distribué**.  Parce que oui, GlusterFS étant un logiciel qui permet de gérer des volumes, il est donc possible d'en faire plusieurs, même sur les même machines.

```
root@hpc03:/# gluster volume create stripe0 hpc01:/data/brick1/stripe0 hpc02:/data/brick1/stripe0 hpc03:/data/brick1/stripe0
root@hpc03:/# gluster volume start stripe0
```

En gros, sur les trois nœuds, il y a un disque SATA, formaté en btrfs et monté sur `/data/brick1`.  Et dans ce point de montage il y a maintenant deux « dossiers », un `/data/brick1/gv0` utilisé par le premier volume en mode **réplication** et un `/data/brick1/stripe0` utilisé par le nouveau volume en mode **distribution**.

On peut voir que les deux volumes fonctionnent et ont bien démarrés.

```
root@hpc03:/# gluster volume info

Volume Name: gv0
Type: Replicate
Volume ID: 21d72d95-0c71-4845-ae86-9afbfbaf8bf3
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: hpc01:/data/brick1/gv0
Brick2: hpc02:/data/brick1/gv0
Brick3: hpc03:/data/brick1/gv0
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on

Volume Name: stripe0
Type: Distribute
Volume ID: 2b2b8e4b-e591-4ba3-b26b-98f3f13a67ca
Status: Started
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: hpc01:/data/brick1/stripe0
Brick2: hpc02:/data/brick1/stripe0
Brick3: hpc03:/data/brick1/stripe0
Options Reconfigured:
nfs.disable: on
performance.readdir-ahead: on
transport.address-family: inet

```

Notez le détail non négligeable que c'est depuis un autre nœud `hpc03` que le nouveau volume a été créé, démarré et les infos demandées ! Parce que ça aussi c'est possible.

Et maintenant créons 300 fichiers sur ce volume `stripe0`.

```
for i in `seq -w 1 300`; do cp -rp /var/log/messages /mnt/copy-test-$i; done
```

![TPPP - Trois Petits Pcs Pourris - 300 fichiers distriués](./assets/Creation_300_Fichiers_Sur_Volume_Distribue.png)

On voit que `hpc02` en aura pris plus que les deux autres. Gourmand va !

147 148 149
Bottleneck ?
------------

150 151
Pour faire de bons choix, il faut garder à l'esprit la notion de [goulot d'étranglement](https://fr.wikipedia.org/wiki/Goulot_d%27%C3%A9tranglement_(informatique)).

152 153
Comme ressources, le tableau des [taux de transferts (en)](https://en.wikipedia.org/wiki/Data-rate_units) pourra aider, de même qu'un [convertisseur](https://www.gbmb.org/mbps-to-mbs).

154 155 156 157
* la vitesse du disque en lecture et écriture
* la vitesse du contrôleur en lecture et écriture
* la vitesse de la carte réseau du serveurs

158
Donc l'idée arrive vite d'avoir **plusieurs disques**, peut-être sur **plusieurs contrôleurs**, et aussi **plusieurs cartes réseaux**, voir **plusieurs serveurs**. Mais tout ça coûte en électricité !
159

Thierry Fenasse's avatar
Thierry Fenasse committed
160
Si par exemple 1000 clients sont entrain d'uploader leurs vidéos de vacances et leur photos hautes définitions dans leur « cloud personnel », ces 1000 clients seront limités par leur **vitesse d'envoi** respectives.  Mais bon 1000 x 5Mbit/s ça fait quand même 625MB/s soit une vitesse proche du [SATA 3](https://en.wikipedia.org/wiki/Serial_ATA#SATA_revision_3.0_(6_Gbit/s,_600_MB/s,_Serial_ATA-600) à savoir; du 6Gbit/s.  Ce mix de de bit rate est fait exprès pour vous passer le message du ô combien c'est chiant d'évaluer la choses.
161

Thierry Fenasse's avatar
Thierry Fenasse committed
162
Si ces 1000 clients téléchargent leur données sur leur nouvel ordi pour en avoir une copie locale, c'est 1000 clients seront limités par leur **vitesse de réception** respectives. Mais bon 1000 x 30Mbit/s ça fait quand même 3750 MB/s et là… votre serveur avec son interface SATA à du 6Gbit/s à l'aire d'une vielle pantoufle en velour avec de la moumoutte dedans et c'est au moins vers du SAS *(le SCSI hein! Pas le SATA!)* ou du NVMe qu'il faudra aller, selon [ce tableau](https://en.wikipedia.org/wiki/List_of_interface_bit_rates#Storage).
163

Thierry Fenasse's avatar
Thierry Fenasse committed
164
Si tout ça se fesait vers des serveurs dont les accès réseaux seraient limités à du Gigabit *(1 Gigabit/s = 125 Megabytes/s)*, c'est cette connexion qui serait la limite. **Mais**, si cette connexion tombe sur un serveur de stockage dont les disques plafonnent à du 60MB/s, ce sont eux qui limiteront le débit, peut importe le nombre de clients.
165 166 167

Par rapport à ces limitations, seul la **distribution** vers plusieurs serveurs ou plusieurs disques pourrait lever les limitations de ces vitesses.

Thierry Fenasse's avatar
Thierry Fenasse committed
168
Distribuer des données, c'est bien, ça réparti la charge, mais encore faut-il les avoir à différents endroits! Là c'est la **réplication** qui entre en compte.  En effet, le modèle qui compine la **distribution et la réplication** est possible Peut-être qu'un jours avec GlusterFS (ou d'autres), c'est qu'il y a une raison.  L'un pour augmenter la rapidité grace à la distribution de la charge de travail et augmenter la vitesse, l'autre pour assurer la dosiponibilité en réplicant les données vers plusieurs systèmes simultanément. C'est ce qu'on appellera les [types de volumes](https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/#types-of-volumes)
169

170
Passons maintenant à une autre utilisation de ce GlusterFS en faisant la [découverte de Proxmox](https://gitlab.domainepublic.net/tierce/decouverte-proxmox).