0

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

它似乎工作得很好,除了我大约 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 天前以来,这种情况一直在间歇性发生。

4

1 回答 1

-1

以下是可能导致 Cloud SQL 实例无法访问的几个原因:

1) 您的实例与 Cloud SQL 用于监控实例运行状况的代理之间的连接失败
2) 您的实例与 Cloud SQL 服务之间的操作同步
3) 资源配置不足,例如 CPU 内核、RAM 和/或存储, 到您的 Cloud SQL 实例(有关更多信息,请参阅 Cloud SQL 的操作指南 [1])。

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

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

在任何情况下,在这种情况下的建议是实施重试策略以重新连接到具有指数退避的实例。一些客户端库已经有支持代码,但这有点取决于你到底在使用什么。

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

于 2019-08-10T03:08:41.510 回答