对此有什么好的故障排除途径? 1个安全组的2个RDS实例,3个客户端,2个客户端无法连接到1个RDS实例

What's a good troubleshooting path for this? Two RDS instances in 1 security group, 3 clients, and 2 clients cannot connect to one RDS instance

这里是解谜者:

我在同一个安全组中有两个 RDS 实例(RDS1 和 RDS2)(我保证——我至少检查了十次)。

我有三台客户端机器被添加到RDS实例共享的安全组3306端口的入站规则中。

我正在像这样测试与 RDS 实例的套接字连接:

nc -zv my-rds-instance.us-west-2.rds.amazonaws.com 3306

这是问题所在:

客户端 A(工作站):连接到 RDS1 但未连接到 RDS2

客户端 B(us-west-2c 中的 EC2):连接到 RDS1 和 RDS2

客户端 C(us-west-2c 中的 EC2):连接到 RDS1 而不是 RDS2

也就是说,我需要Client A和Client C连接到RDS2。

连接失败超时,所以我怀疑是防火墙问题。如果我 grep netstat -an,我会看到 SYN_SENT 消息。

RDS1 在 us-west-2c 中,RDS2 在 us-west-2b 中。 它们在同一个 VPC 中,同一个子网组,同一个子网,并且都可以在端口 3306 上公开访问。RDS1 是 MySQL 5.6.27,RDS2 是 5.5.53。

客户端 A 有 MySQL 5.7.17。 客户端 B 有 MySQL 5.5.53。 客户端 C 有 MySQL 5.5.52.

对于如何进一步解决此问题,我有点不知所措。任何建议将不胜感激。

正如您在评论中指出的那样,无法连接的客户端正在将 RDS 框的 DNS 名称解析为其 public IP。这意味着当他们尝试连接时,连接会连接到糟糕的互联网,这反过来意味着 RDS 盒会看到来自相当任意 IP 地址的连接并(正确地)拒绝它。

在短期内,您可以 "fix" 通过使用 RDS 盒子的私有 IP 地址来做到这一点,但我认为 AWS 不会对这些地址的稳定性做出任何长期保证 - 虽然他们当然不会经常改变。真正的解决办法当然是修复你的 DNS,让所有客户端都获得 RDS 盒子的内部 IP 地址;首先要查看的是检查每个客户端使用的名称服务器。