Como migrar o MongoDB 2.6 para 3.0 com o WiredTiger

9

O MongoDB 3.0 apresenta um novo mecanismo de armazenamento chamado wiredTigerque resulta em uso de memória e espaço em disco bastante reduzido.

Como meu banco de dados está atualmente com ~ 20 milhões de objetos e usando até 70 GB de RAM, esta atualização chega no momento certo para adiar uma atualização de hardware.

Como você migra uma instalação existente do MongoDB 2.6 para 3.0 e, ao mesmo tempo, obtém os benefícios do wiredTiger?

A documentação refere-se às opções que resultam em erros de inicialização que impedem a inicialização do MongoDB. Além disso, os locais dos arquivos não coincidem com os do Ubuntu (Server 14.04 LTS).

Emanuel Ey
fonte
Essa é uma instância única (não um conjunto de réplicas)?
Adam C

Respostas:

15

Nas instalações padrão, o arquivo de configuração está em /etc/mongod.conf. O que os documentos do MongoDB não mencionam é que, ao migrar para o WiredTiger, também precisamos atualizar o arquivo de configuração para o novo formato YAML introduzido no 2.6.
Tanto quanto posso dizer, a engineopção está disponível apenas no novo formato de configuração.
A migração do mecanismo de armazenamento antigo consiste em criar um dump de banco de dados, desligar o mongodb, alterar configurações e depois importar o dump para o novo mecanismo de armazenamento.

  1. Crie um backup. A sério. Precisamos de um despejo de banco de dados que depois importaremos para o novo mecanismo de banco de dados:

    mongodump -d db_name /backup/path/  
    
  2. Pare o serviço mongodb

    sudo service mongod stop  
    
  3. Mova os dados do local atual para outro lugar (o MongoDB não será iniciado se o diretório de dados contiver arquivos gerados pelo mecanismo de armazenamento antigo).

    sudo mv /var/lib/mongodb /var/lib/mongodb_26/
    
  4. Atualize o MongoDB para a versão 3.0 (de 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. Converta o arquivo de configuração do antigo (anterior ao 2.6) para o formato YAML atual. O mínimo necessário é:

    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  
    

    Verifique se nenhuma linha no formato antigo permanece ou o MongoDB não será iniciado.

    A documentação completa do arquivo de configuração está em: http://docs.mongodb.org/v3.0/reference/configuration-options/

  6. Opcionalmente, faça um backup do log:

    sudo mv /var/log/mongodb/mongod.log /var/log/mongodb/mongod_26.log
    
  7. Reinicie o mongodb

    sudo service mongod start
    
  8. Carregue o backup para converter dados em novo mecanismo de armazenamento

    mongorestore /backup/location
    

Depois de verificar se todos os seus dados estão ok, você pode excluir o diretório com o formato de dados antigo

sudo rm -r /var/lib/mongodb_26/

Observe que, para conjuntos de réplicas e clusters fragmentados, existem algumas etapas adicionais: http://docs.mongodb.org/v3.0/release-notes/3.0-upgrade/?_ga=1.86531032.1131483509.1428671022#change-replica-set-storage -engine-to-wiredtiger

Emanuel Ey
fonte
1
Nota: para obter exemplos mais completos dos arquivos de configuração do YAML, consulte minha resposta no DBA: dba.stackexchange.com/a/82592/6441 #
Adam C
1

Usando o antigo formato de arquivo de configuração , tive sucesso com:

storageEngine = wiredTiger
unkx80
fonte
Isso é bastante interessante, porque na época em que escrevi meu post, tentei exatamente isso e recebi um erro (do qual não me lembro).
Emanuel Ey