IT 邦德

你应该给PostgreSQL配置连接池,起码避免被甩锅

PostgreSQL连接池的使用可以带来多个好处,比如减少连接开销,提高并发处理能力,减少资源占用和浪费。

pgbouncer目前支持三种连接池模型,分别是session, transaction和statment三个级别

Image

接下来就给大家分享一下pgbouncer的安装及相关的应用

1.为什么用pgbouncer

PG 是多进程结构,每新增一个会话就会新增一个进程,相对而言对数据库的开销就会比较巨大。

因为在正常业务会话中,有不少session 都有长时间的 idle的状态,而这个状态导致,此时如果需要连接,就需要建立新的进程,来访问数据库,那么连接数就上来了. 而使用pgbouncer的主要原因。

--在线下载安装包
PGBouncer官网地址:https://www.pgbouncer.org
Image

2.依赖安装

yum install yum install gcc gcc-c++ make openssl-devel -y
--pgbouncer依赖libevent,记得要同时编译安装libevent哈
root用户下操作即可,官网下载libevent即可
tar -xf libevent-2.1.12-stable.tar.gz

3.解压安装pgbouncer

su - postgres
tar xzvf pgbouncer-1.23.1.tar.gz

echo "export PKG_CONFIG_PATH=/usr/local/libevent/lib/pkgconfig" >> ~/.bashrc
source ~/.bashrc

cd pgbouncer-1.23.1/
mkdir -p /pg14/pgbouncer
./configure --prefix=/pg14/pgbouncer

make && make install

Image

4.修改配置文件

--说明:需修改databases、pgbouncer的信息
vim /pg14/pgbouncer/pgbouncer.ini

[databases]
appdb = host=192.168.3.9 port=5666 client_encoding=UNICODE datestyle=ISO connect_query='SELECT 1'

[pgbouncer]
logfile = /pg14/pgbouncer/pgbouncer.log
pidfile = /pg14/pgbouncer/pgbouncer.pid

listen_addr = *
listen_port = 5766

auth_type = scram-sha-256
auth_file = /pg14/pgbouncer/userlist.txt

admin_users = postgres,appuser
stats_users = postgres,appuser

pool_mode = session
server_reset_query = DISCARD ALL
max_client_conn = 100
default_pool_size = 20
ignore_startup_parameters = extra_float_digits

5.导出用户信息

postgres=# copy (select usename, passwd from pg_shadow order by 1) to '/pg14/pgbouncer/userlist.txt';

将导出的用户内容添加到userlist.txt。 
userlist.txt内容格式: “用户” “密码” 

6.启动pgbouncer

启动pgbouncer时,需指定pgbouncer.ini
echo "export PATH=$PATH:/pg14/pgbouncer/bin" >> ~/.bash_profile

source ~/.bash_profile

--设置免密登陆
vi .pgpass
localhost:5666:*:appuser:1qaz@WSX
192.168.3.9:5766:*:appuser:1qaz@WSX

--记得授权
chmod 0600 ~/.pgpass

pgbouncer -d -v /pg14/pgbouncer/pgbouncer.ini

Image

7.Pgbouncer使用

登录语法:psql -p 端口号 DB -U 用户名 -h ip地址
psql -p 5766 -d appdb -U appuser -h 192.168.3.9
Image

总结

pgbouncer优势能够有效提高连接的利用率,避免过多的无效连接,导致数据库消耗资源过大,CPU占用过高。但让也有一些高可用比如pgpool-II,通过连接池技术复用已经建立的数据库连接,减少了频繁创建和关闭连接的开销,提高了应用程序的性能‌。