我在我的nodejs api服务上使用云SQL代理SideCar。
它看起来很棒,除了我的API请求的大约1%带有错误,表明DB连接失败了:
connect ECONNREFUSED 127.0.0.1:3306
我的后端日志表明,当它试图连接到DB时,这是从我的ORM中扔出的。
sidecar日志什么也没显示,而有问题的cloudsql实例没有显示任何与众不同的(17/4000 Connections,< 1%CPU用法,1.5/3.5GIB内存用法6小时窗口(。
可能是什么原因造成的?
编辑:其他信息:
我所有的豆荚都已经启动了很多小时,00个重新启动,因此间歇性故障不是瞬态启动故障。
日志表明,这是从30天前开始间歇性发生的。
这是一些可能导致云SQL实例无法访问的原因:
1(您的实例与代理SQL使用的连接失败用于监视实例的健康状况
2(您的实例和云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