Guide de migration

Ce guide explique comment migrer les données Relution d’un backend de stockage objet vers un autre. Les scénarios courants incluent :

  • La migration de MinIO vers SeaweedFS (MinIO n’est plus maintenu)
  • Le passage d’un fournisseur cloud vers un hébergement auto-géré (ou l’inverse)
  • Le changement de fournisseur cloud

Les exemples ci-dessous illustrent une migration de MinIO vers SeaweedFS, mais les étapes peuvent être adaptées à toute source et destination compatibles S3.

Le processus de migration comprend quatre étapes :

  1. Mettre en place le nouveau backend de stockage
  2. Copier les données de l’ancien vers le nouveau stockage
  3. Mettre à jour la configuration de Relution
  4. Supprimer l’ancien backend

Prérequis

  • Un accès simultané aux deux backends de stockage
  • L’outil en ligne de commande rclone (guide d’installation →)
  • Les identifiants des deux backends de stockage

Mettre en place le nouveau backend

Pour une migration vers SeaweedFS, suivre d’abord le guide Installer SeaweedFS →. Relution est arrêté avant la copie des données (voir la section « Copier les données ») et reste arrêté jusqu’à la modification de la configuration.

S’assurer que l’ancien et le nouveau backend de stockage sont tous deux en cours d’exécution :

docker compose up -d minio seaweedfs

Configurer rclone

L’outil rclone offre un moyen rapide et fiable de copier des données entre backends compatibles S3.

Installer rclone

Suivre les instructions sur rclone.org/install → selon le système d’exploitation utilisé.

Créer les configurations distantes

Lancer l’assistant de configuration :

rclone config

Configurer la source (MinIO) :

  1. Taper n pour un nouveau remote
  2. Nom : source
  3. Type de stockage : sélectionner s3
  4. Fournisseur : sélectionner Minio (ou Other pour un S3 générique)
  5. Saisir l’Access Key et la Secret Key
  6. Endpoint : http://localhost:9000
  7. Conserver les valeurs par défaut pour les options restantes
  8. Confirmer avec y

Configurer la destination (SeaweedFS) :

  1. Taper n pour un nouveau remote
  2. Nom : dest
  3. Type de stockage : sélectionner s3
  4. Fournisseur : sélectionner Other
  5. Saisir le nouvel Access Key et le nouveau Secret Key
  6. Endpoint : http://localhost:8333
  7. Conserver les valeurs par défaut pour les options restantes
  8. Confirmer avec y

Taper q pour quitter la configuration.

Vérifier l’accès aux ports

rclone accède aux API S3 des deux backends via l’hôte (http://localhost:9000 et http://localhost:8333). Selon les guides Obsolète : MinIO → et Installer SeaweedFS →, les ports S3 ne sont accessibles que dans le réseau Docker. Pour la durée de la migration, ils sont donc publiés sur l’hôte dans le compose.yaml :

minio:
  ports:
    - "127.0.0.1:9000:9000" # API S3 - pour rclone pendant la migration
    - "9001:9001" # Console web
# ...
seaweedfs:
  ports:
    - "127.0.0.1:8333:8333" # API S3 - pour rclone pendant la migration
    - "127.0.0.1:23646:23646" # Console web

Recréer ensuite les conteneurs avec docker compose up -d minio seaweedfs. Si rclone s’exécute sur un autre hôte, la restriction à 127.0.0.1 est supprimée. Après la migration, les publications supplémentaires des ports S3 sont de nouveau retirées.


Copier les données

  1. Arrêter Relution afin d’éviter toute modification des données pendant la migration, et vérifier que seuls les backends de stockage sont encore en cours d’exécution :

    docker compose stop relution
    docker compose ps  # Doit afficher les backends de stockage, mais PAS relution
    
  2. Démarrer le transfert :

    rclone copy source:relution dest:relution --progress
    
  3. Attendre la fin du transfert. Le temps de transfert dépend de la quantité de données dans le bucket.

  4. Vérifier le transfert :

    rclone check source:relution dest:relution
    

    Sortie attendue : 0 differences found


Mettre à jour la configuration de Relution

Mettre à jour la configuration de Relution pour qu’elle pointe vers le nouveau backend. L’endpoint, l’Access Key et la Secret Key sont modifiés ; le nom du bucket et la région uniquement s’ils diffèrent :

ParamètreAncienne valeurNouvelle valeur
Endpoint (customEndpoint)http://minio:9000http://seaweedfs:8333
Access KeyAncienne cléNouvelle clé
Secret KeyAncien secretNouveau secret
Nom du bucket (bucketName)relutionNom du bucket de destination (uniquement s’il diffère)
Région (region)Par défaut eu-west-1Région du bucket de destination (par exemple pour AWS S3)
  • Si le bucket de destination porte un autre nom, les commandes rclone utilisent source:<ancien-bucket> dest:<nouveau-bucket>. La base de données ne stocke que les clés des objets ; il suffit donc d’adapter bucketName.
  • Pour AWS S3 sans endpoint personnalisé, customEndpoint ou RELUTION_STORAGE_S3_CUSTOMENDPOINT est supprimé. L’endpoint est alors déduit de la région.
  • Les paramètres de chiffrement (clé SSE-C serverSideEncryption.key ou keyFile, ou KMS) restent inchangés.
  • Le bucket de destination est utilisé exclusivement par cette instance Relution. Relution supprime régulièrement les objets du bucket qui ne sont associés à aucune de ses ressources.

Pour une description détaillée de la configuration/modification, consulter Connecter le stockage →


Vérifier et nettoyer

  1. Démarrer Relution :

    docker compose up -d relution
    
  2. Vérifier le bon fonctionnement : Se connecter à Relution et confirmer que les applications et ressources se chargent correctement.

  3. Supprimer l’ancien backend (uniquement après une vérification approfondie) :

    docker compose down minio  # Arrêter l'ancien service
    
  4. Nettoyer la configuration : Supprimer l’ancien service du compose.yaml.

  5. Supprimer les anciennes données : Supprimer l’ancien volume ou répertoire de stockage (par exemple ./volumes/minio/data).

  6. Nettoyer rclone : Il est également possible de supprimer la configuration rclone :

    rclone config delete source
    rclone config delete dest
    

Connexion refusée / Timeout

S’assurer que les ports de l’API S3 sont exposés et non bloqués par un pare-feu ou une segmentation réseau. Tester la connectivité :

curl http://localhost:8333  # Doit retourner une erreur S3

Access denied / 401 / 403

Vérifier que les identifiants sont corrects et que l’utilisateur a accès au bucket.


Fichiers manquants après la migration

Relancer la vérification :

rclone check source:relution dest:relution

Si des différences sont détectées, relancer rclone copy ; seuls les fichiers manquants seront transférés.

Top