Postgresql pgbouncer 部分参数示疑

2021-04-22 16:33:12 浏览数 (1)

最近TEAM的DB 在研究pgbouncer 时complain了一下pgbouncer的配置问题找到的信息少的问题,这边总结了一下.希望对他有所帮助.

pgbouncer 主要的目的需要确认一下:

数据库连接池的主要目的在于减少执行数据库创建连接和读/写数据库操作所涉及的开销。另外数据库连接的复用会降低内存的消耗和开销,降低数据库在高并发时的系统资源消耗,提高数据库的响应能力.但针对数据库的不同缓冲池也分为,程序方面的缓冲池,和数据库中间件方式的缓冲池. Pgbouncer就是在程序端和数据库端之间达成以上目的的中间件.

以下的参数按照重要性来进行排序:

1 pool_mode

pool_mode 是pgbouncer的核心的配置,这个配置决定了你的pgbouncer的功能点. 主要的参数

session

transaction

statement

三种参数需要在不同的情况下使用,session 是最稳定的参数,他本身对于连接的复用在于连接本身,当连接失效后,才能通过session对连接进行复用. query_wait_timeout 参数与这个参数应该进行匹配,例如一个query 到底需要在连接池满以后,需要对没有连接的进程等待多长时间.

transaction 参数与session本身并不一样他对于访问的分配是通过事务的方式来进行的,而不是通过连接本身,一个连接有点分时复用的方式,不同的连接的执行的语句会在不同的时间在一个session中被执行.

最后一个是statement的方式,这个方式属于是最激进的方式,在使用这个方式的时候,需要十分的注意,应用的系统的设计是否能接受这样的模式返回结果.

2 default_pool_size, 这个设置主要是根据POSTGRESQL 最大的设置的连接数进行设置,但也可以设置的少于最大的连接数,保证在打满的过程中,某些管理连接或者特殊连接,使用.

3 reserve_pool_size reserve_pool_timeout, 这两个参数是需要进行匹配使用的, reserve_pool_size 是在连接满载后,可以在 接入多少连接,并且这些连接在这个等待连接池中可以驻留的时间 reserve_pool_timeout.

4 server_life_time 当连接很长时间不被使用,将被处理(关闭),这个为判断连接多长时间没有使用的参数

5 server_idle_timeout 当连接很长时间没有被使用, 将被彻底关闭掉,这里为设置相关的时间

6 server_connect_timeout 当和数据库服务器连接处理的时间超过设定的时间,这个连接就被关闭掉.

7 server_login_retry 如果连接超时,重试和服务器之间进行连接的次数

8 query_timeout 主要是配置查询的超时的时间, 超过查询时间的查询会被KILL掉

9 query_wait_timeout 查询在等待获得连接的时候最长的等待的时间,超过这个时间,系统将返回错误给应用方.

10 client_login_timeout , 在连接已经被使用的过程中, 存在访问的客户端出现网络,主机故障等问题,,超过这个时间就直接将连接取消.

以上是一些和连接有关的参数

pgbouncer 另一个比较有意思的地方是用户的配置, 用户的配置在pgbouncer 是一个难点.我们以下面的这个例子来

pgbouncer 的两种用户都在这里配置

1 pgbouncer 自己的管理账号,这个账号是你自己设置的在在 admin_user

相关的密码需要在userlist.txt中设置

这个数据库本身是虚构的,并不是真正的数据库,通过pgbouncer 的端口进行登录对数据库进行管理.

psql -p 6432 pgbouncer

[databases]

te = host=192.168.198.101 port=5432 user=te password=test dbname=postgres client_encoding=UNICODE connect_query='select 1'

[pgbouncer] listen_addr = * listen_port = 6432 auth_type = plant auth_file = /etc/pgbouncer/userlist.txt admin_users = postgres pool_mode = session max_client_conn = 100 default_pool_size = 20 logfile = /var/log/pgbouncer/pgbouncer.log pidfile = /var/log/pgbouncer/pgbouncer.pid

对于pgbouncer 的配置问题

1 监听地址listen_addr 基本上建议设置为 * ,

2 auth_type 主要有几种设置 md5 hba plain

3 auth_file 一般设置为userlist.txt

这里主要注意 md5 或者 hba

select usename, passwd from pg_shadow order by 1;

大部分设置中也是这样设置,通过查找用户的md5密码来进行userlist.txt 的设置.

另外pgbouncer 也支持hba 的方式

[pgbouncer]auth_type = hbaauth_hba_file = /etc/pgbouncer/pg_hba.confauth_file = /etc/pgbouncer/userlist.txt

# TYPE DATABASE USER ADDRESS METHODhost postgres test 192.168.198.100/32 md5host postgres app 192.168.198.101/32 md5

0 人点赞