Tengo un servicio REST integrado en node.js con Restify y Mongoose y un mongoDB con una colección con aproximadamente 30,000 documentos de tamaño regular. Tengo mi servicio de nodo ejecutándose a través de pmx y pm2.
Ayer, de repente, el nodo comenzó a eliminar errores con el mensaje "MongoError: se destruyó la topología", nada más. No tengo idea de qué se entiende por esto y qué podría haber desencadenado esto. tampoco hay mucho que encontrar al buscar en google esto. Así que pensé en preguntar aquí.
Después de reiniciar el servicio de nodo hoy, los errores dejaron de aparecer. También tengo uno de estos ejecutándose en producción y me da miedo que esto pueda suceder en cualquier momento en una parte crucial de la configuración que se ejecuta allí ...
Estoy usando las siguientes versiones de los paquetes mencionados:
- mangosta: 4.0.3
- restify: 3.0.3
- nodo: 0.10.25
Respuestas:
Parece que significa que la conexión de su servidor de nodo a su instancia de MongoDB se interrumpió mientras intentaba escribir en ella.
Eche un vistazo al código fuente de Mongo que genera ese error
Esto no parece estar relacionado con el problema de Sails citado en los comentarios, ya que no se instalaron actualizaciones para precipitar el bloqueo o la "solución"
fuente
Sé que la respuesta de Jason fue aceptada, pero tuve el mismo problema con Mongoose y descubrí que el servicio que hospedaba mi base de datos me recomendaba aplicar la siguiente configuración para mantener viva la conexión de Mongodb en producción:
Espero que esta respuesta pueda ayudar a otras personas que tienen errores de "Se destruyó la topología".
fuente
Este error se debe a que el controlador mongo desconectó la conexión por cualquier motivo (por ejemplo, el servidor no funcionaba).
De forma predeterminada, mangosta intentará volver a conectarse durante 30 segundos, luego dejará de volver a intentarlo y arrojará errores para siempre hasta que se reinicie.
Puede cambiar esto editando estos 2 campos en las opciones de conexión
documentación de opciones de conexión
fuente
server: {
etc.En mi caso, este error fue causado por una
db.close();
sección fuera de 'esperar' dentro de 'async'fuente
db.close
en unthen
bloque, ¿verdad?db.close
a unthen
bloque funcionó muy bien para mí con el controlador nativo de MongoDB Node.js.Solo una pequeña adición a la respuesta de Gaafar, me dio una advertencia de desaprobación. En lugar de en el objeto del servidor, así:
Puede ir en el objeto de nivel superior. Básicamente, simplemente sáquelo del objeto del servidor y colóquelo en el objeto de opciones como este:
fuente
"La topología fue destruida" podría ser causada por la desconexión de la mangosta antes de que se creen los índices de documentos de mongo, según este comentario
Para asegurarse de que todos los modelos tengan sus índices construidos antes de desconectarse, puede:
fuente
El comentario de Sebastian sobre la respuesta de Adrien necesita más atención, me ayudó, pero al ser un comentario podría ser ignorado en algún momento, así que aquí hay una solución :
fuente
También tuve el mismo error. Finalmente, descubrí que tengo algún error en mi código. Uso el equilibrio de carga para dos servidores nodejs, pero acabo de actualizar el código de un servidor.
Cambio mi servidor mongod
from standalone to replication
, pero me olvido de hacer la actualización correspondiente para la cadena de conexión, así que me encontré con este error.cadena de conexión independiente:
mongodb://server-1:27017/mydb
cadena de conexión de replicación:mongodb://server-1:27017,server-2:27017,server-3:27017/mydb?replicaSet=myReplSet
detalles aquí :[mongo doc para la cadena de conexión]
fuente
Lo conocí en kubernetes / minikube + nodejs + mongoose. El problema era que el servicio DNS estaba funcionando con una especie de latencia. Verificar DNS está listo resolvió mi problema.
(los números en db_options se encuentran arbitrariamente en stackoverflow y sitios similares)
fuente
Aquí lo que hice, funciona bien. El problema desapareció después de agregar las siguientes opciones.
fuente
Debe reiniciar mongo para resolver el error de topología, luego simplemente cambie algunas opciones de mongoose o mongoclient para superar este problema:
fuente
Recibí este error, mientras creaba una nueva base de datos en mi Comunidad MongoDb Compass. El problema era con mi Mongod, no se estaba ejecutando. Entonces, como una solución, tuve que ejecutar el comando Mongod como precedente.
Pude crear una base de datos después de ejecutar ese comando.
Espero eso ayude.
fuente
Estuve luchando con esto durante algún tiempo. Como puede ver en otras respuestas, el problema puede ser muy diferente.
La forma más fácil de averiguar qué está causando es activar
loggerLevel: 'info'
las opcionesfuente
En mi caso, este error fue causado por una instancia de servidor idéntica que ya ejecutaba en segundo plano.
Lo extraño es que cuando inicié mi servidor sin previo aviso, ya hay uno funcionando, la consola no mostró nada como 'algo está usando el puerto xxx'. Incluso podría subir algo al servidor. Entonces, me llevó bastante tiempo localizar este problema.
Además, después de cerrar todas las aplicaciones que puedo imaginar, todavía no pude encontrar el proceso que utiliza este puerto en el monitor de actividad de mi Mac. Tengo que usar
lsof
para rastrear. El culpable no fue sorprendente: es un proceso de nodo. Sin embargo, con el PID que se muestra en el terminal, descubrí que el número de puerto en el monitor es diferente del que usa mi servidor.Con todo, matar todos los procesos de nodo puede resolver este problema directamente.
fuente
Resolví este problema de la siguiente manera:
fuente