Aller au contenu principal

🟦 Cluster MinIO — Installation & Configuration Complète

Ce guide explique comment installer un cluster MinIO distribué 4 nœuds, sécurisé et accessible via HAProxy.
Ce mode offre Une haute disponibilité, une tolérance aux pannes et scalabilité horizontale.


✅ 0. Prérequis indispensables

Avant de commencer, assurez-vous d’avoir :

🔹 Infrastructure

  • 4 serveurs (ou VM) MinIO :
    atdia-minio1, atdia-minio2, atdia-minio3, atdia-minio4
  • Chaque nœud doit disposer de :
    • 1 disque dédié (ex : /dev/vdb)
    • 1 répertoire volume (/var/minio)
  • Résolution DNS fonctionnelle entre les nœuds :
    • ping atdia-minio1.epedia
  • Même version de MinIO sur tous les nœuds

🔹 Réseau

  • Ports à ouvrir sur chaque nœud :
    • 9000/tcp → API S3
    • 9001/tcp → Console web
  • Accès SSH entre les nœuds (facultatif mais recommandé)

🔹 HAProxy

  • 1 serveur dédié pour le load-balancing
  • Certificats SSL pour exposer MinIO en HTTPS via HAProxy

🌐 Informations générales

  • Console Web : port 9001
  • API S3 : port 9000
  • MinIO recommande 4 disques minimum, mais on peut faire :

    ✔️ 4 nœuds × 1 disque = 4 disques → compatible cluster distribué


🟦 1. Préparation des disques /dev/vdb (sur chaque nœud)

sudo mkfs.xfs /dev/vdb
sudo mkdir -p /var/minio
echo "/dev/vdb /var/minio xfs defaults 0 0" | sudo tee -a /etc/fstab
sudo mount -a
sudo chown -R minio-user:minio-user /var/minio

🟦 2. Création de l’utilisateur MinIO (sur chaque nœud)

sudo useradd -r -s /sbin/nologin minio-user

🟦 3. Installation du binaire MinIO (sur chaque nœud)

wget https://dl.min.io/server/minio/release/linux-amd64/minio
sudo cp minio /usr/local/sbin/
sudo chmod +x /usr/local/sbin/minio

🟦 4. Création des dossiers MinIO & logs

sudo mkdir -p /etc/minio
sudo mkdir -p /var/log/minio
sudo chown -R minio-user:minio-user /var/log/minio

Créer la configuration globale :

sudo vim /etc/minio/minio.conf

Contenu identique sur tous les nœuds :

MINIO_ROOT_USER="admin"
MINIO_ROOT_PASSWORD="Passw@rd123"

🟦 5. Endpoints du cluster MinIO

Liste complète des chemins distribués :

http://atdia-minio1.epedia/var/minio
http://atdia-minio2.epedia/var/minio
http://atdia-minio3.epedia/var/minio
http://atdia-minio4.epedia/var/minio

Ces endpoints doivent être mis dans le service systemd.


🟦 6. Fichier systemd pour le Cluster MinIO (sur chaque nœud)

Créer le service :

sudo vim /etc/systemd/system/minio.service

Contenu :

[Unit]
Description=MinIO Distributed Object Storage
After=network-online.target
Wants=network-online.target

StartLimitIntervalSec=0
StartLimitBurst=0

[Service]
User=minio-user
Group=minio-user
EnvironmentFile=/etc/minio/minio.conf

ExecStart=/usr/local/sbin/minio server \
http://atdia-minio1.epedia/var/minio \
http://atdia-minio2.epedia/var/minio \
http://atdia-minio3.epedia/var/minio \
http://atdia-minio4.epedia/var/minio \
--console-address ":9001" --address ":9000"

Restart=always
RestartSec=5
LimitNOFILE=65536

StandardOutput=append:/var/log/minio/minio.log
StandardError=append:/var/log/minio/minio.err

[Install]
WantedBy=multi-user.target

🟦 7. Activer et démarrer MinIO (sur chaque nœud)

sudo systemctl daemon-reload
sudo systemctl enable --now minio
sudo systemctl status minio

🟦 8. Firewall (sur chaque nœud)

sudo firewall-cmd --add-port={9000,9001}/tcp --permanent
sudo firewall-cmd --reload

S'assurer que notre service minio à bel et bien démarré et qu'il est fonctionnel

Cluster MinIO


🟦 Interface Web Minio

http://atdia-minio1.epedia:9001

🟦 9. Serveur HAProxy — Load Balancer MinIO

NB: Le nom de mon serveur haproxy est atdia-minioha.epedia

Installation HAProxy

dnf install haproxy -y

Installation du client mc

wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/sbin/mc
chmod +x /usr/local/sbin/mc

🟦 10. Mise en place des certificats SSL pour HAProxy

sudo mkdir -p /etc/haproxy/certs
cd /etc/haproxy/certs

openssl genrsa -out minio.key 4096
openssl req -new -key minio.key -out minio.csr \
-subj "/C=CI/ST=Abidjan/L=Abidjan/O=ATSain/OU=IT/CN=atdia-minioha.epedia"
openssl x509 -req -days 365 -in minio.csr -signkey minio.key -out minio.crt

cat minio.key minio.crt > minio.pem
chmod 600 minio.pem

🟦 11. Configuration HAProxy pour MinIO

#---------------------------------------------------------------------
# Configuration Minio
#---------------------------------------------------------------------

# -----------------------------
# MINIO API (HTTPS public)
# -----------------------------
frontend minio_api_https
bind *:9000 ssl crt /etc/haproxy/certs/minio.pem
mode http
option forwardfor

http-request set-header Connection "upgrade" if { req.hdr(Upgrade) -i websocket }
http-request set-header Upgrade "websocket" if { req.hdr(Upgrade) -i websocket }

default_backend minio_api_nodes

backend minio_api_nodes
mode http
balance leastconn
server minio1 atdia-minio1.epedia:9000 check
server minio2 atdia-minio2.epedia:9000 check
server minio3 atdia-minio3.epedia:9000 check
server minio4 atdia-minio4.epedia:9000 check

# -----------------------------
# MINIO CONSOLE HTTPS
# -----------------------------
frontend minio_console_https
bind *:9001 ssl crt /etc/haproxy/certs/minio.pem
mode http
option forwardfor

http-request set-header Connection "upgrade" if { req.hdr(Upgrade) -i websocket }
http-request set-header Upgrade "websocket" if { req.hdr(Upgrade) -i websocket }

default_backend minio_console_nodes

backend minio_console_nodes
mode http
balance roundrobin

option httpchk HEAD /minio/health/ready
http-check expect rstatus 200

server minio1 atdia-minio1.epedia:9001 check
server minio2 atdia-minio2.epedia:9001 check
server minio3 atdia-minio3.epedia:9001 check
server minio4 atdia-minio4.epedia:9001 check

# -----------------------------
# STATISTIQUES
# -----------------------------
frontend haproxy_stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:Password123

🟦 12. Firewall HAProxy

firewall-cmd --permanent --add-port={9000,9001}/tcp
firewall-cmd --reload

🟦 13. Redémarrer HAProxy

systemctl restart haproxy

🟦 14. Initialisation du cluster depuis HAProxy

mc alias set minio https://atdia-minioha.epedia:9000 admin Passw@rd123 --insecure
mc mb minio/es-backups-mycellia --insecure

🟦 15. Informations sur le cluster MinIO

mc admin info minio --insecure

Vous aurez un resultat de ce genre :

Cluster MinIO


🎉 Votre cluster MinIO est opérationnel !


🔜 À venir dans la section Lab

Très bientôt, vous découvrirez un lab complet montrant comment
sauvegarder les indices d’un cluster Elasticsearch vers un stockage MinIO distribué.

Nous verrons :

  • la configuration d’un dépôt S3 pour Elasticsearch
  • la création et l’automatisation des snapshots
  • la restauration des données depuis MinIO
  • les bonnes pratiques pour un backup fiable et sécurisé

Restez connectés les ami(e)s ! 🚀