Migration sur un nouveau cluster Docker Swarm/Compose

3 mars 2024
Aymeric

Contexte, docker swarm et mattermost

Dans le cadre de la migration d'un certain nombre de services d'un cluster Docker Swarm vers un autre, je me suis retrouvé à devoir migrer une instance Mattermost.

La procédure que je vais décrire ici est aussi valable pour la migration d'un nœud du cluster vers un autre nœud du même cluster.

Par ailleurs, je suppose que cette procédure est aussi valable si vous avez déployé Mattermost avec docker-compose et que vous souhaitez faire une migration vers un autre serveur en continuant à utiliser docker-compose. Il est d'ailleurs probable qu'il soit aussi possible de migrer une instance Mattermost déployée avec docker-compose vers un cluster Docker Swarm.

Stack Docker Swarm

Voici la stack Docker Swarm que j'utilise pour Mattermost, celle-ci est simplifiée et ne correspond pas exactement à la stack que j'utilise en production.

Cette stack se base sur le docker-compose officiel de Mattermost, mais adapté pour fonctionner avec Docker Swarm. Il manque ici les variables d'environnement pour la configuration de Mattermost et Postgresql.

version: "3.3"

networks:
  network:
    driver: overlay

services:
  postgres:
    image: postgres:15
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp
      - /var/run/postgresql
    volumes:
      - /var/swarm/mattermost/postgres:/var/lib/postgresql/data
    networks:
      - network
    deploy:
      placement:
        constraints:
          - node.role == manager

  mattermost:
    image: mattermost/mattermost-team-edition:9.0
    security_opt:
      - no-new-privileges:true
    volumes:
      - /var/swarm/mattermost/mattermost/config:/mattermost/config:rw
      - /var/swarm/mattermost/mattermost/data:/mattermost/data:rw
      - /var/swarm/mattermost/mattermost/logs:/mattermost/logs:rw
      - /var/swarm/mattermost/mattermost/plugins:/mattermost/plugins:rw
      - /var/swarm/mattermost/mattermost/client/plugins:/mattermost/client/plugins:rw
      - /var/swarm/mattermost/mattermost/bleve-indexes:/mattermost/bleve-indexes:rw
    tmpfs:
      - /tmp
    ports:
      - "8443:8443/udp"  # video and audio calls
      - "8065:8065/tcp"  # mattermost
    networks:
      - network
    deploy:
      placement:
        constraints:
          - node.role == manager

Préparation du nouveau serveur

Comme vous pouvez le voir dans la stack ci-dessus, les volumes utilisés par Mattermost et Postgresql sont montés sur le serveur hôte. Il est donc nécessaire de créer ces volumes sur le nouveau serveur.

Pour cela, il suffit de créer les dossiers correspondants sur le nouveau serveur, dans mon cas, les dossiers sont les suivants :

  • /var/swarm/mattermost/mattermost/config
  • /var/swarm/mattermost/mattermost/data
  • /var/swarm/mattermost/mattermost/logs
  • /var/swarm/mattermost/mattermost/plugins
  • /var/swarm/mattermost/mattermost/client/plugins
  • /var/swarm/mattermost/mattermost/bleve-indexes
  • /var/swarm/mattermost/postgres

Préparation de la migration

La préparation de la migration consiste à sauvegarder les données de l'instance Mattermost, que ce soit les données générées par Mattermost, mais aussi les données de la base de données (postgresql dans mon cas).

Attention, il est important de couper le service Mattermost et Postgresql avant de faire la migration des données.

Sauvegarde des données de Mattermost

Pour Mattermost, les deux seuls volumes dont les données sont réellement nécessaires lors de la migration sont les volumes config et data .

J'ai donc copié le contenu de ces deux répertoires vers le nouveau serveur.

  • /var/swarm/mattermost/mattermost/config
  • /var/swarm/mattermost/mattermost/data

Sauvegarde de la base de données

Comme pour Mattermost, j'ai directement copié le contenu du volume de la base de données postgresql vers le nouveau serveur.

  • /var/swarm/mattermost/postgres

Attention, cette manipulation n'est probablement pas la meilleure solution, et je suppose qu'il est nécessaire d'avoir la même version de postgresql sur le nouveau.

Si cette solution ne marche pas, il vous faudra utiliser une solution de sauvegarde/restauration de base de données postgresql en utilisant pg_dump et pg_restore .

Mise en place de la stack sur le nouveau serveur

C'est la dernière étape, il suffit de déployer votre stack sur le nouveau serveur, et normalement votre instance Mattermost devrait être fonctionnelle.

Articles récents

Catégories

Tags