如何排查 AWS DMS 终端节点连接故障问题?

上次更新日期:2021 年 12 月 8 日

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

简短描述

创建 AWS DMS 源终端节点和目标终端节点后,先测试从 AWS DMS 复制实例到这些终端节点的连接。在开始 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.

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

解决方法

解决 Amazon Web Services(AWS)托管资源的连接问题

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

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

  • 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,请使用 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,请访问 AWS 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=<dms replication="" instance="" name="">" --query "ReplicationInstances[*].ReplicationSubnetGroup.Subnets[*].SubnetIdentifier" --output text | sed -e 's/\t/,/g')" --query "Subnets[*].{SubnetId:SubnetId,CidrBlock:CidrBlock}" --output table</dms>

运行 describe-replication-instances 命令,来确定复制实例的 IP 地址:

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

解决本地资源的连接问题

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

  • 请咨询您的网络管理员,确认数据库允许来自 AWS DMS 复制实例的传入连接。
  • 确认防火墙未阻止与源数据库或目标数据库的通信。
  • 确认 DNS 配置设置正确。如果您需要 DNS 解析,请使用 Amazon Route 53 Resolver。有关通过本地名称服务器使用 Amazon Route 53 Resolver 解析终端节点的信息,请参阅使用您自己的本地名称服务器

如果您仍然遇到连接问题,则可能需要进行更多问题排查。要进行问题排查,请在 AWS DMS 复制实例的同一 VPC 中创建一个新的Amazon Elastic Compute Cloud(Amazon EC2)实例。确认您的 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 源终端节点或目标终端节点指定的数据库域名。

解决本机数据库错误

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

  • 用户名
  • 密码
  • ServerName 设置为本地数据库的 DNS 或 IP,或者 RDS 终端节点
  • 端口
  • 数据库名称
    注意:请勿为 MySQL 源或目标指定数据库名称。

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

有关与源数据库或目标数据库相关的本机数据库错误,请参阅特定数据库文档中的解决方法。使用 DMS 控制台上的错误代码和错误消息。有关详细信息,请检查源数据库或目标数据库中的错误、跟踪、提示或其他日志。

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

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