Postgresql pgbouncer 部分参数示疑

2021-04-06 00:00:00 数据库 连接 参数 设置 时间


近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 = hba

auth_hba_file = /etc/pgbouncer/pg_hba.conf

auth_file = /etc/pgbouncer/userlist.txt

# TYPE  DATABASE        USER            ADDRESS                 METHOD

host    postgres      test         192.168.198.100/32      md5

host    postgres      app         192.168.198.101/32      md5



相关文章