CloudSQL代理间歇性地拒绝连接

时间:2019-08-06 00:09:05

标签: google-cloud-sql cloud-sql-proxy

我在我的nodejs API服务上使用Cloud SQL代理sidecar。

它似乎工作得很好,除了大约1%的API请求返回并显示一个错误,表明数据库连接失败:

connect ECONNREFUSED 127.0.0.1:3306

我的后端日志显示,它是在尝试连接到数据库时从我的ORM中抛出的。

Sidecar日志未显示任何内容,并且所讨论的CloudSQL实例未显示任何异常(17/4000连接,<1%CPU使用率,1.5 / 3.5GiB内存使用率,每6小时的每个时间片<100KiB入口/出口)窗口)。

可能是什么原因造成的?

编辑:其他信息:

我的所有Pod都已经启动了多个小时,并且重新启动了0次,因此间歇性故障不是短暂的启动故障。

日志显示,这种情况自30天前以来就已间歇性地发生。

1 个答案:

答案 0 :(得分:-1)

有一些原因可能导致无法访问Cloud SQL实例:

1)实例与代理之间的连接失败,Cloud SQL用来监视实例的运行状况
2)实例与Cloud SQL服务之间的操作同步
3)为您的Cloud SQL实例提供的资源不足,例如CPU内核,RAM和/或存储(有关其他信息,请参阅Cloud SQL的操作指南[1])。

由于有多种原因可能导致连接被断开(其中许多与项目的实现和环境的具体细节息息相关),因此诊断异常连接拒绝非常复杂。此外,Cloud SQL持续监视可能导致实例不可访问的任何问题,并自动采取措施解决这些问题。

在正常情况下,错误率不会完全消失,而应该在非常低的水平上发生[2]。当然,有一些条件会使情况变得更糟-生产问题以及某些操作组合。

无论如何,在这种情况下,建议执行重试策略以重新连接到具有指数补偿的实例。一些客户端库已经有支持代码,但是这取决于您使用的是什么。

[1] https://cloud.google.com/sql/docs/mysql/operational-guidelines
[2] https://cloud.google.com/sql/sla