Dicas MongoDB

Introdução

Neste artigo reuni algumas dicas gerais sobre mongodb. Recentemente tive necessidade fazer a instalação do MongoDb em uma instância EC2 da Amazon. A versão utilizada foi baseada na 3, mais especificamente a versão 3.0.7. Algumas dificuldades encontradas no caminho foram solucionadas. As soluções compartilho com vocês neste artigo. Talvez possam te ajudar também.

A configuração usada no servidor foi o Ubuntu Server 14.04 LTS.

Configurando fstab

Na configuração do EC2 adicionei um ebs extra para usar como armazenamento do data directory do mongodb. Formatei o disco usando ext4 (xfs também é uma outra ótima recomendação além do ext4). Um parâmetro importante para obter um melhor desempenho do disco é usar o noatime na hora de configurar o mount point no fstab:

Com o parâmetro noatime na hora de montar o disco, acessos de leituras em arquivos desse disco não irão gerar a atualização de timestamp atime do arquivo. Isso melhora o desempenho de acesso à leitura do disco.

/dev/xvdb       /database       ext4    noatime 0       0

Movendo data directory

O próximo passo foi mover o data directory padrão do mongdb para outro diretório, no caso para ele foi para /database. O processo foi o seguinte: (Leve em consideração que você tem uma instalação recente do mongodb, onde ainda não tem nenhum dado de produção que precise migrar).

Parar o mongo:

$ sudo service mongod stop

Preparar o novo data directory:

$ sudo mkdir -p /database/mongodb
$ sudo chown -R mongodb /database/mongodb/
$ sudo chgrp -R mongodb /database/mongodb/

Editar o arquivo /etc/mongod.conf, localizando a linha:

storage:
  dbPath: /var/lib/mongodb 

Alterando para:

storage:
  dbPath: /database/mongodb 

Após isso basta iniciar o mongo novamente:

$ sudo service mongod start

Troubleshooting

Failed to authenticate …. with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document

O padrão de autenticação no Mongodb 3 foi alterada de MONGODB-CR (MongoDB Challenge and Response) para SCRAM-SHA-1. O client que esta tentando conectar no mongo 3 esta usando o mecanismo antigo. Para resolver o problema, você deverá excluir o usuário do mongo, alterar admin.system.version.authSchema para 3 e recriar o usuário novamente:

$ sudo mongo
> use admin
> db.dropUser('userxxx')
> var schema = db.system.version.findOne({"_id" : "authSchema"})
> schema.currentVersion = 3
> db.system.version.save(schema)

Crie o usuário novamente: (da sua maneira, abaixo é apenas um exemplo)

> db.addUser( { user: "userxxx", pwd: "pwdyyy", roles: [ "readWrite", "dbAdmin" ] } )

Isso deve resolver o problema.

Resolvendo “insertion error: EOF” ao importar base com mongorestore

Ao tentar restaurar o backup do mongo de uma versão mais antiga para mongo 3, recebo uma série de mensagens de erro, finalizando com “insertion error: EOF”. Me parece ser um problema com a versão 3.0.7 apenas. De acordo com bug reportado em https://jira.mongodb.org/browse/TOOLS-939 a versão 3.0.8 não deve apresentar esse erro.

Uma forma de resolver o erro na 3.0.7 foi adicionado o parâmetro –batchSize=50 ao mongorestore.

Exemplificando, altere o comando de:

$ sudo mongorestore --db testedb testedb/

para:

$ sudo mongorestore --batchSize=50 --db testedb testedb/

Deixe um comentário

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: