如何排除 AWS DMS 端点连接故障?

上次更新时间:2022 年 8 月 5 日

我无法连接到我的 AWS Database Migration Service (AWS DMS) 端点。为什么测试连接出现故障,我该如何排查这些连接方面的问题?

简短描述

在测试从复制实例到源端点或目标端点的连接时,通常会出现两种类型的错误:

1.    如果错误是由于复制实例与源数据库或目标数据库之间的连接问题而导致的,会显示类似以下内容的错误:

  • "Application-Status: 1020912, Application-Message: Failed to connect Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: HYT00 NativeError: 0 Message: [unixODBC][Microsoft][ODBC Driver 13 for SQL Server]Login timeout expired ODBC general error."
  • "Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: 08001 NativeError: 101 Message: [unixODBC]timeout expired ODBC general error."
  • "Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider ODBC general error., Application-Detailed-Message: RetCode: SQL_ERROR SqlState: HY000 NativeError: 2005 Message: [unixODBC][MySQL][ODBC 5.3(w) Driver]Unknown MySQL server host 'mysql1.xxxxx.us-east-1.rds.amazonaws.com' (22) ODBC general error."

2.    如果错误是由于本机数据库错误(例如数据库权限或身份验证错误)而导致的,则会显示类似以下内容的错误:

  • "Application-Status: 1020912, Application-Message: Cannot connect to ODBC provider Network error has occurred, Application-Detailed-Message: RetCode: SQL_ERROR SqlState: 08001 NativeError: 101 Message: [unixODBC]FATAL: password authentication failed for user "dmsuser" ODBC general error."

根据您收到的错误类型以及您的网络配置,参阅相应的解决方法部分。

注意:创建 AWS DMS 源端点和目标端点后,最好先测试从 AWS DMS 复制实例到这些端点的连接。在开始 AWS DMS 迁移任务之前执行此操作。否则,任务可能会因为端点的连接问题而失败。

解决方法

解决 AWS 托管资源的连接问题

验证源数据库或目标数据库与复制实例之间是否可以建立连接。根据您的使用案例和网络基础设施,将源数据库或目标数据库连接到公有子网或私有子网中的复制实例。有关更多信息,请参阅针对复制实例设置网络

注意:AWS DMS 3.4.7 及更高版本要求您将 AWS DMS 配置为使用 VPC 端点或使用公有路由到与某些 Amazon Web Services 交互的所有源端点和目标端点。如果您的 DMS 端点在早期版本上测试成功,但在更高版本上测试失败,请参阅将 VPC 端点配置为 AWS DMS 源端点和目标端点

检查您的复制实例配置

在复制实例中,确认您的配置包含以下内容:

  • IP 地址的出站规则,其中源数据库或目标数据库的端口位于安全组中。默认情况下,安全组的出站规则允许所有流量。安全组是有状态的,因此您无需修改默认的入站规则
  • IP 地址的出站规则,其中源数据库或目标数据库的端口位于网络 ACL 中。默认情况下,网络访问控制列表(ACL)出站规则允许所有流量
  • IP 地址的入站规则,其中源数据库或目标数据库的临时端口位于网络 ACL 中。默认情况下,网络 ACL 的入站规则允许所有流量。

检查源数据库或目标数据库配置

    在源数据库或目标数据库中,确认您的配置包含以下内容:

    • 复制实例的 IP 地址或复制实例子网组的 CIDR入站规则,其中源数据库或目标数据库的端口位于安全组中。安全组是有状态的,因此您无需修改默认设置的出站规则
      注意:要查找 IP 地址和 CIDR,请参阅用于确定子网组的 IP 地址和 CIDR 的步骤。
    • 复制实例的 IP 地址或复制实例子网组的 CIDR 的入站规则,其中源数据库或目标数据库的端口位于网络 ACL 中。确认对允许的 IP 地址和端口无显式拒绝规则。
    • 复制实例子网组的 IP 地址或 CIDR 的出站规则,其中临时端口位于网络 ACL 中。默认情况下,网络 ACL 的出站规则允许所有流量。
    • 最好将网络配置为允许复制实例子网组的 CIDR。在失效转移或主机更换事件期间,复制实例的 IP 地址会发生变化。

    确定子网组的 IP 地址和 CIDR

    要确定要设置入站和出站规则的子网组的 IP 地址和 CIDR,请使用 AWS DMS 控制台或 CLI。

    使用 AWS 控制台:

    1. 访问 AWS DMS 控制台
    2. 从导航窗格中,选择 Replication instances(复制实例)。
    3. 选择您的复制实例名称。
    4. Details(详细信息)下,记下复制实例的 Public IP address(公有 IP 地址)、Private IP address(私有 IP 地址)和 Replication subnet group(复制子网组)。
    5. Replication subnet group(复制子网组)下,选择链接,访问子网组页面。记下子网组中每个子网的名称。
    6. 要验证每个子网的 CIDR,请访问 Amazon Virtual Private Cloud (Amazon VPC) 控制台
    7. Subnets(子网)选项卡中,搜索步骤 5 中提到的子网。对于每个子网,请记下 CIDR。

    使用 AWS CLI:

    运行 describe-subnets 命令,来确定每个子网的 CIDR。对于复制实例名称,请输入复制实例的名称。

    aws ec2 describe-subnets --filters Name=subnet-id,Values="$(aws dms describe-replication-instances --filters "Name=replication-instance-id,Values=replication-instance-name" --query "ReplicationInstances[*].ReplicationSubnetGroup.Subnets[*].SubnetIdentifier" --output text | sed -e 's/\t/,/g')" --query "Subnets[*].{SubnetId:SubnetId,CidrBlock:CidrBlock}" --output table

    运行 describe-replication-instances 命令,来确定复制实例的 IP 地址。对于复制实例名称,请输入复制实例的名称。

    aws dms describe-replication-instances --filters "Name=replication-instance-id,Values=replication-instance-name" --query "ReplicationInstances[*].{ReplicationInstancePublicIpAddresses:ReplicationInstancePublicIpAddresses,ReplicationInstancePrivateIpAddresses:ReplicationInstancePrivateIpAddresses}" --output table

    解决连接问题(本地资源)

    如果您的源数据库或目标数据库托管于本地,则请确认以下内容:

    • 请与您的网络管理员核实,确认数据库允许来自 AWS DMS 复制实例的传入连接。
    • 确认防火墙未阻止与源数据库或目标数据库的通信。
    • 确认 DNS 配置设置正确。如果您需要 DNS 解析,请使用 Amazon Route 53 Resolver。有关通过本地名称服务器使用 Amazon Route 53 Resolver 解析端点的信息,请参阅使用您自己的本地名称服务器
      -或者-
      通过 AWS CLI 创建新的 DMS 实例,以使用客户 DNS 名称服务器 (--dns-name-servers) 解决 DNS 问题。默认情况下,DMS 实例使用 Amazon 提供的 DNS 进行解析。如果源或目标被配置为使用自定义 DNS,则 DMS 端点可能会发生故障。有关更多信息,请参阅创建复制实例

    确认您的 Amazon EC2 实例与出现连接问题的 AWS DMS 复制实例具有相同的网络配置。在新的 EC2 实例上运行以下命令,排查网络连接问题:

    telnet <database_IP_address_or_DNS> <port_number>
    nslookup <domain_name>

    对于 database_IP_address_or_DNS,请使用为 DMS 源终端节点或目标终端节点指定的数据库 IP 地址或域名。对于 port_number,请使用为 DMS 源终端节点或目标端点指定的数据库端口号。对于 domain_name,请使用为 DMS 源终端节点或目标终端节点指定的数据库域名。

    解决本机数据库错误

    要解决本机数据库错误,请确认以下终端节点配置设置正确:

    • 用户名
    • Password(密码)
    • ServerName(服务器名称)设置为本地数据库的 DNS 或 IP,或 Amazon Relational Database Service (Amazon RDS) 端点
    • Port(端口)
    • 数据库名称
      注意:请勿为 MySQL 源或目标指定数据库名称。

    注意:如果这些字段中的任何一个字段是通过 AWS Secrets Manager 指定的,请参阅使用密钥访问 AWS Database Migration Service 终端节点

    有关与源数据库或目标数据库相关的本机数据库错误,请参阅特定数据库文档中的解决方法。使用 DMS 控制台上的错误代码和错误消息。

    有关详细信息,请检查源数据库或目标数据库中的错误、跟踪、提示或其他日志。

    对于数据库访问错误,请确认 DMS 对特定目标所需的权限。

    有关使用安全套接字层(SSL)加密源端点和目标端点连接的更多信息,请参阅将 SSL 与 AWS Database Migration Service 结合使用