Cómo migrar MongoDB 2.6 a 3.0 con WiredTiger

9

MongoDB 3.0 presenta un nuevo motor de almacenamiento llamado wiredTigerque resulta en un uso de memoria y espacio en disco muy reducido.

Dado que mi base de datos está actualmente en ~ 20 millones de objetos y usa hasta ~ 70 GB de RAM, esta actualización llega en el momento justo para posponer una actualización de hardware.

¿Cómo migra una instalación existente de MongoDB 2.6 a 3.0 y al mismo tiempo obtiene los beneficios de wiredTiger?

La documentación se refiere a opciones que dan como resultado errores de inicio que impiden que MongoDB se inicie. Además, las ubicaciones de los archivos no coinciden con las de Ubuntu (Servidor 14.04 LTS).

Emanuel Ey
fuente
¿Es esta una instancia única (no un conjunto de réplicas)?
Adam C

Respuestas:

15

En instalaciones predeterminadas, el archivo de configuración está en /etc/mongod.conf. Lo que los documentos de MongoDB no mencionan es que al migrar a WiredTiger también necesitamos actualizar el archivo de configuración al nuevo formato YAML introducido en 2.6.
Por lo que puedo decir, la engineopción solo está disponible en el nuevo formato de configuración.
La migración desde el antiguo motor de almacenamiento consiste en crear un volcado de la base de datos, cerrar mongodb, cambiar la configuración y luego importar el volcado al nuevo motor de almacenamiento.

  1. Crea una copia de seguridad. Seriamente. Necesitamos un volcado de base de datos que luego importaremos al nuevo motor de base de datos:

    mongodump -d db_name /backup/path/  
    
  2. Detener el servicio mongodb

    sudo service mongod stop  
    
  3. Mueva los datos de la ubicación actual a otro lugar (MongoDB no se iniciará si el directorio de datos contiene archivos generados por el antiguo motor de almacenamiento).

    sudo mv /var/lib/mongodb /var/lib/mongodb_26/
    
  4. Actualice MongoDB a la versión 3.0 (desde 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. Convierta el archivo de configuración de la versión anterior (2.6) al formato YAML actual. El mínimo básico es:

    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  
    

    Asegúrese de que no queden líneas en el formato anterior, o MongoDB no se iniciará.

    La documentación completa para el archivo de configuración está en: http://docs.mongodb.org/v3.0/reference/configuration-options/

  6. Opcionalmente, haga una copia de seguridad del registro:

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

    sudo service mongod start
    
  8. Cargue la copia de seguridad para convertir datos a un nuevo motor de almacenamiento

    mongorestore /backup/location
    

Después de verificar que todos sus datos estén bien, puede eliminar el directorio con el formato de datos anterior

sudo rm -r /var/lib/mongodb_26/

Tenga en cuenta que para los conjuntos de réplicas y los clústeres fragmentados hay algunos pasos adicionales: http://docs.mongodb.org/v3.0/release-notes/3.0-upgrade/?_ga=1.86531032.1131483509.1428671022#change-replica-set-storage de motor a cable

Emanuel Ey
fuente
1
Nota: para ver ejemplos más completos de los archivos de configuración de YAML, consulte mi respuesta en DBA: dba.stackexchange.com/a/82592/6441
Adam C
1

Usando el formato de archivo de configuración anterior , tuve éxito con:

storageEngine = wiredTiger
unkx80
fuente
Eso es bastante interesante porque en el momento en que escribí mi publicación, intenté exactamente eso y obtuve un error (que no recuerdo).
Emanuel Ey