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

3 分钟阅读
0

我无法连接到 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 托管资源的连接问题

确认可以在源数据库或目标数据库与复制实例之间建立连接。根据用例和网络基础设施,将源数据库或目标数据库连接到公有子网或私有子网中的复制实例。有关更多信息,请参阅 Setting up a network for a replication instance

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

检查您的复制实例配置

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

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

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

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

  • 复制实例的 IP 地址或复制实例子网组的 CIDR‎的入站规则,其中源数据库或目标数据库的端口位于安全组中。安全组是有状态的,因此无需修改出站规则的默认值。
    注意: 要查找 IP 地址和 CIDR,请参阅“the Determine the IP addresses and CIDR of a subnet group”部分。
  • 复制实例的 IP 地址的入站规则,或者复制实例的子网组的 CIDR 以及网络 ACL 中源数据库或目标数据库的端口。确认对允许的 IP 地址和端口没有明确的拒绝规则。
  • 复制实例子网组的 IP 地址或 CIDR 的出站规则,其中临时端口位于网络 ACL 中。默认情况下,网络 ACL 的出站规则允许所有流量。
  • 最佳做法是,将网络配置为允许复制实例的子网组的 CIDR。复制实例的 IP 地址在失效转移或主机更换事件期间发生更改。

确定子网组的 IP 地址和 CIDR

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

使用 AWS 管理控制台:

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

使用 AWS CLI:

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

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 地址。对于 replication-instance-name,输入复制实例的名称。

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 解析端点的信息,请参阅 Using your own on-premises name server
    -或-
    通过 AWS CLI 创建新的 DMS 实例,使用客户 DNS 域名服务器**(--dns-name-servers)**来解决 DNS 问题。默认情况下,DMS 实例使用 Amazon 提供的 DNS 进行解析。如果源或目标配置为使用自定义 DNS,则 DMS 端点可能会出现故障。有关更多信息,请参阅 create-replication-instance

确保 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 设置为本地数据库或 Amazon Relational Database Service(Amazon RDS)端点的 DNS 或 IP
  • 端口
  • 数据库名称
    注意: 不要为 MySQL 源或目标指定数据库名称。

**注意:**如果使用 AWS Secrets Manager 指定了其中任何字段,请参阅 Using secrets to access AWS Database Migration Service endpoints

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

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

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

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


相关信息

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

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

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

使用 Oracle bystander 和 AWS DMS 将本地 Oracle 数据库迁移到 Amazon RDS for PostgreSQL‎

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

AWS 官方
AWS 官方已更新 2 年前