连接问题

是否有连接问题? 下面是一些常见的场景以及如何解决它们。

无法连接到 Amazon DocumentDB 终端节点

当您尝试连接到 Amazon DocumentDB 时,以下错误消息是您可能收到的最常见的错误消息之一。

  1. connecting to: mongodb://docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-
  2. 1.docdb.amazonaws.com:27017/
  3. 2018-11-14T14:33:46.451-0800 W NETWORK [thread1] Failed to connect to
  4. 172.31.91.193:27017 after 5000ms milliseconds, giving up.
  5. 2018-11-14T14:33:46.452-0800 E QUERY [thread1] Error: couldn't connect to server
  6. docdb-2018-11-08-21-47-27.cluster-ccuszbx3pn5e.us-east-1.docdb.amazonaws.com:27017,
  7. connection attempt failed :
  8. connect@src/mongo/shell/mongo.js:237:13
  9. @(connect):1:6
  10. exception: connect failed

此错误消息通常意味着您的客户端(此示例中为 mongo shell)无法访问 Amazon DocumentDB 终端节点。以下几个原因可能会导致出现此情况:

从公有终端节点连接

您正在尝试直接通过笔记本电脑或本地开发计算机连接到 Amazon DocumentDB 集群。

尝试连接到 Amazon DocumentDB 直接从公共端点(例如笔记本电脑或本地开发机器)中直接集群将失败。 Amazon DocumentDB 是虚拟私有云(VPC),目前不支持公共端点。因此,您无法从笔记本电脑或 VPC 外部的本地开发环境直接连接到 Amazon DocumentDB 集群。

连接到 Amazon DocumentDB 群集来自 Amazon VPC,您可以使用SSH隧道。有关更多信息,请参阅 从 Amazon VPC 外部连接到 Amazon DocumentDB集群. 此外,如果您的开发环境在不同的 Amazon VPC,您也可以使用VPC对等并连接到 Amazon DocumentDB 群集来自另一个 Amazon VPC 在同一区域或不同区域。

跨区域连接

您正在尝试连接到另一个区域中的 Amazon DocumentDB 集群。

如果您尝试连接到 Amazon DocumentDB 群集来自 Amazon EC2 除群集区域以外的区域中的实例—例如,尝试连接到 美国东部(弗吉尼亚北部)地区 (美国-东部-1) 美国西部(俄勒冈)区域 (美国西部2)—连接将失败。

要验证您的 Amazon DocumentDB 集群的区域,请运行以下命令。区域位于终端节点中。

  1. aws docdb describe-db-clusters \
  2. --db-cluster-identifier sample-cluster \
  3. --query 'DBClusters[*].Endpoint'

此操作的输出将类似于下文。

  1. [
  2. "sample-cluster.node.us-east-1.docdb.amazonaws.com"
  3. ]

要验证您的 EC2 实例的区域,请运行以下命令。

  1. aws ec2 describe-instances \
  2. --query 'Reservations[*].Instances[*].Placement.AvailabilityZone'

此操作的输出将类似于下文。

  1. [
  2. [
  3. "us-east-1a"
  4. ]
  5. ]

从不同的连接 Amazon VPCs

您正在尝试连接到 Amazon DocumentDB 从VPC的群集中不同于 Amazon VPC 您的群集已部署到。

如果两者都是 Amazon DocumentDB 群集和 Amazon EC2 实例位于同一个AWS区域,但不是相同的 Amazon VPC,您无法直接连接至您的 Amazon DocumentDB 除非在两个 Amazon VPC。

验证 Amazon VPC 您的 Amazon DocumentDB 实例,运行以下命令。

  1. aws docdb describe-db-instances \
  2. --db-instance-identifier sample-instance \
  3. --query 'DBInstances[*].DBSubnetGroup.VpcId'

验证 Amazon VPC 您的 Amazon EC2 实例,运行以下命令。

  1. aws ec2 describe-instances \
  2. --query 'Reservations[*].Instances[*].VpcId'

安全组阻止入站连接

您正在尝试连接到 Amazon DocumentDB 集群,并且该集群的安全组不允许集群端口(默认端口:27017)上的入站连接。

假设您的 Amazon DocumentDB 群集和 Amazon EC2 实例同样位于同一区域, Amazon VPC 并使用 Amazon VPC 安全组。如果您无法连接到 Amazon DocumentDB 群集,可能原因是您的群集的安全组(即防火墙)不允许您选择的端口上的入站连接 Amazon DocumentDB 群集(默认端口为27017)。

要验证您的 Amazon DocumentDB 集群的端口,请运行以下命令。

  1. aws docdb describe-db-clusters \
  2. --db-cluster-identifier sample-cluster \
  3. --query 'DBClusters[*].[DBClusterIdentifier,Port]'

要获取您的集群的 Amazon DocumentDB 安全组,请运行以下命令。

  1. aws docdb describe-db-clusters \
  2. --db-cluster-identifier sample-cluster \
  3. --query 'DBClusters[*].[VpcSecurityGroups[*],VpcSecurityGroupId]'

要检查您的安全组的入站规则,请参阅 Amazon EC2 文档中的以下主题:

测试与 Amazon DocumentDB 实例的连接

您可以使用常见的 Linux 或 Windows 工具测试与集群的连接。

从 Linux 或 Unix 终端测试此连接,方法为输入以下命令(将 cluster-endpoint 替换为终端节点并将 port 替换为实例的端口)。

  1. nc -zv cluster-endpoint port

以下是示例操作和返回值的示例:

  1. nc -zv docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017
  2. Connection to docdbTest.d4c7nm7stsfc0.us-west-2.docdb.amazonaws.com 27017 port [tcp/*] succeeded!

连接到无效终端节点

在连接到 Amazon DocumentDB 集群并且使用的是无效的集群终端节点时,将出现与以下内容下类似的错误。

  1. mongo --ssl \
  2. --host sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 \
  3. --sslCAFile rds-combined-ca-bundle.pem \
  4. --username <user-name> \
  5. --password <password>

该输出类似于以下示例:

  1. MongoDB shell version v3.6
  2. connecting to: mongodb://sample-cluster.node.us-east-1.docdb.amazonaws.com:27017/
  3. 2018-11-14T17:21:18.516-0800 I NETWORK [thread1] getaddrinfo("sample-cluster.node.us-east-1.docdb.amazonaws.com") failed:
  4. nodename nor servname provided, or not known 2018-11-14T17:21:18.537-0800 E QUERY [thread1] Error: couldn't initialize
  5. connection to host sample-cluster.node.us-east-1.docdb.amazonaws.com, address is invalid :
  6. connect@src/mongo/shell/mongo.js:237:13@(connect):1:6
  7. exception: connect failed

要获取集群的有效终端节点,请运行以下命令:

  1. aws docdb describe-db-clusters \
  2. --db-cluster-identifier sample-cluster \
  3. --query 'DBClusters[*].[Endpoint,Port]'

要获取实例的有效终端节点,请运行以下命令:

  1. aws docdb describe-db-instances \
  2. --db-instance-identifier sample-instance \
  3. --query 'DBInstances[*].[Endpoint.Address,Endpoint.Port]'

有关更多信息,请参阅了解 Amazon DocumentDB 终端节点