Eu tenho um serviço REST embutido no node.js com Restify e Mongoose e um mongoDB com uma coleção com cerca de 30.000 documentos de tamanho regular. Eu tenho o meu serviço de nó executando pmx e pm2.
Ontem, de repente, o nó começou a eliminar erros com a mensagem "MongoError: Topologia foi destruída", nada mais. Não tenho idéia do que se entende por isso e o que poderia ter provocado isso. também não há muito a ser encontrado ao pesquisar no google. Então pensei em perguntar aqui.
Depois de reiniciar o serviço do nó hoje, os erros pararam de aparecer. Eu também tenho um desses em execução na produção e me assusta que isso possa acontecer a qualquer momento para uma parte crucial da instalação em execução ...
Estou usando as seguintes versões dos pacotes mencionados:
- mangusto: 4.0.3
- restify: 3.0.3
- nó: 0.10.25
Respostas:
Parece significar que a conexão do servidor do nó com a instância do MongoDB foi interrompida enquanto ele tentava gravar.
Veja o código fonte do Mongo que gera esse erro
Isso não parece estar relacionado ao problema do Sails citado nos comentários, pois não foram instaladas atualizações para precipitar a falha ou a "correção"
fonte
Sei que a resposta de Jason foi aceita, mas tive o mesmo problema com o Mongoose e descobri que o serviço que hospedava meu banco de dados recomendava aplicar as seguintes configurações para manter a conexão do Mongodb ativa na produção:
Espero que esta resposta possa ajudar outras pessoas com erros "A topologia foi destruída".
fonte
Este erro ocorre porque o driver mongo interrompe a conexão por qualquer motivo (o servidor estava inativo, por exemplo).
Por padrão, o mangusto tentará se reconectar por 30 segundos, depois parará de tentar novamente e lançará erros para sempre até reiniciar.
Você pode alterar isso editando esses 2 campos nas opções de conexão
documentação das opções de conexão
fonte
server: {
etc.No meu caso, esse erro foi causado por uma
db.close();
seção fora de 'aguardar' dentro de 'async'fonte
db.close
em umthen
bloco, certo?db.close
para umthen
bloco funcionou muito bem para mim com o driver nativo do MongoDB Node.js.Apenas uma pequena adição à resposta de Gaafar, isso me deu um aviso de reprovação. Em vez de no objeto do servidor, assim:
Pode ir no objeto de nível superior. Basicamente, basta retirá-lo do objeto servidor e colocá-lo no objeto de opções como este:
fonte
"A topologia foi destruída" pode ser causada pela desconexão do mangusto antes que os índices de documentos do mongo sejam criados, de acordo com este comentário
Para garantir que todos os modelos tenham seus índices criados antes de desconectar, você pode:
fonte
O comentário de Sebastian sobre a resposta de Adrien precisa de mais atenção, mas isso pode ser ignorado em algum momento, então aqui está uma solução :
fonte
Eu também tive o mesmo erro. Finalmente, descobri que tenho algum erro no meu código. Uso o equilíbrio de carga para dois servidores nodejs, mas atualizo o código de um servidor.
Eu mudo meu servidor mongod
from standalone to replication
, mas esqueço de fazer a atualização correspondente para a cadeia de conexão, então encontrei este erro.cadeia de conexão autônoma:
mongodb://server-1:27017/mydb
cadeia de conexão de replicação:mongodb://server-1:27017,server-2:27017,server-3:27017/mydb?replicaSet=myReplSet
detalhes aqui :[mongo doc para string de conexão]
fonte
Eu conheci isso no ambiente kubernetes / minikube + nodejs + mangusto. O problema era que o serviço DNS estava com um tipo de latência. A verificação do DNS está pronta resolveu o meu problema.
(os números em db_options são arbitrários encontrados no stackoverflow e sites semelhantes)
fonte
Aqui o que eu fiz, funciona bem. O problema desapareceu depois de adicionar as opções abaixo.
fonte
Você precisa reiniciar o mongo para resolver o erro de topologia e, em seguida, basta alterar algumas opções do mongoose ou mongoclient para superar esse problema:
fonte
Eu recebi esse erro enquanto criava um novo banco de dados na minha comunidade do MongoDb Compass. O problema estava no meu Mongod, ele não estava em execução. Portanto, como correção, tive que executar o comando Mongod como anterior.
Consegui criar um banco de dados depois de executar esse comando.
Espero que ajude.
fonte
Eu estava lutando com isso há algum tempo - Como você pode ver em outras respostas, o problema pode ser muito diferente.
A maneira mais fácil de descobrir o que está causando é ativar
loggerLevel: 'info'
as opçõesfonte
No meu caso, esse erro foi causado por uma instância de servidor idêntica já em execução em segundo plano.
O estranho é que, quando iniciei meu servidor sem aviso prévio, já havia um em execução, o console não mostrava nada como 'algo está usando a porta xxx'. Eu poderia até enviar algo para o servidor. Então, demorei bastante para localizar esse problema.
Além do mais, depois de fechar todos os aplicativos que consigo imaginar, ainda não consegui encontrar o processo que está usando essa porta no monitor de atividades do meu Mac. Eu tenho que usar
lsof
para rastrear. O culpado não foi surpreendente - é um processo de nó. No entanto, com o PID mostrado no terminal, descobri que o número da porta no monitor é diferente daquele usado pelo meu servidor.Em suma, matar todos os processos do nó pode resolver esse problema diretamente.
fonte
Resolvi esse problema:
fonte