Cluster de stockage garage

TeDomum déploie la solution Garage développée principalement par Deuxfleurs pour héberger ses objets au sens S3 : https://garagehq.deuxfleurs.fr.

Pourquoi garage

Le stockage sur un cluster distribué géographiquement est une problématique complexe, qui nécessite des mécanismes essentiellement asynchrones.

A cela la plupart des solutions de réplication sont convergentes à terme, qu’il s’agisse d’une réplication principal-secondaire ou d’un cluster de pairs. La complexité en convergence à terme peut être soit portée par l’application, soit par le stockage essentiellement par des mécanismes d’élection de leader, seul apte à écrire.

Les systèmes à leader sont principalement répandus sur les bases relationnelles et sont peu adaptés à un déploiement en cluster sur des liens coûteux : le risque est fort que le trafic traverse plusieurs fois le WAN (client-proxy-application-stockage-réplication). On leut préfère partout où c’est possible un déport de la complexité dans l’architecture applicative.

C’est la proposition de S3 : un protocole de stockage très simple avec une sémantique native de convergence à terme. Les applications doivent gérer cette complexité (quoique le niveau de prise en compte est variable). Garage implémente notamment S3, sur fond de CRDT et de tables de Merkle pour assurer la cohérence à terme de l’ensemble des données. C’est la seule implémentation libre à date qui respecte la sémantique S3 (Minio par exemple est fortement cohérent en synchrone et se réplique mal en géographique). Cela en fait un très bon candidat de stockage, en plus d’être mis en oeuvre par des proches et d’être très bien soutenu à ce titre !

Topologie du cluster

Le cluster s’appuie sur plusieurs noeuds de Kity. La réplication est configurée à 3 avec une tolérance en lecture lorsque le quorum de 2 noeuds disponibles n’est pas atteint (mode 3-degraded de garage).

Région Noeud Capacité
orlinum americancurl 4To
kaiyou1 cyprus 4To
kaiyou2 bambino 4To

La capacité totale du cluster dépend de la répartition précise des partitions dans garage, mais elle avoisine donc les 4To.

Commandes utiles

Pour lancer une commande garage en employant kubectl sur Kity :

alias garage='kubectl -n storage-object exec svc/garage -- ./garage'

Actions sur les buckets

Obtenir de l’aide

garage bucket --help

Créer un bucket

garage bucket create <bucket_name>

Lister les buckets

garage bucket list

Infos d’un bucket

garage bucket info <bucket_name>

Supprimer un bucket

garage bucket delete <bucket_name> --yes

Actions sur les clés

Obtenir de l’aide

garage key --help

Créer une clé

garage key new --name <key_name>

Donner les droits de lecture et écriture à la clé

garage bucket allow <bucket_name> --read --write --key <key_name>

Lister les clés

garage key list

Supprimer une clé

garage key delete <key_name> --yes