En esta página, se describen los problemas de conexión más comunes y sus posibles soluciones.
Para obtener más información sobre la conexión a un clúster de Atlas, consulte el tutorial Introducción a Atlas.
Nota
Si es un cliente empresarial que busca soporte, presente un ticket. Para soporte de la comunidad, visite Recursos de MongoDB Community.
Puedes utilizar el asistente inteligente para depurar tus errores de conexión.
El Connect botón Cluster está deshabilitado.
El botón de Connect del clúster puede estar deshabilitado si el clúster está en estado de provisionamineto. El clúster necesita provisionarse cuando se implementa por primera vez. Los clústeres también deben provisionarse cuando se escalan de manera ascendente o descendente.
El botón Connect se habilitará después de que Atlas provisione el clúster.
Para clústeres gratuitos, el provisionamineto tarda menos de 15 segundos.
Para los clústeres Flex y dedicados, el provisionamineto puede tardar hasta 10 minutos.
Conexión de una dirección IP que no está en la lista de acceso IP
Antes de conectarse a su clúster de Atlas, verifique que haya agregado la dirección IP de su host a la lista de acceso IP para el proyecto de su clúster. Atlas permite conexiones de clientes únicamente desde direcciones IP y rangos de direcciones CIDR en la lista de acceso IP.
La autenticación al clúster falló
Para conectarte a Atlas, debes autenticarte con un usuario de base de datos de MongoDB. Para crear un usuario de base de datos para tu clúster, consulta Configurar Usuarios de Base de Datos.
Posibles soluciones
Si ha creado un usuario y tiene problemas para autenticarse, pruebe lo siguiente:
Compruebe que está usando el nombre de usuario y la contraseña correctos para su usuario de base de datos, y que se está conectando al clúster correcto.
Verifique que está especificando la base de datos
authSourcecorrecta en su cadena de conexión.Si tiene un carácter especial en su contraseña, consulte Caracteres especiales en la contraseña de la cadena de conexión.
Demasiadas conexiones abiertas a su clúster
Atlas establece límites para las conexiones entrantes simultáneas a un clúster. Para los clústeres, esto se basa en el nivel de clúster. Si intentas conectarte cuando estás en este límite, MongoDB muestra un error que indica connection refused because too many open connections.
Para obtener una comparación detallada de los niveles de clúster y sus conexiones simultáneas máximas, consulte Límites de conexión y nivel de clúster.
Posibles soluciones
Cierre cualquier conexión abierta a su clúster que no esté en uso actualmente.
Escalar el clúster a un nivel superior para admitir más conexiones simultáneas.
Reinicia la aplicación.
Para prevenir este problema en el futuro, considera usar la opción de cadena de conexión
maxPoolSizepara limitar el número de conexiones en el pool de conexiones.
Para obtener información sobre cómo solucionar este problema, consulta Soluciona problemas de conexión.
Rendimiento degradado en clústeres particionados durante picos en el número de conexiones
Atlas puede generar una cadena de conexión SRV optimizada para clústeres particionados utilizando los balanceadores de carga del servicio de nodos privados. Cuando se usa una cadena de conexión optimizada, Atlas limita el número de conexiones por mongos entre la aplicación y el clúster particionado. Las conexiones limitadas por mongos mejoran el rendimiento durante los picos en el número de conexiones.
Para obtener más información sobre las cadenas de conexión optimizadas para clústeres fragmentados detrás de un nodo privado, consulta ¿Cómo puedo optimizar el rendimiento de la conexión para clústeres fragmentados con nodos privados?
Intento de conexión detrás de un firewall
Conectarse a la interfaz de usuario de Atlas
Atlas utiliza una CDN para servir contenido rápidamente. Si su organización utiliza un cortafuegos, añada los siguientes hosts de la CDN de Atlas a la lista de permitidos del cortafuegos para evitar problemas al acceder a la interfaz de usuario de Atlas:
https://assets.mongodb-cdn.com/https://downloads.mongodb.com/(Requerido para la función Explorador de datos)
Conectarse a un clúster
Los clústeres Atlas operan en el puerto 27017. Debes poder acceder a este puerto para conectarte a tus clústeres. Además, asegúrate de que los puertos apropiados estén abiertos para lo siguiente:
Para clústeres particionados, otorgue acceso al puerto 27016.
Para BI Connector, concede acceso al puerto 27015.
Se puede verificar la capacidad para alcanzar un puerto con el Outgoing port tester de terceros.
Ejemplo
Para comprobar la capacidad de alcanzar el puerto 27017, se debe visitar http://portquiz.net:27017.
Si no puedes acceder a estos puertos, verifica la configuración del firewall del sistema y asegúrate de que no esté bloqueando el acceso a estos puertos.
Disponibilidad del clúster
Si se usa una cadena de conexión mongodb+srv:// y el driver o shell no encuentra el host DNS del clúster de Atlas, es posible que se haya pausado o borrado el clúster. Se debe verificar que el clúster exista. Si el clúster está en pausa, se puede reanudar si es necesario.
Nota
Atlas pausa automáticamente los clústeres Free inactivos (anteriormente conocidos como M0) después de 30 días sin conexiones.
Solución de problemas de MongoDB Compass
Si utiliza MongoDB Compass para conectarse a su clúster y experimenta problemas, consulte:
Conexión rechazada al utilizar la cadena de conexión SRV en esta sección.
Errores de conexión de Compass en la documentación de MongoDB Compass.
Si se usa un certificado X.509 autogestionado o un certificado X.509 autogenerado gestionado por Atlas para autenticar en la base de datos de MongoDB, cuando se realice la conexión a MongoDB Compass, se debe hacer lo siguiente:
En MongoDB Compass, elige Fill in connection fields individually.
En el menú desplegable Authentication, selecciona
X.509.Seleccione More Options.
En el menú desplegable SSL, selecciona Server and Client Validation.
Agrega la misma ruta al certificado gestionado por Atlas descargado o al certificado autogestionado (según cuál utilices) a cada uno de estos campos: Certificate Authority, Client Certificate y Client Private Key.
Para obtener más información, consulta Conéctate a MongoDB en la documentación de MongoDB Compass.
Problemas con la cadena de conexión
Formato de cadena de conexión incorrecto
El formato de la cadena de conexión que usted utilice para conectarse a Atlas depende de varios factores, entre ellos:
La versión
mongosh. Para obtener más información, se debe consultar Conectarse a un clúster a través de mongosh.La versión de su controlador. Para obtener más información, consulte Conectar a un clúster vía Librerías de clientes.
Verifique su cadena de conexión en un entorno de prueba antes de ponerla en producción.
Caracteres especiales en la contraseña de la cadena de conexión
Si la contraseña incluye caracteres especiales y se usa en una cadena de conexión URI, se deben codificar los caracteres especiales.
Si intentas actualizar una contraseña con un carácter especial que requiere codificación porcentual, aparece el siguiente mensaje de error:
This password contains special characters which will be URL-encoded.
Nota
Los siguientes caracteres y el carácter de espacio deben convertirse utilizando codificación porcentual si se incluyen en un nombre de usuario o contraseña:
: / ? # [ ] @ ! $ & ' ( ) * , ; = %
Por ejemplo, si su contraseña en texto plano es p@ssw0rd'9'!, necesita codificar su contraseña como:
p%40ssw0rd%279%27%21
➤ Se debe usar el menú desplegable Seleccionar el lenguaje para establecer el lenguaje del ejemplo de codificación en esta sección.
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "net/url" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 func main() { 14 username := "<username>" 15 password := "<password>" 16 cluster := "<clusterName>" 17 authSource := "<authSource>" 18 authMechanism := "<authMechanism>" 19 20 uri := "mongodb+srv://" + url.QueryEscape(username) + ":" + 21 url.QueryEscape(password) + "@" + cluster + 22 "/?authSource=" + authSource + 23 "&authMechanism=" + authMechanism 24 25 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri)) 26 if err != nil { 27 panic(err) 28 } 29 defer client.Disconnect(context.TODO()) 30 31 collection := client.Database("<dbName>").Collection("<collName>") 32 33 cursor, err := collection.Find(context.TODO(), bson.D{}) 34 if err != nil { 35 panic(err) 36 } 37 38 var results []bson.D 39 if err = cursor.All(context.TODO(), &results); err != nil { 40 panic(err) 41 } 42 for _, result := range results { 43 fmt.Println(result) 44 } 45 }
1 import com.mongodb.client.MongoClient; 2 import com.mongodb.client.MongoClients; 3 import com.mongodb.client.MongoCollection; 4 import com.mongodb.client.MongoDatabase; 5 6 import org.bson.Document; 7 import java.net.URLEncoder; 8 9 public class Encoding { 10 11 public static void main(String [] args){ 12 13 try{ 14 String username = URLEncoder.encode("<username>", "UTF-8"); 15 String password = URLEncoder.encode("<password>", "UTF-8"); 16 String cluster = "<clusterName>"; 17 String authSource = "<authSource>"; 18 String authMechanism = "<authMechanism>"; 19 20 String uri = "mongodb+srv://" + username + ":" + password + "@" + cluster + 21 "/?authSource=" + authSource + "&authMechanism=" + authMechanism; 22 23 MongoClient mongoClient = MongoClients.create(uri); 24 25 MongoDatabase database = mongoClient.getDatabase("<dbName>"); 26 MongoCollection<Document> collection = database.getCollection("<collName>"); 27 28 collection.find().forEach(doc -> System.out.println(doc.toJson())); 29 30 } catch(Exception e){ 31 System.err.println(e.getCause()); 32 33 } 34 } 35 }
1 const { MongoClient } = require("mongodb"); 2 3 const username = encodeURIComponent("<username>"); 4 const password = encodeURIComponent("<password>"); 5 const cluster = "<clusterName>"; 6 const authSource = "<authSource>"; 7 const authMechanism = "<authMechanism>"; 8 9 let uri = 10 `mongodb+srv://${username}:${password}@${cluster}/?authSource=${authSource}&authMechanism=${authMechanism}`; 11 12 const client = new MongoClient(uri); 13 14 async function run() { 15 try { 16 await client.connect(); 17 18 const database = client.db("<dbName>"); 19 const ratings = database.collection("<collName>"); 20 21 const cursor = ratings.find(); 22 23 await cursor.forEach(doc => console.dir(doc)); 24 } finally { 25 await client.close(); 26 } 27 } 28 run().catch(console.dir);
1 import pymongo 2 from urllib.parse import quote_plus 3 4 username = quote_plus('<username>') 5 password = quote_plus('<password>') 6 cluster = '<clusterName>' 7 authSource = '<authSource>' 8 authMechanism = '<authMechanism>' 9 10 uri = 'mongodb+srv://' + username + ':' + password + '@' + cluster + '/?authSource=' + authSource + '&authMechanism=' + authMechanism 11 12 client = pymongo.MongoClient(uri) 13 14 result = client["<dbName"]["<collName>"].find() 15 16 # print results 17 for i in result: 18 print(i)
Importante
No codifiques caracteres especiales en tu contraseña si la estás utilizando fuera de una URI de cadena de conexión (por ejemplo, pegándola en mongosh).
Cadena de conexión incompatible con la versión del controlador
Si aparece este mensaje de error, es probable que el driver esté obsoleto. Para obtener instrucciones sobre cómo actualizar el driver, se debe consultar la Documentación de driver.
El DNS del proveedor de servicios de Internet bloquea la cadena de conexión
Cuando utilizas el formato de cadena de conexión de lista de nodos iniciales de DNS para conectarte a Atlas, es posible que veas el siguiente error:
DNSHostNotFound: Failed to look up service "<MongoDB service name>"
Este error puede ocurrir al usar el servidor DNS por defecto que proporciona su ISP. Ese servidor DNS podría no dar soporte a búsquedas SRV que utiliza el formato de cadena de conexión de la lista de nodos iniciales DNS.
Para resolver el problema, se puede intentar cambiar la configuración de DNS para utilizar un servidor DNS público.
Ejemplo
Se pueden configurar los ajustes de red para utilizar Google Public DNS en lugar de los servidores DNS del ISP.
Después de que actualice la configuración de su red para usar un servidor DNS público, conéctese al clúster.
Error en la cadena de conexión con DB Tools
Es posible que veas el siguiente error al usar el formato cadena de conexión de lista de nodos iniciales DNS (mongodb+srv://) para conectarte a Atlas desde una de las Herramientas de base de datos de MongoDB (mongodump, mongorestore, etc.):
lookup nta8e.mongodb.net on 123.45.67.8:27017: cannot unmarshal DNS message
Si es así, utilice una de las siguientes opciones de conexión:
Utiliza la opción
--uricon una cadena de conexión no SRV (mongodb://).Utiliza la opción
--hostpara especificar el host al que deseas conectarte.
Conexión rechazada con una cadena de conexión SRV
Si utilizas el formato de cadena de conexión de la lista de nodos iniciales de DNS (mongodb+srv://) con un controlador o Compass, puedes recibir el siguiente error:
Error: querySrv ECONNREFUSED _mongodb._tcp.<SRV Record>
Para solucionar este error, complete los siguientes pasos.
Buscar el nombre DNS SRV
Siga los pasos 1-6 en Conecte su aplicación.
Seleccione su controlador y versión.
Bajo Use this connection string in your application, el nombre de host SRV aparece en la cadena de conexión
mongodb+srv://. Es la parte del nombre de host que termina con.mongodb.net.Por ejemplo,
cluster0.dfget.mongodb.net.
Encuentra los nombres de host y los números de puerto de los nodos
En el mismo modal Conectar:
En Use this connection string in your application, desactiva la opción SRV Connection String.
Se muestra la cadena de conexión estándar (
mongodb://), que lista el nombre de host y el número de puerto de cada nodo.La cadena de conexión del clúster puede tener una variedad de nombres de host y puertos, dependiendo de su topología y el método de conexión. Para aprender más sobre los nodos privados,consulte Configurar nodos privados.
Probar la conectividad básica de red
Ejecute los siguientes comandos en una terminal o línea de comandos en el servidor de aplicaciones que experimenta el problema:
Prueba de resolución DNS SRV
Para Linux o macOS, ejecuta el siguiente comando:
dig SRV _mongodb._tcp.<DNS SRV name> Para Windows, ejecute el siguiente comando:
nslookup -debug -q=SRV _mongodb._tcp.<DNS SRV name> En la SECCIÓN DE RESPUESTAS de la respuesta, deberías ver un resultado para cada uno de los nodos del clúster. Por ejemplo:
;; ANSWER SECTION: _mongodb._tcp.gcluster0.dfget.mongodb.net. 60 IN SRV 0 0 27017 cluster0-shard-00-00.dfget.mongodb.net. _mongodb._tcp.gcluster0.dfget.mongodb.net. 60 IN SRV 0 0 27017 cluster0-shard-00-01.dfget.mongodb.net. _mongodb._tcp.gcluster0.dfget.mongodb.net. 60 IN SRV 0 0 27017 cluster0-shard-00-02.dfget.mongodb.net. Pruebas de resolución de nombres de host de nodos DNS
Para cada nombre de host en el clúster:
Para Linux o macOS, ejecuta el siguiente comando:
dig <Node Hostname> Para Windows, ejecute el siguiente comando:
nslookup -debug -q=A <Node Hostname> En la SECCIÓN DE RESPUESTAS de la respuesta, deberías ver la dirección IP a la que se resolvió el nombre de host DNS. Por ejemplo:
;; ANSWER SECTION: cluster0-shard-00-00.ag9in.mongodb.net. 60 IN A 10.10.10.10 Prueba de ping
Nota
Es posible que el proveedor de nube bloquee las solicitudes ICMP en las conexiones de nodos privados.
Para cada nombre de host en el clúster:
Para Linux o macOS, ejecuta el siguiente comando:
ping -c 10 <Node Hostname> Para Windows, ejecute el siguiente comando:
ping /n 10 <Node Hostname> Revisa la salida para comprobar si hay pérdida de paquetes y tiempo de ida y vuelta (RTT). Una alta pérdida de paquetes o latencia puede indicar problemas de red entre su servidor y los nodos del clúster.
Prueba de conexión de red de extremo a extremo
Para Linux o macOS, ejecuta el siguiente comando:
nc -zv <Node Hostname> <Node Port Number> Para Windows, ejecute el siguiente comando:
Test-NetConnection -Port <Node Port Number> -InformationLevel "Detailed" -ComputerName "<Node Hostname>"
Resuelve el problema
Después de ejecutar las pruebas en el paso anterior, utiliza la siguiente orientación para resolver el error de conexión según la prueba que falló:
Error en la prueba de resolución de DNS SRV: Tu resolvedor de DNS no admite búsquedas de registros SRV o el tráfico DNS saliente está bloqueado. Prueba cualquiera de lo siguiente:
Cambie al formato cadena de conexión que no es SRV (
mongodb://) en lugar demongodb+srv://. Para obtener la cadena de conexión que no es SRV, abre el modal Connect en Atlas, selecciona tu controlador y versión, y apaga el interruptor SRV Connection String en Use this connection string in your application.Configura tu red para usar un servidor DNS público que admita búsquedas SRV, como Google Public DNS.
La prueba de resolución de nombres de host del nodo DNS falla: Tu resolutor DNS no puede resolver los nombres de host de los nodos individuales. Si usas nodos privados, verifica que tu configuración DNS de nodos privados sea correcta.
La prueba de ping falla: El tráfico ICMP puede estar bloqueado por un firewall o el proveedor de nube. Esto no indica necesariamente un problema de conexión TCP. Proceda con la prueba de conexión en red de extremo a extremo para verificar la conectividad TCP en el puerto
27017.La prueba de conexión de red de extremo a extremo falla: Un firewall o una política de red están bloqueando el acceso al puerto
27017en los hosts de nodos. Verifica lo siguiente:Añade la dirección IP de tu servidor de aplicaciones a la lista de acceso IPde tu clúster.
Permite conexiones TCP salientes en el puerto
27017a través de tu firewall.
Todos los tests pasan, pero el error persiste: El problema podría estar en la versión de su controlador. Puede que las versiones más antiguas de los drivers no admitan correctamente el formato de cadena de conexión SRV. Actualiza tu controlador a la versión más reciente. También puedes cambiar al formato estándar (no SRV) de cadena de conexión (
mongodb://) desactivando el SRV Connection String en Use this connection string in your application en el modal Connect.