RDS 连接在高峰时段超时(约 50.000 个 HTTP 请求)

RDS connection time out in rush hours (with ~50.000 HTTP requests)

我们在 db.t2.large 实例上使用 RDS。 EC2 的自动缩放组在白天将数据写入数据库。在高峰时段,我们有大约 50.000 个 HTTP 请求,每个请求都有 read/write MySQL 数据。

这每天都不同,但对于今天的示例,在一个小时内:

我们从 PHP 个实例中看到 "Connect Error (2002) Connection timed out",大约每分钟 187 次。

关于网络,我看到了我们正在达到的潜在限制:

我试过将 EC2 放在不同或相同的 AZ 中,但这没有效果

在此期间,我可以通过 SSH 隧道(EC2 -> RDS)从我的本地工作站正常连接。从 EC2 到 RDS 也是如此。

PHP 脚本设置为在尝试连接 5 秒后超时以确保快速响应。对于某些脚本,我现在将此限制增加到 15 秒。

但是我们在 RDS 上达到了哪个限制?在我们开始迁移或更改实例类型之前,我们想知道这个问题的根源。我还刚刚启用了增强监控以获取有关此问题的更多详细信息。

如果需要更多信息,我很乐意在需要的地方详细说明。

谢谢!

更新 25/01/2016

根据 datasage 的建议,我们将 RDS 磁盘大小增加到 500 GB,这为我们提供了 1500 IOPS 和 3600 突发,它使用了大约 1200 IOPS(所以现在甚至没有突发)并且超时仍然发生。

如前所述,连接超时设置为 5 秒和 15 秒,没有区别。

2016 年 1 月 26 日更新

我们高峰时段的 RDS 屏幕截图:

2016 年 1 月 28 日更新

我已将设置 sync_bin_log 更改为 0,因为最初我认为我们达到了 EBS 吞吐量限制(GP-SSD 160 Mbit/s),这使我们的磁盘容量显着下降吞吐量和 IOPS 也较低,但我们仍然看到连接超时发生。

当我们绘制错误发生的时间时,我们看到每分钟大约 :40 秒超时在大约 25 秒内开始发生,然后在大约 35 秒内再次没有错误并再次开始。这是在我们传入流量的高峰时段。

显然是网络性能让我们退缩了。当我们将 RDS 实例升级到 m4.xlarge(具有高网络性能)时,问题得到解决。

这是我们不得已的办法,但最终解决了我们的问题。