Comment migrer MongoDB 2.6 vers 3.0 avec WiredTiger

9

MongoDB 3.0 introduit un nouveau moteur de stockage appelé wiredTigerqui se traduit par une utilisation considérablement réduite de la mémoire et de l'espace disque.

Étant donné que ma base de données compte actuellement environ 20 millions d'objets et utilise jusqu'à 70 Go de RAM, cette mise à jour arrive juste au bon moment pour reporter une mise à jour matérielle.

Comment migrez-vous une installation existante de MongoDB 2.6 vers 3.0 et bénéficiez en même temps des avantages de wiredTiger?

La documentation fait référence aux options qui entraînent des erreurs de démarrage qui empêchent MongoDB de démarrer. De plus, les emplacements des fichiers ne correspondent pas à ceux d'Ubuntu (Server 14.04 LTS).

Emanuel Ey
la source
S'agit-il d'une seule instance (pas d'un jeu de réplicas)?
Adam C

Réponses:

15

Dans les installations par défaut, le fichier de configuration se trouve à /etc/mongod.conf. Ce que les documents MongoDB ne mentionnent pas, c'est que lors de la migration vers WiredTiger, nous devons également mettre à jour le fichier de configuration au nouveau format YAML introduit en 2.6.
Autant que je sache, l' engineoption n'est disponible que dans le nouveau format de configuration.
La migration à partir de l'ancien moteur de stockage consiste à créer un vidage de base de données, à arrêter mongodb, à modifier les paramètres, puis à importer le vidage dans le nouveau moteur de stockage.

  1. Créez une sauvegarde. Sérieusement. Nous avons besoin d'un vidage de base de données que nous importerons ensuite dans le nouveau moteur de base de données:

    mongodump -d db_name /backup/path/  
    
  2. Arrêtez le service mongodb

    sudo service mongod stop  
    
  3. Déplacez les données de l'emplacement actuel vers un autre emplacement (MongoDB ne démarre pas si le répertoire de données contient des fichiers générés par l'ancien moteur de stockage).

    sudo mv /var/lib/mongodb /var/lib/mongodb_26/
    
  4. Mettez à niveau MongoDB vers la version 3.0 (depuis http://docs.mongodb.org/v3.0/tutorial/install-mongodb-on-ubuntu/ ):

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10  
    echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list  
    sudo apt-get update  
    sudo apt-get install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools  
    
  5. Convertissez le fichier de configuration de l'ancien (antérieur à 2.6) au format YAML actuel. Le strict minimum est:

    storage:  
        dbPath: "/var/lib/mongodb"  
        engine: wiredTiger  
    
    systemLog:  
       destination: file  
       path: "/var/log/mongodb/mongod.log"  
       logAppend: true  
    
    net:  
        bindIp: 127.0.0.1  
        port: 27017  
        # Enable the HTTP interface (Defaults to port 28017).  
        http:  
            enabled: false  
    

    Assurez-vous qu'aucune ligne de l'ancien format ne reste, sinon MongoDB ne démarrera pas.

    La documentation complète du fichier de configuration est disponible à l' adresse : http://docs.mongodb.org/v3.0/reference/configuration-options/

  6. Effectuez éventuellement une sauvegarde du journal:

    sudo mv /var/log/mongodb/mongod.log /var/log/mongodb/mongod_26.log
    
  7. Redémarrez mongodb

    sudo service mongod start
    
  8. Chargez la sauvegarde pour convertir les données vers un nouveau moteur de stockage

    mongorestore /backup/location
    

Après avoir vérifié que toutes vos données sont correctes, vous pouvez supprimer le répertoire avec l'ancien format de données

sudo rm -r /var/lib/mongodb_26/

Notez que pour les jeux de réplicas et les clusters fragmentés, il existe certaines étapes supplémentaires: http://docs.mongodb.org/v3.0/release-notes/3.0-upgrade/?_ga=1.86531032.1131483509.1428671022#change-replica-set-storage -moteur-à-filaire

Emanuel Ey
la source
1
Remarque: pour des exemples plus complets des fichiers de configuration YAML, consultez ma réponse sur DBA: dba.stackexchange.com/a/82592/6441
Adam C
1

En utilisant l' ancien format de fichier de configuration , j'ai réussi avec:

storageEngine = wiredTiger
unkx80
la source
C'est assez intéressant car au moment où j'ai écrit mon article, j'ai essayé exactement cela et j'ai eu une erreur (dont je ne me souviens pas).
Emanuel Ey