Files
BaC/content/2023-07-18-Réduire-un-cluster-garage.md
2025-02-27 12:52:48 +01:00

102 lines
6.4 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

+++
title = "Réduire un cluster Garage"
date = 2023-07-18
[taxonomies]
tags = [ "système", "garage" ]
+++
![Jaime vivre dangereusement](/jaime_vivre_dangereusement.jpg)
<!-- more -->
Des fois, tu fais des choix douteux. Et des fois, ces choix douteux tamènent à avoir un cluster Garage bien trop gros par rapport à ton besoin réel.
# La situation de départ
La recommandation pour Garage est davoir au moins 3 réplicats à travers un cluster. Autrement dit, quelques soient les machines utilisées (puisquun cluster peut avoir des machines complètement hétérogènes), il faut au minimum un `replication_mode` à 3 et du coup 3 machines, idéalement dans 3 zones différentes.
Donc si tu suis la recommandation, tu as monté 3 machines (ou 3 VMs, ou 3 conteneurs LXC, etc…) et comme tu es quelquun de prudent, tu en as même rajouté une quatrième qui va servir de _gateway_ pour lensemble du cluster. Quand on a effectivement un peu de trafic HTTP, ça peut être intéressant davoir une passerelle pour accéder à lensemble de données du cluster. Non seulement, ça décharge les machines qui soccupent du stockage, mais ça permet de bien séparer les rôles stockage et accès.
Et tout le souci est là: 3 machines, ça fait beaucoup et en réalité, 3 VMs ou 3 conteneurs LXC sur la même machine, ça ne sert pas à grand-chose. Donc oui, cest loin de la recommandation, mais quand on a déjà de la redondance en dessous (NAS, RAID, etc…), ça ne sert pas à grand-chose davoir autant de réplicats.
Sauf que passer de la situation décrite à une autre situation nest pas forcément ce quil y a de plus simple à faire non plus.
# Et au commencement était la redondance
Première étape, il va falloir arrêter le cluster complet. Ça paraît évident, mais ça mérite dêtre rappelé également: il ne vaut mieux pas quil y ait des données inscrites dans le cluster au moment où on larrête ou où lon change sa topologie.
Pour commencer, il faut idéalement lancer un _scrub_ sur lensemble des données, au moins sur le nœud qui est supposé rester à la fin. Ça se lance assez facilement avec cette commande:
```
garage repair --yes scrub start
```
On peut surveiller létat de cette tâche en allant récupérer le `TID` correspondant et en regardant derrière la tâche en question:
```
# garage worker list | grep scrub
5 Busy Block scrub worker 4 4.07% - - -
# garage worker info 5
Task id: 5
Worker name: Block scrub worker
Worker state: Busy (throttled, paused for 0.012s)
Tranquility: 4
Total errors: 0
Consecutive errs: 0
Progress: 4.31%
Persistent errors: 0
```
Il faut savoir également que cette opération est extrêmement lente et demande pas mal de ressources disques. En effet, lobjectif est bien de vérifier lintégrité de chaque bloc sur le disque, cela peut donc potentiellement prendre des heures, voire même des jours. Tu peux également voir un facteur amusant là-dedans, la _tranquilité_ de Garage: plus elle est forte, plus Garage va bourrer comme un âne sur les disques.
Bref, quoiquil arrive, il vaut mieux le laisser terminer, cela permet de sassurer que toutes les données sont saines. Si des blocs posent problème, ils seront récupérés depuis dautres nœuds du cluster, opération bien entendu impossible a posteriori.
# Attention Chérie, ça va trancher
Bon, tu ten doutais mais à un moment, va bien falloir couper. Si tu as un NginX devant la passerelle ou si tu as plusieurs nœuds qui servent de passerelles avec un autre serveur Web devant, larrêter permet de simplifier un peu lopération.
Ça laisse le cluster actif, sans pour autant autoriser les accès en lecture ou en écriture.
Si tu as un processus de sauvegarde de Garage (et tu as grandement intérêt à une avoir un), ça pourrait être une bonne idée de le déclencher maintenant parce quon va rapidement passer aux choses sérieuses.
Maintenant suivre une procédure pas vraiment officielle, pour mettre un cluster dans un état pas vraiment recommandé, le tout sans sauvegarde, comment dire… Faut aimer vivre dangereusement!
# Cest pas le moment davoir les mains qui tremblent
Si lon en croit la [documentation officielle](https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#replication-mode), on peut changer le mode de réplication mais il faut pour cela complètement supprimer le _layout_ courant de tous les nœuds.
La première étape va donc consister à arrêter lensemble des nœuds et à supprimer le fichier `/var/lib/private/garage/meta/cluster_layout`. Le cluster va alors retourner dans son état dorigine, pas en terme de données, mais en terme dorganisation.
Autrement dit, les données ne bougent pas, les métadonnées ne bougent pas (ce qui va permettre à Garage de récupérer toutes ses fonctionnalités sans souci), mais lensemble des mécanismes de synchronisation du cluster, de réplication de données entre les membres va être fortement impacté.
Avant de redémarrer le cluster dans son ensemble, nous allons procéder à la modification du `replication_mode`. Il faut **impérativement** le changer sur lensemble des nœuds du cluster **avant** de redémarrer. Sous peine davoir une situation particulièrement instable.
Dans le fichier `/etc/garage.toml`, on peut donc passer:
```toml
replication_mode = "1"
```
Une fois la modif faite, on peut redémarrer lensemble du cluster, qui sera alors dans son état initial: tous les nœuds se connaissent, ils sont connectés, mais ils ne savent pas quel rôle est le leur.
Du coup, on peut tranquillement assigner un rôle unique à un unique serveur Garage:
```
# garage layout assign -c 5 -t nouveau -z zone1 2XXXXXXXXXXXXXX # la capacité na plus aucune importance ici
# garage layout apply --version 1
```
Normalement, une fois le _layout_ appliqué, lensemble des données devrait de nouveau être disponible sur le seul et unique nœud disponible.
Les autres nœuds disparaîtront quand tu les éteindras, tout simplement.
Cest le moment de vérifier si toutes les données sont effectivement disponibles via S3 (peu importe la méthode, je vous recommande personnellement [minio-client](https://min.io/download#/linux) et de faire une synchro complète dun bucket avant dattaquer le reste).
# Conclusage
Bah alors, elle est pas belle et frugale la vie?