Docs Menu
Docs Home
/

Solucionar problemas de conexión

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 cómo conectarse a un clúster Atlas, consulte la Tutorial paraempezar a utilizar 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 ayudarle a depurar errores de conexión.

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 los clústeres gratuitos, el aprovisionamiento demora menos de 15 segundos.

Para los clústeres Flex y dedicados, el provisionamineto puede tardar hasta 10 minutos.

Antes de conectarse a su clúster Atlas, compruebe que haya añadido la dirección IP de su host a la lista de acceso IP del proyecto de su clúster. Atlas solo permite conexiones de clientes desde direcciones IP y Rangos de direccionesCIDR en la lista de acceso IP.

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.

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.

  • Comprueba que estás especificando lo correcto authSource base de datos en su cadena de conexión.

  • Si hay un carácter especial en la contraseña, se debe consultar Caracteres especiales en la contraseña de la cadena de conexión.

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.

  • 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 maxPoolSize para 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.

Atlas puede generar una cadena de conexión SRV optimizada para clústeres particionados con 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?

Atlas utiliza un CDN para servir contenido rápidamente. Si la organización usa un firewall, se debe agregar el siguiente host CDN de Atlas a la lista de permisos del firewall para evitar problemas de acceso a la interfaz de usuario de Atlas: https://assets.mongodb-cdn.com/.

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

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.

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 inactivos de M0 después de 30 días sin conexiones.

Si utiliza MongoDB Compass para conectarse a su clúster y experimenta problemas, consulte:

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:

  1. En MongoDB Compass, elige Fill in connection fields individually.

  2. En el menú desplegable Authentication, selecciona X.509.

  3. Seleccione More Options.

  4. En el menú desplegable SSL, selecciona Server and Client Validation.

  5. 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.

El formato de la cadena de conexión que usted utilice para conectarse a Atlas depende de varios factores, entre ellos:

Verifique su cadena de conexión en un entorno de prueba antes de ponerla en producció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.


1package main
2
3import (
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
13func 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}
1import com.mongodb.client.MongoClient;
2import com.mongodb.client.MongoClients;
3import com.mongodb.client.MongoCollection;
4import com.mongodb.client.MongoDatabase;
5
6import org.bson.Document;
7import java.net.URLEncoder;
8
9public 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}
1const { MongoClient } = require("mongodb");
2
3const username = encodeURIComponent("<username>");
4const password = encodeURIComponent("<password>");
5const cluster = "<clusterName>";
6const authSource = "<authSource>";
7const authMechanism = "<authMechanism>";
8
9let uri =
10 `mongodb+srv://${username}:${password}@${cluster}/?authSource=${authSource}&authMechanism=${authMechanism}`;
11
12const client = new MongoClient(uri);
13
14async 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}
28run().catch(console.dir);
1import pymongo
2from urllib.parse import quote_plus
3
4username = quote_plus('<username>')
5password = quote_plus('<password>')
6cluster = '<clusterName>'
7authSource = '<authSource>'
8authMechanism = '<authMechanism>'
9
10uri = 'mongodb+srv://' + username + ':' + password + '@' + cluster + '/?authSource=' + authSource + '&authMechanism=' + authMechanism
11
12client = pymongo.MongoClient(uri)
13
14result = client["<dbName"]["<collName>"].find()
15
16# print results
17for 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).

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.

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 el ISP. Puede que ese servidor DNS no admita búsquedas SRV que utiliza el formato de la 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

Puedes ajustar la configuración de tu red para usar la DNS pública de Google en lugar de los servidores DNS de su ISP.

Después de que se actualice la configuración de la red para usar un servidor DNS público, se debe realizar la conexión al clúster.

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 --uri con una cadena de conexión no SRV (mongodb://).

  • Utiliza la opción --host para especificar el host al que deseas conectarte.

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 comenzar con la resolución de problemas, necesitarás tanto el nombre DNS SRV, así como los nombres de host individuales y los números de puerto de los nodos de la cadena de conexión de la lista de nodos iniciales para el clúster.

  1. Sigue los pasos 1-6 en Conectar tu aplicación.

  2. En el paso 7, selecciona la versión más reciente del controlador que has elegido.

  3. El nombre DNS SRV comienza después del símbolo @ que sigue a la contraseña y termina con .mongodb.net. - Por ejemplo, cluster0.dfget.mongodb.net.

  1. Sigue los pasos 1-6 en Conectar tu aplicación.

  2. En el paso 7, selecciona la versión más reciente del controlador que has elegido.

  3. En el paso 7, selecciona la versión más antigua del controlador bajo API no estable

    • Cada uno de los nombres de host está en una lista separada por comas que comienza después del símbolo @ que sigue a la contraseña y termina con .mongodb.net.

  4. Anota los números de puerto después de cada uno de los nombres de host.

    • La cadena de conexión del clúster puede tener una variedad de nombres de host y puertos, dependiendo de su topología y del método de conexión.

    • Para más información sobre cómo funcionan los nodos privados, consulte Configurar nodos privados.

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 de DNS SRV:

    Linux/MacOS:

    dig SRV _mongodb._tcp.<DNS SRV name>

    Windows:

    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, ejecute este comando:

    Linux/MacOS:

    dig <Node Hostname>

    Windows:

    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, ejecute este comando:

    Linux/Mac OS:

    ping -c 10 <Node Hostname>

    Windows:

    ping /n 10 <Node Hostname>
  • Prueba de conexión de red de extremo a extremo:

    Linux/Mac/OS:

    nc -zv <Node Hostname> <Node Port Number>

    Windows:

    Test-NetConnection -Port <Node Port Number> -InformationLevel "Detailed" -ComputerName "<Node Hostname>"

Volver

Funciones de Google Cloud