如何解决 AWS DMS 端点连接故障?

3 分钟阅读
0

我无法连接到 AWS Database Migration Service (AWS DMS) 端点,我的测试连接出现故障。我想解决连接问题。

简短描述

当您测试从复制实例到源端点或目标端点的连接时,您可能会收到两种类型的错误:连接问题和本地数据库问题。您必须先解决这些问题,然后才能成功完成测试。

解决方法

连接问题

如果错误是由于复制实例与源或目标之间的连接问题而发生的,则您会收到类似于以下内容的错误:

  • "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."

本地数据库错误

如果错误是由于本地数据库错误(例如,数据库权限或身份验证错误)而发生的,则您会收到类似于以下内容的错误:

  • "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 交互的所有源端点和目标端点。如果 AWS 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 控制台或 AWS CLI。

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,确保您使用的是最新版本的 AWS CLI

AWS DMS 控制台

完成以下步骤:

  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

要确定每个子网的 CIDR,请运行 describe-subnets 命令。

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

注意: 请将 replication-instance-name 替换为您的复制实例的名称。

要确定复制实例的 IP 地址,请运行 describe-replication-instances 命令。

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

注意: 请将 replication-instance-name 替换为您的复制实例的名称。

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

如果源数据库或目标数据库托管在本地,请确认下列事项:

  • 该数据库允许来自 AWS DMS 复制实例的传入连接。要进行确认,请咨询您的网络管理员。
  • 防火墙不会阻止与源数据库或目标数据库的通信。
  • DNS 配置设置正确。如果需要 DNS 解析,请使用 Amazon Route 53 Resolver。有关如何使用本地名称服务器通过 Amazon Route 53 Resolver 解析端点的信息,请参阅 Using your own on-premises name server
    -or-
    通过 AWS CLI 创建新的 AWS DMS 实例,以使用客户 DNS 名称服务器 (--dns-name-servers) 来解决 DNS 问题。默认情况下,AWS DMS 实例使用 Amazon 提供的 DNS 进行解析。当源或目标配置为使用自定义 DNS 时,AWS DMS 端点可能会出现故障。有关详细信息,请参阅 create-replication-instance

确保 Amazon Elastic Compute Cloud (Amazon EC2) 实例的网络配置与存在连接问题的 AWS DMS 复制实例相同。要对网络连接进行故障排除,请在新的 Amazon EC2 实例上运行以下命令:

telnet database_IP_address_or_DNS port_number

**注意:**请将 database_IP_address_or_DNS 替换为为 AWS DMS 源端点或目标端点指定的数据库的 IP 地址或域名。将 port_number 替换为为 AWS DMS 源端点或目标端点指定的数据库的端口号。

然后,运行以下命令:

nslookup domain_name

**注意:**请将 domain_name 替换为为 AWS DMS 源端点或目标端点指定的数据库的域名。

解决本地数据库错误

要解决本地数据库错误,请确认下列端点配置设置正确:

  • 用户名
  • 密码
  • ServerName 设置为本地数据库或 Amazon Relational Database Service (Amazon RDS) 端点的 DNS 或 IP
  • 端口
  • 数据库名称
    **注意:**不要为 MySQL 源或目标指定数据库名称。

如果使用 AWS Secrets Manager 指定了其中任何字段,请参阅使用密钥访问 AWS Database Migration Service 端点

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

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

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

有关如何使用 SSL 加密源端点和目标端点连接的详细信息,请参阅将 SSL 与 AWS Database Migration Service 结合使用

相关信息

如何排查使用 AWS DMS 时出现的 Amazon S3 端点连接测试故障?

如何为使用 Amazon Redshift 作为目标端点的 AWS DMS 任务排查连接故障和错误?

如何排查 AWS DMS 和 MongoDB 源端点之间的连接故障?

将 Microsoft SQL Server 数据库迁移到 AWS Cloud