La sauvegarde de base de données n'est rien d'autre qu'un moyen de protéger ou de restaurer des données. C'est le processus de stockage de l'état opérationnel, de l'architecture et des données de votre base de données. Il peut être très utile en cas de panne technique ou de sinistre. Il est donc essentiel de conserver la sauvegarde de votre base de données et que votre base de données dispose d'un processus de sauvegarde efficace et simple.
MongoDB fournit plusieurs outils/techniques pour sauvegarder facilement vos bases de données.
Dans cet article, nous aborderons certains des meilleurs workflows de sauvegarde et de restauration MongoDB.
Généralement, il existe trois options les plus courantes pour sauvegarder votre serveur/cluster MongoDB.
- Mongodump/Mongorestore
- Gestionnaire de cloud MongoDB
- Instantanés de la base de données
Outre ces options générales, il existe d'autres moyens de sauvegarder votre MongoDB. Nous aborderons également toutes ces options dans cet article. Commençons.
MongoDump/MongoRestore
Si vous avez une petite base de données (<100 Go) et que vous souhaitez avoir le contrôle total de vos sauvegardes, alors Mongodump et Mongorestore sont vos meilleures options. Ce sont des commandes shell mongo qui peuvent être utilisées pour sauvegarder manuellement votre base de données ou vos collections. Mongodump vide toutes les données au format Binary JSON(BSON) à l'emplacement spécifié. Mongorestore peut utiliser ces fichiers BSON pour restaurer votre base de données.
Sauvegarder une base de données entière
$ sudo mongodump --db mydb --out /var/backups/mongo
Sortie :
2018-08-20T10:11:57.685-0500 writing mydb.users to /var/backups/mongo/mydb/users.bson
2018-08-20T10:11:57.907-0500 writing mydb.users metadata to /var/backups/mongo/mydb/users.metadata.json
2018-08-20T10:11:57.911-0500 done dumping mydb.users (25000 documents)
2018-08-20T10:11:57.911-0500 writing mydb.system.indexes to /var/backups/mongo/mydb/system.indexes.bson
Dans cette commande, l'argument le plus important est --db. Il spécifie le nom de la base de données que vous souhaitez sauvegarder. Si vous ne spécifiez pas cet argument, la commande Mongodump sauvegardera toutes vos bases de données, ce qui peut être un processus très intensif.
Sauvegarder une seule collection
$ mongodump -d mydb -o /var/backups/mongo --collection users
Cette commande sauvegardera uniquement la collection d'utilisateurs dans la base de données mydb. Si vous ne donnez pas cette option alors, il sauvegardera toute la collection dans la base de données par défaut.
Effectuer des sauvegardes régulières à l'aide de Mongodump/Mongorestore
En règle générale, vous devez effectuer des sauvegardes régulières de votre base de données MongoDB. Supposons que vous souhaitiez effectuer une sauvegarde tous les jours à 3h03 du matin, puis dans un système Linux, vous pouvez le faire en ajoutant une entrée cron dans crontab.
$ sudo crontab -e
Ajoutez cette ligne dans crontab :
3 3 * * * mongodump --out /var/backups/mongo
Restaurer une base de données entière
Pour restaurer la base de données, nous pouvons utiliser la commande Mongorestore avec l'option --db. Il lira les fichiers BSON créés par Mongodump et restaurera votre base de données.
$ sudo mongorestore --db mydb /var/backups/mongo/mydb
Sortie
2018-07-20T12:44:30.876-0500 building a list of collections to restore from /var/backups/mongo/mydb/ dir
2018-07-20T12:44:30.908-0500 reading metadata file from /var/backups/mongo/mydb/users.metadata.json
2018-07-20T12:44:30.909-0500 restoring mydb.users from file /var/backups/mongo/mydb/users.bson
2018-07-20T12:45:01.591-0500 restoring indexes for collection mydb.users from metadata
2018-07-20T12:45:01.592-0500 finished restoring mydb.users (25000 documents)
2018-07-20T12:45:01.592-0500 done
Restaurer une collection entière
Pour restaurer une seule collection à partir de la base de données, vous pouvez utiliser la commande suivante :
$ mongorestore -d mydb -c users mydb/users.bson
Si votre collection est sauvegardée au format JSON au lieu de BSON, vous pouvez utiliser la commande suivante :
$ mongoimport --db mydb --collection users --file users.json --jsonArray
Avantages
- Très simple à utiliser
- Vous avez un accès complet à votre sauvegarde
- Vous pouvez placer vos sauvegardes à n'importe quel emplacement, comme les partages NFS, AWS S3, etc.
Inconvénients
- Chaque fois, il faudra une sauvegarde complète de la base de données, pas seulement la différence.
- Pour les bases de données volumineuses, la sauvegarde et la restauration de la base de données peuvent prendre des heures.
- Ce n'est pas un point dans le temps par défaut, ce qui signifie que si vos données changent pendant leur sauvegarde, votre sauvegarde peut entraîner des incohérences. Vous pouvez utiliser l'option --oplog pour résoudre ce problème. Il prendra un instantané de la base de données à la fin du processus mongodump.
Gestionnaire des opérations MongoDB
Ops Manager est une application de gestion pour MongoDB qui s'exécute dans votre centre de données. Il sauvegarde en permanence vos données et fournit des processus de restauration ponctuels pour votre base de données. Dans cette application, il y a un agent qui se connecte à vos instances MongoDB. Il effectuera d'abord une synchronisation initiale pour sauvegarder l'état actuel de la base de données. L'agent continuera d'envoyer les données oplog compressées et chiffrées à Ops Manager afin que vous puissiez disposer d'une sauvegarde continue. À l'aide de ces données, Ops Manager créera des instantanés de base de données. Il créera un instantané de votre base de données toutes les 6 heures et les données oplog seront stockées pendant 24 heures. Vous pouvez configurer la planification des instantanés à tout moment à l'aide du gestionnaire d'opérations.
Avantages
- Il s'agit d'un point dans le temps par défaut
- N'affecte pas les performances de production, sauf pour la synchronisation initiale
- Prise en charge d'instantanés cohérents de clusters partitionnés
- Flexibilité pour exclure les collections non critiques
Inconvénients
- La latence du réseau augmente avec la taille de l'instantané lors de la restauration de la base de données.
Gestionnaire de cloud MongoDB
MongoDB Cloud Manager est une solution de sauvegarde basée sur le cloud qui fournit une restauration ponctuelle, une solution de sauvegarde continue et en ligne en tant que service entièrement géré. Vous pouvez simplement installer l'agent Cloud Manager pour gérer la sauvegarde et la restauration de votre base de données. Il stockera vos données de sauvegarde dans le cloud MongoDB.
Avantages
- Très simple à utiliser. Bonne interface graphique.
- Sauvegarde continue des requêtes et oplog.
Inconvénients
- Aucun contrôle sur les données de sauvegarde. Il est stocké dans le cloud MongoDB.
- Le coût dépend de la taille des données et du nombre de modifications de l'oplog.
- Le processus de restauration est lent.
Fichiers de base de données d'instantanés
C'est la solution la plus simple pour sauvegarder votre base de données. Vous pouvez copier tous les fichiers sous-jacents (contenu du répertoire data/) et les placer dans n'importe quel emplacement sécurisé. Avant de copier tous les fichiers, vous devez arrêter toutes les opérations d'écriture en cours dans une base de données pour assurer la cohérence des données. Vous pouvez utiliser la commande db.fsyncLock() pour arrêter toutes les opérations d'écriture.
Il existe deux types d'instantanés :l'un au niveau du cloud et l'autre au niveau du système d'exploitation.
Si vous stockez des données de base de données avec un fournisseur de services cloud comme AWS, vous devez prendre des instantanés AWS EBS pour la sauvegarde. En revanche, si vous stockez des fichiers DB dans un système d'exploitation natif tel que Linux, vous devez prendre des instantanés LVM. Les instantanés LVM ne sont pas portables sur d'autres machines. Les instantanés basés sur le cloud sont donc meilleurs que les instantanés basés sur le système d'exploitation.
Avantages
- Facile à utiliser.
- Contrôle total sur les instantanés. Vous pouvez le déplacer vers n'importe quel centre de données.
- Ces instantanés sont des instantanés diff qui ne stockent que les différences par rapport aux instantanés précédents.
- Pas besoin de télécharger les instantanés pour restaurer votre base de données. Vous pouvez simplement créer un nouveau volume à partir de votre instantané.
Inconvénients
- Avec cette méthode, vous ne pouvez restaurer votre base de données qu'aux points de rupture.
- La maintenance devient parfois très complexe.
- Pour coordonner les sauvegardes sur tous les ensembles de réplicas (dans un système partagé), vous avez besoin d'une équipe devops spéciale.
Outil de sauvegarde cohérente MongoDB
La sauvegarde cohérente MongoDB est un outil permettant d'effectuer des sauvegardes cohérentes des clusters MongoDB. Il peut sauvegarder un cluster avec un ou plusieurs fragments en un seul point de la base de données. Il utilise Mongodump comme méthode de sauvegarde par défaut. Exécutez la commande suivante pour effectuer une sauvegarde à l'aide de cet outil.
$ mongodb-consistent-backup -H localhost -P 27017 -u USERNAME -p PASSWORD -l /var/backups/mongo
Toutes les sauvegardes générées par ces commandes sont compatibles MongoRestore. Vous pouvez utiliser la commande mongorestore avec l'option --oplogReplay pour assurer la cohérence.
$ mongorestore --host localhost --port 27017 -u USERNAME -p PASSWORD --oplogReplay --dir /var/backups/mongo/mydb/dump
Avantages
- Entièrement open source
- Fonctionne avec un cluster partagé
- Fournit une option de sauvegarde à distance comme Amazon S3
- Autoscaling disponible
- Très facile à installer et à exécuter
Inconvénient
- Produit pas complètement mature
- Très peu d'options de téléchargement à distance
- Ne prend pas en charge le chiffrement des données avant l'enregistrement sur le disque
- Le référentiel de code officiel manque de tests appropriés
Sauvegarde ClusterControl
ClusterControl est un système de gestion de base de données automatisé tout-en-un. Il vous permet de surveiller, déployer, gérer et faire évoluer facilement vos clusters de bases de données. Il prend en charge MySQL, MongoDB, PostgreSQL, Percona XtraDB et Galera Cluster. Ce logiciel automatise presque toutes les opérations de base de données comme le déploiement d'un cluster, l'ajout ou la suppression d'un nœud de n'importe quel cluster, les sauvegardes continues, la mise à l'échelle du cluster, etc. Toutes ces choses, vous pouvez faire à partir d'une seule interface graphique fournie par le système ClusterControl.
ClusterControl fournit une très belle interface graphique pour la gestion des sauvegardes MongoDB avec prise en charge de la planification et des rapports créatifs. Il vous donne deux options pour les méthodes de sauvegarde.
- Mongodump
- Sauvegarde cohérente Mongodb
Ainsi, les utilisateurs peuvent choisir n'importe quelle option en fonction de leurs besoins. Cet outil attribue un ID unique à toutes les sauvegardes et le stocke sous ce chemin :ClusterControl> Paramètres> Sauvegarde> BackupID. Si le nœud spécifié n'est pas actif lors de la sauvegarde, l'outil trouvera automatiquement le nœud actif du cluster et poursuivra le processus de sauvegarde sur ce nœud. Cet outil fournit également une option pour planifier les sauvegardes à l'aide de l'une des méthodes de sauvegarde ci-dessus. Vous pouvez activer/désactiver n'importe quel travail de planification en basculant simplement un bouton. ClusterControl exécute le processus de sauvegarde en arrière-plan afin qu'il n'affecte pas les autres tâches de la file d'attente.
Avantages
- Installation facile et utilisation très simple
- Plusieurs options pour les méthodes de sauvegarde
- La planification des sauvegardes est très facile à l'aide d'un simple formulaire graphique
- Vérification automatique des sauvegardes
- Rapports de sauvegarde avec statut
Inconvénient
- Les deux méthodes de sauvegarde utilisent en interne mongodump, qui a quelques problèmes avec la gestion de bases de données très volumineuses.
Conclusion
Une bonne stratégie de sauvegarde est un élément essentiel de tout système de gestion de base de données. MongoDB offre de nombreuses options pour les sauvegardes et la récupération/restauration. Parallèlement à une bonne méthode de sauvegarde, il est très important d'avoir plusieurs répliques de la base de données. Cela aide à restaurer la base de données sans avoir le temps d'arrêt d'une seule seconde. Parfois, pour les bases de données plus volumineuses, le processus de sauvegarde peut être très gourmand en ressources. Votre serveur doit donc être équipé d'un bon processeur, d'une RAM et de plus d'espace disque pour gérer ce type de charge. Le processus de sauvegarde peut augmenter la charge sur le serveur pour ces raisons, vous devez donc exécuter le processus de sauvegarde pendant la nuit ou les heures creuses.