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 Cluster Connect está desabilitado
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.
Conectando um endereço IP que não está na lista de acesso IP
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.
Falha na autenticação do cluster
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.
Possíveis soluções
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.
Muitas conexões abertas em seu cluster
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.
Possíveis soluções
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.
Desempenho degradado em clusters fragmentados durante picos nas contagens de conexões
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.
Tentando se conectar por trás de um firewall
Conectando-se à interface de usuário do Atlas
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/
.
Conexão a um cluster
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
Para verificar sua capacidade de acessar a porta 27017, acesse http://portquiz.net:27017.
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.
Disponibilidade do cluster
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.
Solução de problemas do MongoDB Compass
Se você usar o MongoDB Compass para se conectar ao cluster e tiver problemas, consulte:
Conexão recusada usando a cadeia de conexão SRV nesta seção.
Erros de conexão do Compass na documentação do MongoDB Compass.
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á:
No MongoDB Compass, escolha Fill in connection fields individually.
No menu suspenso Authentication, selecione
X.509
.Selecione More Options.
No menu suspenso SSL, selecione Server and Client Validation.
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.
Problemas com a cadeia de conexão
Formato de cadeia de conexão incorreto
O formato de cadeia de conexão que você utiliza para conectar ao Atlas depende de vários fatores, incluindo:
Sua versão
mongosh
. Para saber mais, consulte Conectar viamongosh
.Sua versão do driver. Para saber mais, consulte Conectar via drivers.
Verifique sua cadeia de conexão em um ambiente de teste antes de colocá-la em produção.
Caracteres especiais na senha da cadeia de conexã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.
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
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
).
Cadeia de conexão incompatível com a versão do driver
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.
O DNS do provedor de serviços de internet bloqueia a cadeia de conexão
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.
Erro de cadeia de conexão com ferramentas de banco de dados no Ubuntu 18.04
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.
Conexão recusada usando cadeia de conexão SRV
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.
Para encontrar o nome DNS SRV:
Siga as etapas 1-6 em Conecte seu aplicativo.
Na Etapa 7, selecione a versão mais recente do driver que você escolheu.
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
.
Para encontrar os nomes de host e os números de porta dos nodes:
Siga as etapas 1-6 em Conecte seu aplicativo.
Na Etapa 7, selecione a versão mais recente do driver que você escolheu.
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
.
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.
Testar a conectividade básica da rede:
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>"