Come migrare MongoDB da 2.6 a 3.0 con WiredTiger


9

MongoDB 3.0 introduce un nuovo motore di archiviazione chiamato wiredTigerche si traduce in un utilizzo della memoria e dello spazio su disco notevolmente ridotto.

Poiché il mio DB è attualmente a circa 20 milioni di oggetti e utilizza fino a circa 70 GB di RAM, questo aggiornamento arriva al momento giusto per posticipare un aggiornamento hardware.

Come migrare un'installazione esistente di MongoDB da 2.6 a 3.0 e ottenere contemporaneamente i vantaggi di wiredTiger?

La documentazione fa riferimento a opzioni che provocano errori di avvio che impediscono l'avvio di MongoDB. Inoltre, i percorsi dei file non corrispondono a quelli in Ubuntu (Server 14.04 LTS).


È una singola istanza (non un set di repliche)?
Adam C

Risposte:


15

Nelle installazioni predefinite, il file di configurazione è all'indirizzo /etc/mongod.conf. Ciò che i documenti MongoDB non menzionano è che durante la migrazione a WiredTiger dobbiamo anche aggiornare il file di configurazione con il nuovo formato YAML introdotto in 2.6.
Per quanto ne so, l' engineopzione è disponibile solo nel nuovo formato di configurazione.
La migrazione dal vecchio motore di archiviazione consiste nel creare un dump del database, chiudere mongodb, modificare le impostazioni e quindi importare il dump nel nuovo motore di archiviazione.

  1. Crea un backup. Sul serio. Abbiamo bisogno di un dump del database che poi importeremo nel nuovo motore di database:

    mongodump -d db_name /backup/path/  
    
  2. Interrompere il servizio mongodb

    sudo service mongod stop  
    
  3. Spostare i dati dalla posizione corrente in un'altra parte (MongoDB non si avvierà se la directory dei dati contiene file generati dal vecchio motore di archiviazione).

    sudo mv /var/lib/mongodb /var/lib/mongodb_26/
    
  4. Aggiorna MongoDB alla versione 3.0 (da 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. Converti il ​​file di configurazione dal vecchio (pre 2.6) al formato YAML corrente. Il minimo indispensabile è:

    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  
    

    Assicurati che non rimangano righe nel vecchio formato o MongoDB non si avvierà.

    La documentazione completa per il file di configurazione è disponibile all'indirizzo: http://docs.mongodb.org/v3.0/reference/configuration-options/

  6. Facoltativamente, eseguire un backup del registro:

    sudo mv /var/log/mongodb/mongod.log /var/log/mongodb/mongod_26.log
    
  7. Riavvia mongodb

    sudo service mongod start
    
  8. Carica il backup per convertire i dati nel nuovo motore di archiviazione

    mongorestore /backup/location
    

Dopo aver verificato che tutti i tuoi dati siano corretti, puoi eliminare la directory con il vecchio formato di dati

sudo rm -r /var/lib/mongodb_26/

Si noti che per i set di repliche e i cluster frammentati ci sono alcuni passaggi aggiuntivi: http://docs.mongodb.org/v3.0/release-notes/3.0-upgrade/?_ga=1.86531032.1131483509.1428671022#change-replica-set-storage -Engine-to-wiredtiger


1
Nota: per esempi più completi dei file di configurazione YAML, vedere la mia risposta su DBA: dba.stackexchange.com/a/82592/6441
Adam C

1

Utilizzando il vecchio formato di file di configurazione , ho avuto successo con:

storageEngine = wiredTiger

Questo è abbastanza interessante perché al momento in cui ho scritto il mio post, ho provato esattamente questo e ho ricevuto un errore (che non ricordo).
Emanuel Ey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.