Minio Cloud Storage
Store photos, videos, VMs, containers, log files, or any blob of data as objects.
Son déploiement est très simple car il suffit de choisir un groupe de machines (cluster) et les espaces de stockages pour que ça fonctionne. L'avantage qu'il soit écrit en Go est qu'il n'a pas besoin de dépendances. Tout est déjà prêt dans un seul logiciel.
Nous souhaitons mettre en place un espace de stockage redondant et hautement disponible. Si une machine est indisponible, le cluster de donnée sera toujours disponible. voici le schéma d'infrastructure :
Rien de compliqué car nous avons 4 serveurs qui se communiquent dans le même réseau logique. Nous avons également une machine client qui pourra consulter ses données exporté au préalable sur le cluster.
Installons quelques paquets optionnels qui peuvent bien nous faciliter la tâche :
apt-get install libnss-mdns
On choisira le dossier /mnt qui contiendra nos données. Celui-ci peut très bien être un point de montage d'une partition si l'on souhaite dédier un disque au stockage.
Téléchargeons ensuite le logiciel serveur :
wget https://dl.minio.io/server/minio/release/linux-amd64/minio && chmod +x minio
Définissons les accès sécurisé
export MINIO_ACCESS_KEY=minio export MINIO_SECRET_KEY=minio123
Puis lançons le serveur :
./minio server http://minio1/mnt http://minio2/mnt http://minio3/mnt http://minio4/mnt
Vous devez avoir ce type de réponse sur chacune des machines :
[01/04] http://minio1:9000/mnt - 9.2 GiB online [02/04] http://minio2:9000/mnt - 9.2 GiB online [03/04] http://minio3:9000/mnt - 9.2 GiB online [04/04] http://minio4:9000/mnt - 9.2 GiB online Endpoint: http://192.168.1.231:9000 http://10.0.2.15:9000 http://127.0.0.1:9000 AccessKey: minio SecretKey: minio123 Region: us-east-1 SQS ARNs: <none> Browser Access: http://192.168.1.231:9000 http://10.0.2.15:9000 http://127.0.0.1:9000 Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide $ mc config host add myminio http://192.168.1.231:9000 minio minio123 Object API (Amazon S3 compatible): Go: https://docs.minio.io/docs/golang-client-quickstart-guide Java: https://docs.minio.io/docs/java-client-quickstart-guide Python: https://docs.minio.io/docs/python-client-quickstart-guide JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide Drive Capacity: 16 GiB Free, 18 GiB Total Status: 4 Online, 0 Offline. We can withstand [2] more drive failure(s).
Minio embarque une interface web accessible sur chacune des machines. L’adresse d'accès est indiqué dans le message plus haut à la ligne “Browser Access:” :
Pour notre poste, client faisant tourner un système Unix sur sa machine, il aura besoin du logiciel nommé “mc”. Il est disponible à l'adresse suivante et on le rend exécutable par la suite :
wget https://dl.minio.io/client/mc/release/linux-amd64/mc && chmod +x mc
Enregistrer l'accès du cluster créer précédemment :
./mc config host add cluster http://minio1:9000 minio minio123
On obtient pour ce premier enregistrement, ceci :
mc: Configuration written to ‘/home/client/.mc/config.json’. Please update your access credentials. mc: Successfully created ‘/home/client/.mc/share’. mc: Initialized share uploads ‘/home/client/.mc/share/uploads.json’ file. mc: Initialized share downloads ‘/home/client/.mc/share/downloads.json’ file. Added ‘cluster’ successfully.
Après l’initialisation du cluster, il faut créer au moins un “bucket” pour enregistrer des données :
./mc mb cluster/nginx
Bucket created successfully ‘cluster/nginx’.
Exporter un fichier dans le cluster :
./mc cp fichier.txt cluster/nginx
index.html: 7 B / 7 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃
Lister le contenu d'un dossier :
./mc ls cluster/nginx
[2017-03-02 13:58:47 GMT] 484KiB index.html
Le logiciel client peut faire pas mal de chose comme enregistrer d'autres points d'entrées d'un cluster, lire des fichiers, obtenir une URL de partage, etc… Toutes les commandes actuelles sont décrites à cette page.
Minio devient très intéressant lorsqu'il s'agit de le fusionner avec des instances créées à l'aide de Docker Swarm. En effet, en quelques commandes on peut obtenir des applications qui stockeront leur données volatiles directement dans le cluster. Admettons que nous utilisons le Dockerfile suivant :
version: '2' services: web: image: nginx ports: - "80:80" volumes: - mon-cluster:/usr/share/nginx/html deploy: replicas: 3 volumes: mon-cluster: driver: minio/minfs driver_opts: endpoint: http://minio1:9000 access-key: minio secret-key: minio123 bucket: nginx
Ci-dessous, je demande d'abord la création de 3 conteneurs web puis je déclare un volume qui sera créé pour faire office de point de montage. Il faut bien sur renseigner les informations relatives à la connexion au cluster. Avant de les lancer, on a besoin du driver “minfs” :
docker plugin install minio/minfs
Enfin on peut les lancer :
docker stack deploy -c docker-compose.yml mon-projet