As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Está tendo problemas para se conectar? Aqui estão alguns cenários comuns e como resolvê-los.
Tópicos
Não é possível conectar-se a um endpoint do Amazon DocumentDB
Quando você tentar se conectar ao Amazon DocumentDB, a mensagem de erro a seguir é uma das mais comuns que você pode receber.
connecting to: mongodb://docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-
1.docdb.amazonaws.com:27017/
2018-11-14T14:33:46.451-0800 W NETWORK [thread1] Failed to connect to
172.31.91.193:27017 after 5000ms milliseconds, giving up.
2018-11-14T14:33:46.452-0800 E QUERY [thread1] Error: couldn't connect to server
docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017,
connection attempt failed :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed
O que essa mensagem de erro normalmente significa é que seu cliente (o shell do mongo, nesse exemplo) não pode acessar o endpoint do Amazon DocumentDB. Este pode ser o caso por vários motivos:
Tópicos
Conectar de endpoints públicos
Você está tentando se conectar a um cluster do Amazon DocumentDB diretamente do seu laptop ou máquina de desenvolvimento local.
Tentar se conectar a um cluster do Amazon DocumentDB diretamente de um endpoint público, como seu laptop ou máquina de desenvolvimento local, falhará. O Amazon DocumentDB é apenas uma nuvem privada virtual (VPC) e não oferece suporte a endpoints públicos no momento. Assim, você não poderá se conectar diretamente ao seu cluster do Amazon DocumentDB do seu laptop nem do ambiente de desenvolvimento local fora da sua VPC.
Para se conectar a um cluster do Amazon DocumentDB de fora de uma Amazon VPC, você pode usar o túnel SSH. Para obter mais informações, consulte Conectar-se a um cluster do Amazon DocumentDB de fora de uma Amazon VPC. Além disso, se o ambiente de desenvolvimento estiver em outra Amazon VPC, você também poderá usar o VPC Peering e conectar-se ao seu cluster do Amazon DocumentDB de outra na mesma região ou em uma região diferente.
Conexões inter-regionais
Você está tentando se conectar a um cluster do Amazon DocumentDB em outra região.
Se você tentar se conectar a um cluster Amazon DocumentDB a partir de uma EC2 instância da Amazon em uma região diferente da região do cluster — por exemplo, tentando se conectar a um cluster na região Leste dos EUA (Norte da Virgínia) (us-east-1) da região Oeste dos EUA (Oregon) (us-west-2) — a conexão falhará.
Para verificar a região do seu cluster do Amazon DocumentDB, execute o comando a seguir. A região está no endpoint.
aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].Endpoint'
A saída dessa operação é semelhante à seguinte.
[
"sample-cluster.node.us-east-1.docdb.amazonaws.com"
]
Para verificar a região da sua EC2 instância, execute o comando a seguir.
aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].Placement.AvailabilityZone'
A saída dessa operação é semelhante à seguinte.
[
[
"us-east-1
a"
]
]
Conectando-se a partir de uma Amazon diferente VPCs
Você está tentando se conectar a um cluster do Amazon DocumentDB a partir de uma VPC diferente da Amazon VPC na qual seu cluster está implantado.
Se o cluster do Amazon DocumentDB e a EC2 instância da Amazon estiverem no mesmo Região da AWS, mas não no mesmo Amazon VPC, você não poderá se conectar diretamente ao seu cluster do Amazon DocumentDB, a menos que o emparelhamento de VPC esteja habilitado entre os dois Amazon. VPCs
Para verificar a Amazon VPC de sua instância do Amazon DocumentDB, execute o comando a seguir.
aws docdb describe-db-instances \ --db-instance-identifier sample-instance \ --query 'DBInstances[*].DBSubnetGroup.VpcId'
Para verificar a Amazon VPC da sua EC2 instância da Amazon, execute o comando a seguir.
aws ec2 describe-instances \ --query 'Reservations[*].Instances[*].VpcId'
O grupo de segurança bloqueia as conexões de entrada.
Você está tentando se conectar a um cluster do Amazon DocumentDB e o grupo de segurança do cluster não permite conexões de entrada na porta do cluster (porta padrão: 27017).
Suponha que seu cluster Amazon DocumentDB e sua EC2 instância da Amazon estejam na mesma região e na Amazon VPC e usem o mesmo grupo de segurança da Amazon VPC. Se você não conseguir se conectar ao cluster do Amazon DocumentDB, a causa provável é que o grupo de segurança (ou seja, firewall) do cluster não permite conexões de entrada na porta escolhida para o cluster do Amazon DocumentDB (a porta padrão é 27017 ).
Para verificar a porta do seu cluster do Amazon DocumentDB, execute o comando a seguir.
aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[DBClusterIdentifier,Port]'
Para obter o seu grupo de segurança do Amazon DocumentDB para o seu cluster, execute o seguinte comando.
aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[VpcSecurityGroups[*],VpcSecurityGroupId]'
Para verificar as regras de entrada do seu grupo de segurança, consulte os seguintes tópicos na EC2 documentação da Amazon:
Problema de preferência de leitura do driver Java Mongo
As preferências de leitura do cliente não são respeitadas e alguns clientes não podem gravar no Amazon DocumentDB após o failover, a menos que sejam reinicializados.
Esse problema, descoberto pela primeira vez no Java Mongo Driver 3.7.x, ocorre quando um cliente estabelece uma conexão com o Amazon DocumentDB usando MongoClientSettings
e, especificamente, ao encadear o método. applyToClusterSettings
As configurações do MongoClient cluster podem ser definidas usando alguns métodos diferenteshosts()
, comorequiredReplicaSetName()
, mode()
e.
Quando o cliente especifica apenas um host no método hosts()
, o modo é definido como em ClusterConnectionMode.SINGLE
vez de ClusterConnectionMode.MULTIPLE
Isso faz com que o cliente desconsidere a preferência de leitura e se conecte apenas ao servidor configurado em hosts()
. Portanto, mesmo que as configurações do cliente sejam inicializadas como abaixo, todas as leituras ainda irão para a primária em vez da secundária.
final ServerAddress serverAddress0 = new ServerAddress("cluster-endpoint", 27317));
final MongoCredential credential = MongoCredential.createCredential("xxx",
"admin", "xxxx".toCharArray());
final MongoClientSettings settings = MongoClientSettings.builder()
.credential(credential)
.readPreference(ReadPreference.secondaryPreferred())
.retryWrites(false)
.applyToSslSettings(builder -> builder
.enabled(false))
.applyToClusterSettings(builder -> builder.hosts(
Arrays.asList(serverAddress0
))
.requiredReplicaSetName("rs0"))
.build();
MongoClient mongoClient = MongoClients.create(settings);
Caso de failover
Usando as configurações de conexão do cliente acima, se houver um failover e uma atualização atrasada do registro DNS para o endpoint do gravador do cluster, o cliente ainda tentará emitir gravações no gravador antigo (agora leitor após o failover). Isso resulta em um erro do lado do servidor (não principal) que não é tratado adequadamente pelo driver Java (isso ainda está sob investigação). Assim, o cliente pode ficar em mau estado até que o servidor da aplicação seja reinicializado, por exemplo.
Há duas soluções alternativas para isso:
-
Clientes que se conectam ao Amazon DocumentDB por meio de uma cadeia de conexão não terão esse problema, pois
ClusterConnectionMode
serão configurados comoMULTIPLE
ao definir a preferência de leitura.MongoClientURI mongoClientURI = new MongoClientURI("mongodb://usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred"); MongoClient mongoClient = MongoClients.create(mongoClientURI.getURI());
Ou usando o construtor
MongoClientSettings
com o métodoapplyConnectionString
.final MongoClientSettings settings = MongoClientSettings.builder() .credential(credential) .applyConnectionString(new ConnectionString("usr:pass:cluster-endpoint:27317/test?ssl=false&replicaSet=rs0&readpreference=secondaryPreferred")) .retryWrites(false) .applyToSslSettings(builder → builder .enabled(false)) .build(); MongoClient mongoClient = MongoClients.create(settings);
-
Definido explicitamente de
ClusterConnectionMode
paraMULTIPLE
. Isso só é necessário ao usarapplyToClusterSettings
ehosts().size() == 1
.final ServerAddress serverAddress0 = new ServerAddress("cluster-endpoint", 27317)); final MongoCredential credential = MongoCredential.createCredential("xxx","admin", "xxxx".toCharArray()); final MongoClientSettings settings = MongoClientSettings.builder() .credential(credential) .readPreference(ReadPreference.secondaryPreferred()) .retryWrites(false) .applyToSslSettings(builder → builder .enabled(false)) .applyToClusterSettings(builder → builder .hosts(Arrays.asList(serverAddress0)) .requiredReplicaSetName("rs0")) .mode(ClusterConnectionMode.MULTIPLE)) .build(); MongoClient mongoClient = MongoClients.create(settings);
Testar uma conexão com uma instância do Amazon DocumentDB
Você pode testar sua conexão com um cluster usando ferramentas comuns do Linux ou Windows.
Em um terminal Linux ou Unix, teste a conexão inserindo o seguinte (substitua cluster-endpoint
pelo endpoint e port
pela porta da sua instância):
nc -zv cluster-endpoint port
Veja a seguir um exemplo de operação e o valor de retorno:
nc -zv docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 Connection to docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 port [tcp/*] succeeded!
Conectar a um endpoint inválido
Ao conectar-se a um cluster do Amazon DocumentDB e usar um endpoint de cluster inválido, um erro semelhante ao seguinte será exibido.
mongo --ssl \ --host sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 \ --sslCAFile global-bundle.pem \ --username <user-name> \ --password <password>
O resultado se parece com:
MongoDB shell version v3.6
connecting to: mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/
2018-11-14T17:21:18.516-0800 I NETWORK [thread1] getaddrinfo("sample-cluster.node.us-east-1.docdb.amazonaws.com") failed:
nodename nor servname provided, or not known 2018-11-14T17:21:18.537-0800 E QUERY [thread1] Error: couldn't initialize
connection to host sample-cluster.node.us-east-1.docdb.amazonaws.com, address is invalid :
connect@src/mongo/shell/mongo.js:237:13@(connect):1:6
exception: connect failed
Para obter o endpoint válido para um cluster, execute o seguinte comando:
aws docdb describe-db-clusters \ --db-cluster-identifier sample-cluster \ --query 'DBClusters[*].[Endpoint,Port]'
Para obter o endpoint válido para uma instância, execute o seguinte comando:
aws docdb describe-db-instances \ --db-instance-identifier sample-instance \ --query 'DBInstances[*].[Endpoint.Address,Endpoint.Port]'
Para obter mais informações, consulte Noções básicas sobre endpoints do Amazon DocumentDB.
A configuração do driver afeta o número de conexões
Ao usar o driver do cliente para se conectar a um cluster do Amazon DocumentDB, é importante considerar o parâmetro de configuração maxPoolSize
. A configuração maxPoolSize
determina o número máximo de conexões que o driver do cliente manterá em seu pool de conexões.