Migration sur un nouveau cluster Docker Swarm/Compose
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.
Conclusion
La migration d'une instance Mattermost d'un cluster Docker Swarm à un autre est une opération étonnamment simple, et je n'ai pas rencontré de problème lors de cette migration.