高峰时段的RDS连接超时(~50,000个HTTP请求)

时间:2016-01-21 15:44:59

标签: amazon-web-services amazon-ec2 aws-rds

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

每天都有所不同,但对于今天的例子,在一小时内:

我们在PHP实例中看到“Connect Error(2002)Connection time out out”,大约每分钟187次。

  • RDS CPU不会提高50%以上
  • 数据库连接不会超过30(最大值设置为5000)。
  • 免费存储空间约为300G(磁盘大小很大,可提供高IOPS)
  • 写入IOPS达到1500次爆发但降至900,因为突发限制已经过了高峰时间。
  • 读取IOPS每10分钟打300个,中间打150个。
  • 磁盘写入吞吐量平均值介于20到25 MB /秒之间
  • 磁盘读取吞吐量介于0,75和1,5 MB /秒之间
  • CPU信用余额约为500,因此我们不需要CPU突发。

当谈到网络时,我发现了一个潜在的限制:

  • 网络接收吞吐量达到1.41 MB /秒,并在一小时内保持在1.5 MB /秒左右。
  • 在此期间网络传输5一个5.2 MB /秒,每10分钟下降到4 MB /秒,这与处理数据(主要是读取)的cronjobs一致

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

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

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

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

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

谢谢!

2016年10月25日更新

在推荐数据时,我们将RDS磁盘大小增加到500 GB,这为我们提供了1500 IOPS和3600个突发,它使用了大约1200 IOPS(现在甚至没有爆发),并且超时仍然发生。

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

2016年1月26日更新

我们高峰时段的RDS截图:

RDS Monitoring

2016年1月28日更新

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

当我们绘制错误发生的时间时,我们会看到每分钟左右:超过25秒,超时开始发生在大约25秒内,然后再次出现大约35秒没有错误再次启动。这是在我们进入交通的高峰时段。

1 个答案:

答案 0 :(得分:0)

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

这是我们的最后手段,但它最终解决了我们的问题。