【问题标题】:Cloud SQL Proxy: occasional connection timeouts under loadCloud SQL 代理:负载下偶尔出现连接超时
【发布时间】: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


【解决方案1】:

此问题可能是由我们的自定义网络基础设施设置引起的,而不是由任何 Google 工具或服务引起的。不过,我们确实找到了一个有趣的解决方案:添加另一个代理!什么,为什么?事实证明,Airflow 没有适当的连接池,因此连接不断打开和关闭,包括使用 Cloud SQL 代理容器带来的 SSL 握手和身份验证/授权开销。因此,高负载和偶尔的连接中断。

我们向运行 Airflow 的 pod 添加了一个 PgBouncer 容器,并使用了在那里实现的正确连接池。现在所有连接的打开和关闭都在 Pod 内的本地网络上进行,无需 SSL 或复杂的身份验证,因此速度非常快。不再有高负载,不再掉线!

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2018-03-03
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多