连接问题 - Amazon DocumentDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

连接问题

连接时遇到问题? 以下内容介绍了一些常见的情况和如何解决这些问题。

无法 Connect 到 Amazon DocumentDB 终端节点

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

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

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

从公有终端节点连接

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

尝试直接从公有终端节点(例如笔记本电脑或本地开发计算机)连接到 Amazon DocumentDB 集群将失败。Amazon DocumentDB 仅面向 Virtual Private Cloud (VPC),并且当前不支持公有终端节点。因此,您无法从笔记本电脑或 VPC 外部的本地开发环境直接连接到您的 Amazon DocumentDB 集群。

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

跨区域连接

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

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

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

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

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

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

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

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

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

[ [ "us-east-1a" ] ]

从不同的 Amazon VPC

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

如果您的 Amazon DocumentDB 集群和 Amazon EC2 实例位于同一 Amazon Web Services 区域 ,但不在同一 Amazon DocumentDB 集群中,则除非在两个 Amazon VPC 之间启用了 VPC 对等,否则无法直接连接到您的 Amazon DocumentDB 集群。

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

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

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

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

安全组阻止入站连接

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

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

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

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

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

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

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

测试与 Amazon DocumentDB 实例的连接

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

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

nc -zv cluster-endpoint port

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

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!

连接到无效终端节点

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

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

该输出类似于以下示例:

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

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

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

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

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

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