PgPool-II 抱歉,已经有太多客户端了

PgPool-II Sorry, too many clients already

背景
我在 3 台 centos 8 机器(虚拟)上有一个 PgPool-II 集群(版本 4.1.4)运行ning; SQL1、SQL2 和 SQL3(每个都在不同的硬件上)。在 SQL1 和 SQL2 上 PostgreSQL-12 是 运行ning(目前 SQL1 为主,SQL2 在流复制备用)。

在数据库集群中,目前有 4 个数据库用于 2 个不同的软件环境。一个流量很大的客户 (cust) 环境和一个基本上没有用户 activity 的教育 (edu) 环境。 两种环境各有一个db,也共享两个数据库(仅供阅读)。

该应用程序目前是用 net core 3.1 编写的,使用 npgsql 和 entity framework 内核连接到 pgpool 集群。 除了“正常”应用程序 sql 使用 entity framework 向数据库发出请求外,还有使用 psql 的定期调用,以便 运行 “显示 pool_nodes;”在 pgpool 中。使用 entity framework 无法做到这一点,因此改为使用 psql。

每个环境还有一个处理 Internet 流量的“main api”和一个 运行s 后台任务的“service api”。两者都使用 entity framework 来调用数据库。并且 psql 有时也会从“服务 api” 调用,如上所述。 除此之外,所有应用程序还具有 A 和 B 系统。

总结一下: 2个环境(cust,edu)有A和B系统,其中还有“main api”和“service api”每个=> 8个应用程序,(如果算上所有“service [=61]则为12个=]" 也每 5 分钟调用一次 psql)。 应用程序位于 2 台不同的机器(A 和 B)上,对于一个环境和系统,“main api”和“service api”运行s 在同一台机器上。 每个 entity framework 应用程序还可以根据用户 activity 向 api.

同时发出 parallell/multiple 个请求

我的问题
pgpool 集群偶尔会出现错误:Sorry, too many clients already。 通常在连接 psql 时,但有时也会发生在 entity framework.

我最初的想法是,这是因为数据库必须连接到许多客户端,但是 运行ning pg_stat_activity 就在错误显示连接数减少几秒钟后(大约 50 个),然后是 psql 配置中的 150 max_connections。我在 psql 数据目录的“日志”文件夹中的 psql 日志中找不到任何错误。

但是在pgpool.log文件中有一个错误条目: Oct 30 16:34:19 sql1 pgpool[4062984]: [109497-1] 2020-10-30 16:34:19: pid 4062984: ERROR: Sorry, too many clients already

pgpool 有 num_init_children = 32 和 max_pool = 4 所以我真的看不出问题出在哪里。

更多信息可能需要一些文件:
pg_stat_activity(错误后11s拍摄)
pgpool.log
pgpool.conf
postgresql.conf

这个问题可能来自一个错误,据 pgpool 的一位开发人员称,该错误将包含在 2020 年 11 月 19 日的 4.1.5 更新中。

如果取消查询,该错误会导致现有连接的计数器不倒计时。

只需将 pgpool 从 4.1.2 升级到 4.1.5(也可以使用更新版本的 pgpool) 我在 pgpool 4.1.2 上遇到了同样的问题,抱歉,已经有太多客户端 几乎每小时都在发生。 在我将 pgpool 从 4.1.2 升级到 4.1.5 后问题得到解决。之后我们再也没有遇到过错误