可能遇到类似问题的用户连接RDS或RedShift的其他信息:
1)检查安全组
验证RDS实例的安全组允许从源服务器所属的安全组访问(或者如果外部添加到AWS,则直接添加其IP)。您应该查看的安全组是RDS控制台UI(名为“安全组”)的RDS实例属性中指定的安全组。
注意:数据库安全组可能与AWS EC2安全组不同。如果您的RDS实例是经典/公共EC2,您应该检查RDS UI的“数据库安全组”部分。对于VPC用户,安全组将是正常的VPC安全组(名称sg-xxx将列在RDS实例的属性中)。
2)确认DNS不是问题。
Amazon使用拆分DNS,因此AWS外部的DNS查找将返回公共IP,而AWS内部的查找将返回私有IP。如果您怀疑这是DNS问题,是否确认不同的可用区域返回不同的IP?如果不同的AZ获得不同的IP,您将需要联系AWS支持。
3)通过建立套接字连接确认网络连接。
像tracepath和traceroute这样的工具可能不会有帮助,因为RDS当前会丢失ICMP流量。
通过尝试建立与端口3306上的RDS实例(mysql或Postgres的5432)的套接字连接来测试端口连接。首先查找RDS实例的IP并使用telnet或nc:
telnet x.x.x.x 3306
nc -vz x.x.x.x 3306
a)如果您的连接尝试不成功并立即失败,端口可能被阻止或远程主机未在该端口上运行服务。您可能需要参与AWS支持以进一步进行故障排除。如果从AWS外部连接,请尝试从AWS内的另一个实例连接(因为您的防火墙可能会阻止这些连接)。
b)如果您的连接不成功并且您获得超时,则数据包可能被防火墙丢弃/忽略,或者数据包在不同的网络路径上返回。您可以通过运行netstat -a