【发布时间】:2020-06-05 19:07:31
【问题描述】:
问题
在高负载下,我们的 Cloud SQL 代理偶尔会遇到这个问题:
2020/06/05 13:35:47 couldn't connect to "my-cloudsql-instance": dial tcp xx.xx.xx.xx:3307: connect: connection timed out
上下文
具有 Airflow pod 的 Kubernetes 集群,它与 LocalExecutor 并行启动许多任务。这些新任务中的每一个都将通过 Cloud SQL 代理(Airflow pod 的 sidecar)连接到 Airflow 元数据数据库(在 Cloud SQL 中运行)。每隔一段时间就会发生上述错误,这会导致 Airflow 中的任务失败。
到目前为止我已经测试并发现了什么:
- 在低负载下不会发生这种情况
- Cloud SQL 实例日志中未显示任何错误或警告
- Airflow 容器、Cloud SQL 代理容器和 Cloud SQL 实例都有足够的资源来处理这个负载,查看它们在出错时的 CPU 和内存使用情况
- 未达到 Cloud SQL 中的最大连接数(最多 40 个,共 100 个)
- 这似乎发生在一些任务已经运行并完成并且新任务正在启动之后
- 在 Airflow 方面,这在日志中可见:
[2020-06-04 11:11:13,839] {taskinstance.py:1128} ERROR -
(psycopg2.OperationalError) server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
(Background on this error at: http://sqlalche.me/e/e3q8)
【问题讨论】:
-
您如何连接到 Cloud SQL 实例?你在使用连接池吗?在 CloudSQL 仪表板上,您可以查看活动连接的数量,您可以检查是否接近实例允许的最大连接数。
标签: airflow google-cloud-sql connection-timeout cloud-sql-proxy