Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/

Solução de problemas de conexão

Nesta página

  • O botão Cluster Connect está desabilitado
  • Conectando um endereço IP que não está na lista de acesso IP
  • Falha na autenticação do cluster
  • Muitas conexões abertas em seu cluster
  • Desempenho degradado em clusters fragmentados durante picos nas contagens de conexões
  • Tentando se conectar por trás de um firewall
  • Disponibilidade do cluster
  • Solução de problemas do MongoDB Compass
  • Problemas com a cadeia de conexão

Esta página descreve problemas comuns de conexão e possíveis soluções.

Para saber mais sobre conectar a um cluster do Atlas, consulte o tutorial Iniciar com Atlas.

Observação

Se você é um cliente corporativo e precisa de suporte, fabra um ticket. Para obter suporte da comunidade, visite Recursos da MongoDB Community.

Observação

As instâncias sem servidor não permitem conexão por meio de determinados drivers ou versões de drivers no momento. Para saber mais, consulte Limitações de instância sem servidor.

O botão Connect do seu cluster pode estar desabilitado se o cluster estiver no estado de provisionamento. Seu cluster precisa ser provisionado quando for implantado pela primeira vez. Os clusters também devem ser provisionados quando você os dimensiona para cima ou para baixo. O processo provisório pode levar até 10 minutos, após o qual o botão Connect será habilitado.

Antes de se conectar ao seu cluster do Atlas, verifique se você adicionou o endereço IP do seu host à lista de acesso IP do projeto do seu cluster. O Atlas permite conexões de clientes somente a partir de endereços IP e intervalos de endereçosCIDR na lista de acesso IP.

Para se conectar ao Atlas, você deve autenticar com um usuário do banco de dados MongoDB. Para criar um usuário de banco de dados para seu cluster, consulte Configurar usuários do banco de dados.

Se você criou um usuário e está com problemas para autenticar, tente o seguinte:

  • Verifique se você está usando o nome de usuário e a senha corretos para o usuário do banco de dados e se está se conectando ao cluster correto.

  • Verifique se você está especificando o banco de dados correto do authSource em sua cadeia de conexão.

  • Se você tiver um caractere especial em sua senha, consulte Caracteres especiais na senha da cadeia de conexão.

O Atlas define limites para conexões de entrada simultâneas para um cluster. Para clusters, isso se baseia na camada do cluster. Se você tentar se conectar quando estiver nesse limite, o MongoDB exibirá um erro informando connection refused because too many open connections.

Para uma comparação detalhada das camadas do cluster e suas conexões simultâneas máximas, consulte Limites de conexão e camada de cluster.

  • Feche todas as conexões abertas ao seu cluster que não estejam em uso no momento.

  • Escale seu cluster para um nível mais alto para permitir mais conexões simultâneas.

  • Reinicie seu aplicativo.

  • Para evitar esse problema no futuro, considere usar a opção de string de conexão maxPoolSize para limitar o número de conexões no pool de conexões.

Para saber como corrigir esse problema, consulte Corrigir problemas de conexão.

O Atlas pode gerar uma cadeia de conexão SRV otimizada para clusters fragmentados usando os balanceadores de carga do seu serviço de ponto de extremidade privado. Quando você utiliza uma cadeia de conexão otimizada, o Atlas limita o número de conexões por mongos entre seu aplicativo e seu agrupamento fragmentado. As conexões limitadas por mongos melhoram o desempenho durante picos nas contagens de conexões.

Para saber mais sobre cadeias de conexão otimizadas para clusters fragmentados por trás de um ponto de extremidade privado, consulte Aprimorar o desempenho da conexão dos clusters fragmentados por trás de um ponto de extremidade privado.

O Atlas utiliza um CDN para fornecer conteúdo rapidamente. Se a sua organização usa um firewall, adicione o seguinte host Atlas CDN à lista de permissões do firewall para evitar problemas de acesso à UI do Atlas: https://assets.mongodb-cdn.com/.

O cluster do Atlas opera na porta 27017. Você deve conseguir acessar essa porta para se conectar aos clusters. Além disso, certifique-se de que as portas apropriadas estejam abertas para o seguinte:

  • Nos clusters fragmentados, conceda acesso à porta 27016.

  • Para o BI Connector, conceda acesso à porta 27015.

Você pode verificar sua capacidade de acessar uma porta usando o Outgoing port tester de terceiros.

Exemplo

Se não conseguir acessar essas portas, verifique as configurações do firewall do sistema e certifique-se de que elas não estejam bloqueando o acesso a essas portas.

Se você estiver usando uma string de conexão mongodb+srv:// e seu driver ou shell não conseguir encontrar o host do DNS do cluster do Atlas, o cluster poderá ser pausado ou excluído. Verifique se o cluster existe. Se for um cluster pausado, você poderá retomá-lo, se necessário.

Observação

O Atlas pausa automaticamente M0 clusters ociosos após 60 dias sem conexões.

Se você usar o MongoDB Compass para se conectar ao cluster e tiver problemas, consulte:

Se você utiliza um certificado X.509 auto gerenciado ou um certificado X.509 gerado automaticamente gerenciado pelo Atlas para autenticar no MongoDB database, quando conectar ao MongoDB Compass, você deverá:

  1. No MongoDB Compass, escolha Fill in connection fields individually.

  2. No menu suspenso Authentication, selecione X.509.

  3. Selecione More Options.

  4. No menu suspenso SSL, selecione Server and Client Validation.

  5. Adicione o mesmo caminho para o certificado gerenciado Atlas baixado ou o certificado autogerenciado (dependendo do qual você utiliza) para cada um destes campos: Certificate Authority, Client Certificate e Client Private Key.

Para saber mais, consulte Conectar ao MongoDB na documentação do MongoDB Compass.

O formato de cadeia de conexão que você utiliza para conectar ao Atlas depende de vários fatores, incluindo:

Verifique sua cadeia de conexão em um ambiente de teste antes de colocá-la em produção.

Se sua senha incluir caracteres especiais e você estiver usando sua senha no URI de cadeia de conexão, codifique os caracteres especiais.

Ao tentar atualizar uma senha com um caractere especial que requer codificação percentual, a seguinte mensagem de erro aparece:

This password contains special characters which will be URL-encoded.

Observação

Os seguintes caracteres e o caractere de espaço devem ser convertidos usando a codificação percentual se incluídos em um nome de usuário ou senha:

: / ? # [ ] @ ! $ & ' ( ) * , ; = %

Por exemplo, se a sua senha no texto sem formatação for p@ssw0rd'9'!, você precisará codificar sua senha como:

p%40ssw0rd%279%27%21

➤ Use o menu suspenso Selecione a linguagem para definir a linguagem do exemplo de codificação nesta seção.


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

Não codifique caracteres especiais na sua senha se você a estiver usando fora de um URI de string de conexão (por exemplo, colando-a no mongosh).

Se você vir esta mensagem de erro, é provável que seu driver esteja desatualizado. Para ver instruções sobre como atualizar o driver, consulte a documentação específica do driver.

Ao usar o formato de cadeia de conexão da lista de sementes de DNS para se conectar ao Atlas, você pode ver o seguinte erro:

DNSHostNotFound: Failed to look up service "<MongoDB service name>"

Esse erro pode ocorrer ao usar o servidor DNS padrão que seu ISP fornece. Esse servidor DNS pode não oferecer suporte a pesquisas SRV que o formato de cadeia de conexão da lista de sementes DNS usa.

Para resolver o problema, você pode tentar alterar sua configuração de DNS para usar um servidor DNS público.

Exemplo

Você pode definir suas configurações de rede para usar o DNS público do Google em vez dos servidores de DNS do seu ISP.

Depois de atualizar suas configurações de rede para usar um servidor DNS público, conecte-se ao cluster.

Se estiver executando o Ubuntu 18.04 e usando o formato de string de conexão da lista de sementes do DNS (mongodb+srv://) para conexão com o Atlas por uma das Database Tools do MongoDB (mongodump, mongorestore etc.), você poderá encontrar o seguinte erro:

lookup nta8e.mongodb.net on 123.45.67.8:27017: cannot unmarshal DNS message

Em caso afirmativo, use uma das seguintes opções de conexão:

  • utilize a opção --uri com uma string de conexão não SRV (mongodb://).

  • utilize a opção --host para especificar o host para conectar.

Ao usar o formato de string de conexão da lista de sementes DNS (mongodb+srv://) com um driver ou Compass, você pode receber o seguinte erro:

Error: querySrv ECONNREFUSED _mongodb._tcp.<SRV Record>

Para iniciar a solução de problemas, você precisará tanto do nome DNS SRV quanto dos nomes de host e números de porta individuais dos nós a partir da string de conexão da lista de sementes para o cluster.

  1. Siga as etapas 1-6 em Conecte seu aplicativo.

  2. Na Etapa 7, selecione a versão mais recente do driver que você escolheu.

  3. O nome DNS SRV começa após o símbolo @ que segue a senha e termina com .mongodb.net. - Por exemplo, cluster0.dfget.mongodb.net.

  1. Siga as etapas 1-6 em Conecte seu aplicativo.

  2. Na Etapa 7, selecione a versão mais recente do driver que você escolheu.

  3. No Passo 7, selecione a versão mais antiga do driver em API não estável

    • Cada um dos nomes de host está em uma lista separada por vírgula que começa após o símbolo @ que segue a senha e termina com .mongodb.net.

  4. Anote os números das portas após cada um dos nomes de host.

    • A string de conexão do cluster pode incluir uma variedade de nomes de host e portas, dependendo de sua topologia e do método de conexão.

    • Para mais informações sobre o funcionamento dos Pontos de Extremidade Privados, consulte Configurar Pontos de Extremidade Privados.

Execute os seguintes comandos em um terminal ou prompt de comando no servidor de aplicação que está enfrentando o problema:

  • Teste de resolução de SRV do DNS:

    Linux/MacOS:

    dig SRV _mongodb._tcp.<DNS SRV name>

    Windows:

    nslookup -debug -q=SRV _mongodb._tcp.<DNS SRV name>

    Na SEÇÃO DE RESPOSTA da resposta, você deve ver um resultado para cada um dos nós no cluster. - Por exemplo:

    ;; 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.
  • Testes de resolução de nome de host de nó DNS:

    Para cada nome de host no cluster, execute este comando:

    Linux/MacOS:

    dig <Node Hostname>

    Windows:

    nslookup -debug -q=A <Node Hostname>

    Na SEÇÃO DE RESPOSTA da resposta, você deve ver o endereço IP para o qual o nome de host do DNS foi resolvido.

    • Por exemplo:

    ;; ANSWER SECTION: cluster0-shard-00-00.ag9in.mongodb.net. 60 IN A 10.10.10.10
  • Teste de ping:

    Observação

    As solicitações ICMP podem ser bloqueadas pelo provedor de nuvem em conexões de pontos de extremidade privados.

    Para cada nome de host no cluster, execute este comando:

    Linux/Mac OS:

    ping -c 10 <Node Hostname>

    Windows:

    ping /n 10 <Node Hostname>
  • Teste de conexão de rede de ponta a ponta:

    Linux/Mac/OS:

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

    Windows:

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

Voltar

Google cloud