Sauvegarder et restaurer MongoDB dans un environnement Docker
18 juillet 2024 · 10 min read · Read in English
Sommaire
Introduction
Dans notre précédent article, on a vu comment faire tourner une base MongoDB dans un conteneur Docker, et on a appris à créer un replica set à 3 nœuds avec Docker Compose. Si tu l'as raté, tu peux le consulter ici. Dans cet article, on couvre un sujet essentiel : sauvegarder et restaurer MongoDB dans un environnement Docker. Je vais te guider à travers le process de création d'une sauvegarde complète d'une base MongoDB qui tourne dans un conteneur Docker, puis sa restauration dans un nouveau conteneur MongoDB.
L'importance des sauvegardes dans un environnement conteneurisé
Les conteneurs sont conçus pour être éphémères, c'est-à-dire qu'ils peuvent être créés, détruits et recréés à tout moment. Si ça offre de la flexibilité, ça signifie aussi que toute donnée stockée dans un conteneur risque d'être perdue quand le conteneur est supprimé, ou perdue à cause de corruption ou d'autres soucis. Il est donc crucial d'avoir une stratégie de sauvegarde et de restauration robuste pour protéger tes données de la perte ou la corruption et garantir disponibilité et continuité d'activité.
Pourquoi les sauvegardes sont importantes
1- Prévention de la perte de données : les sauvegardes sont essentielles pour prévenir la perte de données due à une suppression accidentelle, corruption, panne matérielle ou autre événement inattendu. Avoir une sauvegarde garantit de pouvoir récupérer tes données en cas d'événement de ce type.
2- Continuité d'activité : les sauvegardes sont cruciales pour maintenir la continuité d'activité en cas de perte de données. Une stratégie de sauvegarde fiable garantit que tu peux rapidement récupérer tes données et reprendre les opérations sans temps d'arrêt significatif, particulièrement dans les environnements conteneurisés.
3- Reprise après sinistre : les sauvegardes sont une partie essentielle de tout plan de reprise après sinistre. Une stratégie de sauvegarde fiable garantit que tu peux récupérer rapidement tes données et reprendre les opérations en cas de sinistre.
4- Conformité et exigences légales : de nombreuses industries ont des exigences strictes de conformité et légales concernant les données.
5- Tranquillité d'esprit : avoir une stratégie de sauvegarde fiable en place te donne la tranquillité d'esprit en sachant que tes données sont protégées et peuvent être récupérées en cas d'événement.
Stratégies de sauvegarde MongoDB
MongoDB propose plusieurs options pour sauvegarder tes données : sauvegardes incrémentales, complètes et différentielles.
1- Sauvegardes incrémentales : capturent uniquement les changements faits depuis la dernière sauvegarde, ce qui réduit la quantité de données à sauvegarder et accélère le process. En revanche, elles peuvent être complexes à gérer et restaurer.
2- Sauvegardes complètes : capturent toute la base, données et index inclus. Bien que les sauvegardes complètes soient plus longues et plus gourmandes en ressources que les incrémentales, elles fournissent un snapshot complet de la base qui peut être utilisé pour la restaurer à un point précis dans le temps.
3- Sauvegardes différentielles : capturent uniquement les changements faits depuis la dernière sauvegarde complète, ce qui réduit la quantité de données à sauvegarder par rapport à une complète. Ça peut être un bon compromis entre complète et incrémentale, mais ça peut aussi être complexe.
Dans cet article, on se concentre sur la stratégie de sauvegarde complète puisque c'est la méthode la plus simple et fiable pour sauvegarder ta base.
Réaliser une sauvegarde complète de MongoDB
Prérequis
1- Docker et Docker Compose installés sur ton système. 2- Connaissance basique des concepts Docker comme les volumes. 3- Temps pour compléter le tutoriel : 6 à 10 minutes.
Étape 1 : démarrer un conteneur MongoDB
D'abord, on tire l'image MongoDB depuis Docker Hub et on démarre un conteneur MongoDB.
docker pull mongo:7.0-jammy # Pull the MongoDB image
docker volume create mongo-data # Create a volume to persist the MongoDB data
docker run -d --name mongodb -v mongo-data:/data/db -p 27017:27017 mongo:7.0-jammy # Start a MongoDB container
Étape 2 : exécuter la commande mongodump
Pour créer une sauvegarde complète de ta base MongoDB, tu vas utiliser la commande
mongodump, un utilitaire fourni par MongoDB. Cette commande crée un export binaire de ta
base qui pourra servir à restaurer les données plus tard.
Lance la commande suivante depuis ta machine hôte pour créer une sauvegarde complète de ta base MongoDB :
docker exec -it mongodb mongodump --uri mongodb://localhost:27017/test --gzip --archive=test.archive
Dans mon exemple, mon conteneur s'appelle mongo, et ma base s'appelle test — tu dois la
remplacer par le nom de ta base. Note aussi le flag --gzip, qui compresse le fichier de
sauvegarde pour économiser de l'espace disque. Ma base de test pèse environ 18 Mo, et le
fichier de sauvegarde environ 627 Ko. Réduction significative.
Autre chose importante : le flag --uri, qui spécifie la chaîne de connexion à la base
MongoDB. Ici, on se connecte à la base MongoDB qui tourne sur localhost au port 27017. Si
tu as suivi l'article précédent, tu as peut-être un replica set qui tourne sur
localhost:27017,localhost:27018,localhost:27019. Dans ce cas, remplace la chaîne de
connexion par la version appropriée :
mongodb://username:passwor@localhost:27017,username:passwor@locahost:27018,username:passwor@localhost:27019/?replicaSet=rs0.
Si tout se passe bien, tu devrais voir un message indiquant que la sauvegarde a réussi. Quelque chose comme :
Étape 3 : copier le fichier de sauvegarde sur ta machine hôte
La commande mongodump crée un fichier de sauvegarde à l'intérieur du conteneur MongoDB. On
doit le copier sur notre machine hôte parce que le conteneur est éphémère et peut être détruit
à tout moment.
Lance la commande suivante pour copier le fichier de sauvegarde sur ta machine hôte :
docker cp mongodb:/test.archive /path/to/backup/yourdatabase.archive
Remplace
/path/to/backup/yourdatabase.archivepar le chemin où tu veux stocker le fichier de sauvegarde sur ta machine hôte.
Si tout se passe bien, tu devrais voir un message indiquant que le fichier a été copié avec succès. Quelque chose comme :
Bravo ! Tu as créé avec succès une sauvegarde complète de ta base MongoDB. Tu peux maintenant stocker ce fichier dans un endroit sûr et l'utiliser pour restaurer tes données si besoin. Quand je dis « endroit sûr », je veux dire un endroit différent de ta machine locale ou de ton serveur, parce que, si ta machine ou ton serveur tombe, tu perds à la fois la base et la sauvegarde.
Une autre option est d'utiliser un service de stockage cloud comme AWS S3, Google Cloud Storage, Azure Blob Storage ou MinIO pour stocker tes sauvegardes. Comme ça, tes sauvegardes sont en sécurité même si ta machine ou ton serveur tombe. Tu peux aussi prendre soin de la sécurité de tes sauvegardes en les chiffrant avant de les stocker dans le cloud. Ainsi, tu garantis l'intégrité et la confidentialité de la base.
Réaliser une restauration MongoDB
Aussi importante que la création de sauvegardes, la capacité à les restaurer quand nécessaire.
La commande mongorestore est utilisée pour restaurer une sauvegarde MongoDB créée avec
mongodump. Dans cette section, on parcourt le process de restauration d'une sauvegarde
MongoDB dans un environnement conteneurisé.
Pour ce tutoriel, on suppose que notre conteneur MongoDB a été supprimé sans le vouloir 😏, et que le volume attaché est parti avec. On utilise le fichier de sauvegarde qu'on a créé plus tôt pour restaurer les données.
Étape 1 : démarrer un nouveau conteneur MongoDB
D'abord, démarre un nouveau conteneur MongoDB avec la même image et le même volume utilisés pour créer la sauvegarde.
docker run -d --name mongodb -v mongo-data:/data/db -p 27017:27017 mongo:7.0-jammy
Étape 2 : copier le fichier de sauvegarde dans le nouveau conteneur
Ensuite, copie le fichier de sauvegarde depuis ta machine hôte ou récupère-le depuis le stockage cloud vers le nouveau conteneur MongoDB. Pour cet exemple, on utilise le fichier qu'on a créé plus tôt.
docker cp /path/to/backup/test.archive mongodb:/test.archive
Remplace
/path/to/backup/test.archivepar le chemin vers le fichier de sauvegarde sur ta machine hôte.
Étape 3 : exécuter la commande mongorestore
Enfin, utilise la commande mongorestore pour restaurer le fichier de sauvegarde dans le
nouveau conteneur MongoDB.
docker exec -it mongodb mongorestore --uri mongodb://localhost:27017 --gzip --archive=test.archive
Cette commande restaure les données du fichier de sauvegarde vers la base MongoDB qui tourne
dans le nouveau conteneur. Note qu'on n'a pas besoin de spécifier le nom de la base parce
qu'il est inclus dans le fichier de sauvegarde. Le flag --gzip sert à indiquer à
mongorestore que le fichier de sauvegarde est compressé.
Si tout se passe bien, tu devrais voir un message indiquant que la restauration a réussi. Quelque chose comme :
Bonnes pratiques pour les sauvegardes MongoDB en environnement conteneurisé
1- Utiliser les volumes : stocke tes données MongoDB sur un volume pour les persister même si le conteneur est détruit. Ça garantit que tes données sont en sécurité et peuvent être sauvegardées et restaurées facilement.
2- Sauvegardes régulières : planifie des sauvegardes régulières de ta base MongoDB pour garantir que tes données sont toujours à jour et peuvent être rapidement restaurées en cas d'événement. Selon tes données, tu peux avoir besoin de sauvegardes :
- Quotidiennes : idéal pour les bases avec des changements fréquents.
- Hebdomadaires : adapté pour les bases modérément actives, avec des changements moins fréquents.
- Mensuelles : pour les bases avec des changements peu fréquents.
3- Sauvegardes hors site : stocke tes sauvegardes dans un emplacement hors site, comme un service de stockage cloud, pour garantir que tes données sont en sécurité même si ta machine ou ton serveur tombe. Souviens-toi de traiter les sauvegardes de ta base comme des données sensibles : tu devrais les chiffrer avant de les stocker dans le cloud, et en restreindre l'accès au personnel autorisé seulement.
3- Automatiser les sauvegardes : mets en place des jobs de sauvegarde automatisés qui tournent à intervalles réguliers pour garantir que tes données sont sauvegardées de manière régulière et cohérente.
4- Tester les restaurations : teste régulièrement ton process de sauvegarde et de restauration pour garantir que tes sauvegardes sont valides et peuvent être restaurées avec succès. Ça t'aidera à identifier les soucis de ta stratégie de sauvegarde et à faire les ajustements nécessaires. Après une sauvegarde, tu devrais tester le process de restauration dans un environnement sandbox pour garantir que la sauvegarde est valide et peut être restaurée avec succès. Une chose importante : tu devrais documenter le process de restauration, pour garantir que tout personnel autorisé peut restaurer la base en cas d'événement.
Conclusion
Dans cet article, on a couvert l'importance des sauvegardes dans un environnement conteneurisé et on t'a guidé à travers le process de création d'une sauvegarde complète d'une base MongoDB qui tourne dans un conteneur Docker. Je t'ai également montré comment restaurer la sauvegarde dans un nouveau conteneur MongoDB. En suivant ces étapes et bonnes pratiques, tu peux garantir que tes données MongoDB sont sûres, sécurisées et toujours disponibles, même en cas de perte ou corruption. Souviens-toi : avoir une sauvegarde est essentiel, mais pouvoir la restaurer est encore plus important. Donc, assure-toi de tester tes process de sauvegarde et de restauration régulièrement pour garantir que tes données sont protégées et peuvent être récupérées quand nécessaire.
Dans un futur article, on couvrira un sujet intéressant : automatiser les sauvegardes MongoDB dans un environnement conteneurisé. Je suis sûr que tu vas adorer, parce que ça va t'économiser du temps et des efforts. Reste à l'écoute !
Références
S'abonner aux prochains articles
Recevez les nouveaux articles par e-mail. Pas de spam, désinscription à tout moment.
Related posts
Mettre en place un cluster MongoDB Replica Set à 3 nœuds avec Docker Compose
Comment mettre en place un cluster MongoDB replica set à 3 nœuds avec Docker Compose. Apprends ce qu'est un replica set MongoDB, les prérequis, et les étapes pour créer un fichier Docker Compose qui le configure.
July 17, 2024
Déployer une API Express.js avec Docker
Comment déployer une API REST Express.js avec Docker, avec un focus sur les performances MongoDB, les builds Docker multi-stage, Jest pour les tests, et Nginx comme reverse proxy.
April 11, 2024