原 在GreenPlum中配置PgBouncer连接池并使用Prometheus+Grafana对pgbouncer监控
Tags: 原创GreenPlum监控GrafanaPrometheusPgbouncer连接池
简介
PgBouncer工具可以用于PostgreSQL和Greenplum数据库连接的连接池。
在Greenplum数据库中使用pgBouncer作为连接池管理器是有益的,尤其是在高并发的场景下。pgBouncer作为一个轻量级的数据库连接池管理器,它可以有效减少数据库服务器建立和销毁连接的开销,提高系统性能和稳定性。
以下是在Greenplum中使用pgBouncer的一些好处:
- 连接复用:pgBouncer能够维持少量的持久连接,并让多个客户端请求共享这些连接,从而避免了频繁创建和销毁连接的开销。
- 资源管理:通过限制并发连接数,可以有效地管理Greenplum数据库的资源,防止因连接数过多而导致的资源耗尽问题。
- 性能提升:减少TCP连接的建立和销毁次数,可以减少网络开销和内存管理的负担,提高数据库的整体响应速度。
- 稳定性增强:通过连接池,pgBouncer能够更好地处理短连接请求,避免因为连接数过多而引起的数据库崩溃风险。
- 安全性:pgBouncer支持SSL加密连接,增强了数据传输过程中的安全性。
- 易用性:pgBouncer配置相对简单,易于集成到现有的部署和监控体系中。
pgbouncer 官网介绍 http://www.pgbouncer.org/
配置文件:http://www.pgbouncer.org/config.html
有关使用greenplum下pgbouncer的总结
1、pgbouncer是 PostgreSQL的轻量的连接池,可以有效降低连接数,提升系统性能。Greenplum默认已经自带pgbouncer工具,无需额外安装,只是多数组织在实践中似乎并未启用此服务,也算是一种资源的浪费了。
2、pgbouncer默认存在于Greenplum数据库的bin目录下。
1 2 | [gpadmin@mdw ~]$ which pgbouncer /usr/local/greenplum-db-6.26.3/bin/pgbouncer |
3、pgbouncer可以配置在运行在Greenplum数据库的master上或另一台机器上,用户最好运行在Greenplum数据库的master上。
4、若配置了[databases]
的具体值,则使用pgbouncer不能切换到其它数据库中
1 2 3 4 5 6 7 8 9 | postgres=# \c db1 connection to server at "192.16.7.163", port 6432 failed: FATAL: no such database: db1 Previous connection kept postgres=# \l db1 List of databases Name | Owner | Encoding | Collate | Ctype | ICU Locale | Locale Provider | Access privileges ------+-------+----------+------------+------------+------------+-----------------+------------------- db1 | xxt | UTF8 | en_US.utf8 | en_US.utf8 | | libc | (1 row) |
若想pgbouncer可以连接任意数据库,则可以在[databases]
下配置* =
5、 欧拉系统openEuler 22.03 LTS需要安装libevent-2.0.21包,否则会报错:/usr/local/greenplum-db/bin/pgbouncer: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
1 | rpm -ivh libevent-2.0.21-4.el7.x86_64.rpm --force |
6、报错“pooler error: unsupported startup parameter: search_path”,或“unsupported startup parameter: extra_float_digits”
1 | ignore_startup_parameters = extra_float_digits,search_path |
7、端口默认为6432,也可以配置6543端口。
8、我使用auth_query配置后,并不能从数据库中查询密码,可能是版本问题吧,所以只能在创建新用户或更新用户密码后,需要先执行导出密码copy (select '"'||usename ||'" "' || passwd||'"' from pg_shadow order by 1) to '/usr/local/greenplum-db/pgbouncer/users.txt';
1 2 | failed: FATAL: server login has been failing, try again later (server_login_retry) failed: FATAL: bouncer config error |
9、若报错“failed: FATAL: no pg_hba.conf entry for host "[local]", user "pgbouncer", database "postgres", SSL off”,可以考虑在GreenPlum的master节点的pg_hba.conf文件中配置如下内容:
1 | local all all md5 |
10、使用pgbouncer的一个缺点是:在GP库中直接查询时,只能看到客户端的IP是pgbouncer的IP。所以,若出现问题,要进行追踪是,增加了难度。但是,可以增加参数application_name_add_host=1
用来记录客户端的真实的IP和端口,然后在的pg_stat_activity.application_name中就可以看到了。如下: