【问题标题】:Not able to open connection from PgBouncer (Connection attempt timed out)无法从 PgBouncer 打开连接(连接尝试超时)
【发布时间】:2020-01-05 10:47:07
【问题描述】:

我们使用 PgBouncer 作为我们基于 spring 的应用程序的连接池的中间件。在应用程序中,我们使用 HikariCP 进行应用程序级连接池。

我们已将 HikariCP 的 maxLifeTime 值设置为一小时,并将 idleTimeOut 设置为 30 秒。

我观察到,当应用在长时间空闲后收到请求时,我们会收到此错误:

Caused by: org.postgresql.util.PSQLException: Connection attempt timed out. at 
org.postgresql.Driver$ConnectThread.getResult(Driver.java:376) at
org.postgresql.Driver.connect(Driver.java:288) at
java.sql.DriverManager.getConnection(DriverManager.java:664) at
java.sql.DriverManager.getConnection(DriverManager.java:247) at
org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:88) at
org.postgresql.ds.common.BaseDataSource.getConnection(BaseDataSource.java:71) at
com.zaxxer.hikari.pool.HikariPool.addConnection(HikariPool.java:398) at
com.zaxxer.hikari.pool.HikariPool.lambda$addBagItem$2(HikariPool.java:309) at 

【问题讨论】:

  • 为什么不只使用一个连接池 Hikari / PgBouncer ?
  • HikariCP 已经是应用程序的一部分,DevOps 团队后来添加了 PgBouncer。我也不清楚 PgBouncer 是否会让 Hikari 共享连接。

标签: java spring hibernate hikaricp pgbouncer


【解决方案1】:

只选择一个连接池PGBouncer/HikariCP

考虑在您的 Postgres 安装前使用 PGBouncer 或任何库,以便您的语言自行处理可重用连接。说,对于 Clojure,HikariCP 将是一个不错的选择

注意有一个open issue for Hikari to support PGBouncer

每个应用程序都使用 hikariCp,maxPool 为 10,我有大约 10 个应用程序在使用它。我前面有一个 PgPool,但它似乎并没有那么多重用连接。似乎每个应用程序实例都在试图保持它自己的池一直处于活动状态,这使得 PgPool 无用。

【讨论】:

  • 感谢您提供此链接,我已经阅读了此链接,但对我来说不是很确定。不幸的是,目前在线上没有其他此类文章。我们将尝试使用您推荐的一种连接池方法,然后看看它是如何工作的。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 2016-12-26
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多