Les services de stockage en ligne tels qu'Amazon S3 sont pratiques, mais parfois coûteux. En être dépendant peut être un problème, notamment en phase de développement d'une application. Heureusement, des outils open source, compatibles avec l'API S3 et relativement complets tels que MinIO existent. Voici comment l'installer.
Les développeurs ont l'habitude d'utiliser des solutions de stockage objet, ayant pour principal avantage de se reposer sur une API REST, accessible via de simples requêtes HTTP. Idéale à intégrer dans le code d'une application.
Applications et serveurs compatibles S3 : des outils à tout faire
Amazon a été pionnier en la matière avec son service S3, devenu une référence du genre. À tel point que son API est un standard de fait, intégrée à de nombreux services et outils. De quoi inciter les concurrents du géant américain à offrir une compatibilité plus ou moins complète, leur ouvrant les portes d'un vaste écosystème.
Cela permet également de limiter la dépendance des développeurs à S3, pouvant passer d'un service de stockage à l'autre sans trop d'efforts. Poussé à l'extrême, ce concept a donné naissance à MinIO, un serveur de stockage objet open source (Apache 2.0), multiplateforme, compatible S3, très facile à installer. L'idéal pour des développements locaux par exemple.
Ainsi, vous pouvez installer MinIO sur votre machine, un serveur local ou distant, l'utiliser comme n'importe quel service compatible S3 pour développer votre site ou application, comme nous allons le voir dans cet article. Vous êtes libre, ensuite, de simplement modifier les paramètres de connexion si jamais vous utilisez un autre service en production.
Mais cela peut aller plus loin avec la mise en place de MinIO sur un ou plusieurs serveurs/instances, chacun disposant d'un ou plusieurs périphériques de stockage pour la protection et la redondance des données. Le tout géré à la main ou via Docker/Kubernetes. Des cas que nous étudierons plus en détail dans de prochains articles de ce dossier.
Notez que MinIO propose également un client, qui a déjà fait l'objet d'un précédent tutoriel. Il peut également être exploité à travers différents SDK proposés pour .Net, Go, Java, Node.js et Python.
- DAS, NAS, SAN, stockage en blocs, fichiers ou objets : qu'est-ce que ça signifie ?
- Utilisez l'Object Storage pour stocker des fichiers et les partager simplement en ligne
- Stockage en ligne, compatible S3, archivage : quel prix pour la conservation de vos données ?
Un serveur lancé en un instant
Ce qui est le plus souvent apprécié avec MinIO, c'est sa simplicité de mise en œuvre. Il peut être nativement lancé sous Linux, macOS ou Windows, proposé comme un exécutable. Vous pouvez aussi le faire via WSL v1/v2.
Pour ce premier essai, nous récupérerons la version Windows que nous plaçons à la racine du compte utilisateur. Nous créons un dossier nommé « minio » qui contiendra les données à la racine du disque principal.
Il suffit alors de lancer le serveur :
minio.exe server c:\minio
C'est tout ! Une fois initialisé, le service sera exposé sur l'ensemble des adresses IP locales de la machine, sur le port 9000. Vous pouvez aussi spécifier une adresse et un port de la sorte :
minio.exe server c:\minio --address IP_ou_hostname:port
Les identifiants par défaut sont minioadmin
/minioadmin
comme indiqué dans la fenêtre. L'application MinIO Browser est active par défaut, permettant un accès depuis une interface dans un navigateur :
Vous pouvez y créer directement des buckets, y envoyer des données via un simple glisser-déposer, les modifier, télécharger, et même les partager si un accès depuis l'extérieur est configuré.
Pour cela, il faudra ouvrir le port 9000 du firewall de votre machine et y rediriger celui de votre routeur. N'importe qui disposant des identifiants pourra alors accéder aux données. Compatibilité S3 oblige, cela pourra également se faire avec toutes applications ou services gérant cette API, comme MinIO Client.
Pour personnaliser les clés d'accès/secrète, utilisez des variables d'environnement. Soit sous Windows :
set MINIO_ACCESS_KEY=clepubliquepastropsecrete
set MINIO_SECRET_KEY=clepriveetroptropsecrete!
Des paramètres qui ne seront valables que pour la session en cours. Pour qu'ils perdurent :
setx MINIO_ACCESS_KEY=clepubliquepastropsecrete
setx MINIO_SECRET_KEY=clepriveetroptropsecrete
Sous Linux, utilisez la commande export
plutôt que set
/setx
.
Ces éléments peuvent être passés au serveur via un fichier de configuration, comme d'autres variables : définition de régions, de classes de stockage, des mécaniques de cache, des limites d'accès à l'API, etc. Tout est détaillé sur cette page. Pour mettre en place un accès HTTPS via un certificat TLS il faut suivre cette procédure. Pour la compression, c'est par là.
Le chiffrement côté serveur avec des clés fournies par le client (SSE-C) est également géré. Un serveur simplifié de distribution de clés, KES, est également proposé en open source (licence AGPL v3) depuis peu. Bien entendu, MinIO peut être lancé comme un service au démarrage de la machine, sans avoir à taper des commandes dans un terminal.
Protéger les données avec des blocs de parité
La gestion des codes d'effacement (erasure code via Reed-Solomon) est l'une des fonctionnalités intéressantes de ce serveur. Elle est complétée par une protection contre la dégradation des données (Bit Rot) via HighwayHash.
À la manière d'un RAID 5 ou 6 cela permet de découper les données en blocs, répartis sur les différentes unités de stockage, avec un calcul de blocs de parité permettant une recomposition et une restauration en cas de problème. La contrepartie est que les blocs de parité occupent de l'espace.
Par défaut il y a autant de blocs de données que de parité
Cette protection se veut plus élevée que du RAID 5/6 la moitié des périphériques pouvant être défaillants sans qu'aucune donnée ne soit perdue avec les paramètres par défaut. Sur 4 disques durs de 4 To, vous ne pourrez donc pas stocker 16 To de données mais 8 To. Il y a ainsi autant de blocs de données que de parité, répartis sur l'ensemble des périphériques.
Ce rapport de 1:2 peut bien entendu être modifié (via les classes de stockage et la configuration) et aller jusqu'à cinq blocs de données pour six écrits (et donc un de parité). Les unités de stockages sont organisées en groupes de 4 à 16, il n'est donc pas possible de profiter de cette fonctionnalité avec seulement deux HDD/SSD.
Pour en profiter, rien de plus simple, il suffit d'indiquer différents dossiers à utiliser. Nous avons testé avec notre ProLiant Microserver Gen10 Plus de HPE dans lequel nous avons placé quatre HDD. Chacun disposait d'un dossier minio à sa racine devant accueillir les données :
minio.exe server c:\minio d:\minio e:\minio f:\minio
Nous avons copié une ISO de 4,42 Go. Chaque HDD était alors occupé à hauteur de 2,21 Go, soit un total de 8,84 Go :
Notez qu'il est possible d'utiliser une cible iSCSI accessible via le réseau comme périphérique de stockage. Sous Linux, on peut également créer différents points de montages et se simplifier la vie en les différenciant par un numéro à la fin de leur nom. Cela rendra accessible une commande de lancement simplifiée sous cette forme :
minio server /data{1...12}
Une procédure identique peut être utilisée pour différentes instances, comme nous le verrons dans la suite de ce dossier.