PgPool II对不起,已经有太多客户了



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

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

该应用程序目前是在net core 3.1中编写的,使用npgsql和实体框架核心连接到pgpool集群。除了";正常的";应用程序sql对具有实体框架的数据库的请求还有对psql的定期调用;显示池节点"在pgpool中。实体框架无法做到这一点,因此改用psql。

每个环境还具有一个";主api";其处理互联网流量;服务api";其运行后台任务。两者都使用实体框架来调用数据库。psql有时也会从";服务api";如上所述。除此之外,所有应用程序都有一个A和B系统。

综上所述:2环境(cust,edu(具有A和B系统;主api";以及";服务api";每个=>8个应用程序(如果算上所有"服务api"也每5分钟调用一次psql,则为12个(。应用程序在2台不同的机器(A和B(上;主api";以及";服务api";在同一台机器上运行一个环境和系统。每个实体框架应用程序还可以根据用户对api的活动进行并行/多个同时请求。

我的问题
pgpool集群时不时会出现一个错误:Sorry, too many clients already。通常在与psql连接时,但有时实体框架也会发生这种情况。

我最初的想法是,这是因为数据库必须连接许多客户端,但在错误发生几秒钟后运行pg_stat_activity表明,连接数量要少得多(大约50个(,然后是psql-config中的150个max_connections。我在psql日志中找不到任何错误;log";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(在错误发生后11秒拍摄(
pgpool.log
pgpool.conf
postgresql.conf

这个问题可能是由于一个bug而存在的,根据pgpool的一位开发人员的说法,该bug将在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后,问题得到了解决。之后我们从未经历过错误

最新更新