pgbouncer工具安装使用

xiaoxiao2021-02-28  79

pgbouncer安装

安装libevent

libevent下载地址: https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz

安装:

# wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz # tar -zxvf libevent-2.0.21-stable.tar.gz # cd libevent-2.0.21-stable # ./configure --prefix=/usr/libevent/libevent # make # make install

安装pgbouncer

pgbouncer下载地址: https://pgbouncer.github.io/downloads/

# tar -zxvf pgbouncer-1.7.2.tar.gz # cd pgbouncer-1.7.2 # ./configure --prefix=/usr/pgbouncer/ --with-libevent=/usr/libevent/libevent # make # make install

环境变量配置

环境变量增加如下内容:

# vi /etc/profile export LD_LIBRARY_PATH=/usr/libevent/libevent/lib:$LD_LIBRARY_PATH export PATH=$PATH:/usr/libevent/libevent/bin # source profile

pgbouncer配置文件

# cd /usr/pgbouncer/share/doc/pgbouncer # vi pgbouncer.ini [databases] postgres=host=127.0.0.1 port=5432 user=postgres dbname=postgres pool_size=100 [pgbouncer] logfile = /usr/pgbouncer/log/pgbouncer.log pidfile = /usr/pgbouncer/pgbouncer.pid admin_users = postgres listen_addr = 127.0.0.1 listen_port = 6432 auth_type = trust auth_file = /usr/pgbouncer/share/doc/pgbouncer/userlist.txt

配置userlist.txt文件

# vi /usr/pgbouncer/share/doc/pgbouncer/userlist.txt "postgres" "1234"

启动pgbouncer

# cd /usr/pgbouncer/bin # ./pgbouncer -d /usr/pgbouncer/share/doc/pgbouncer/pgbouncer.ini 2017-10-11 14:44:57.354 18629 LOG File descriptor limit: 65535 (H:65535), max_client_conn: 100, max fds possible: 170 说明启动成功 # psql -h 127.0.0.1 -p 6432 -U postgres -d postgres psql (9.6.1) Type "help" for help. postgres=#

说明能正常连接到postgres库

pgbouncer管理命令:

启动: ./pgbouncer -d /user/pgbouncer/pgbouncer.ini 重启: ./pgbouncer -R -d /user/pgbouncer/pgbouncer.ini 停止: psql -p 6432 pgbouncer -h 127.0.0.1 -U postgres -c ‘shutdown’ 加载配置: psql -p 6432 pgbouncer -h 127.0.0.1 -U postgres -c ‘reload’

pgbouncer信息查看命令:

pgbouncer=# show stats pgbouncer-# ; database | total_requests | total_received | total_sent | total_query_time | avg_req | avg_recv | avg_sent | avg_query -----------+----------------+----------------+------------+------------------+---------+----------+----------+----------- config | 232 | 52488 | 336384 | 150462 | 0 | 47 | 282 | 626 pgbouncer | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (2 rows)

展示当前通过pgbouncer处理连接的统计信息,avg_query字段说明平均每个连接的耗时为626微秒,其他字段信息可参考文档:https://pgbouncer.github.io/usage.html

另外还有其他show命令,如:SHOW SERVERS; SHOW CLIENTS; SHOW POOLS; SHOW LISTS; SHOW USERS; SHOW DATABASES; SHOW CONFIG;等命令,具体说明参考上述连接中的说明。

pgbouncer配置文件说明:

注:参考原文:http://blog.csdn.net/u012289198/article/details/77980396

四、配置文件

4.1 databases配置项

databases配置比较简单,每行由key=value对组成,其中key为对外数据库名称,value由多个以空格隔开的key=value对的连接串及相关参数对组成,实例: postgres = host=127.0.0.1 dbname=postgres port=5432 user=postgres password=postgres client_encoding=UNICODE datestyle=ISO connect_query=’SELECT 1’ 1 连接串的各个参数说明:

dbname: 后端数据库名称 host: 后端数据库的主机名或者IP地址 port: 后端数据库监听端口 user: 连接后端数据库的用户名 password: 连接后端数据库的密码 pool_size: 配置连接池的大小,如果没有配置此项,连接池大小将使用[pgbouncer]部分中default_pool_size配置的值 connect_query: 在连接使用之前执行一个SQL语句,用于探测此连接是否正常.如果执行该语句出错,则选择另外一个连接 max_db_connections: 配置数据库范围的最大值(即数据库中的所有池都不会有这么多的服务器连接 client_encoding: 制定客户端字符集编码 datestyle: 指定日志类型参数 timezone: 指定时区 注意:如果在连接串中没有指定user和password,那么pgbouncer将使用给客户端连接pgbouncer时的用户名和密码来连接后端数据库,并为每个不同的用户建立一个连接池;如果连接中指定了user和password,pgbouncer将使用这里设置的用户名和密码来连接后端数据库,这样对使用这项配置的数据库来说,就只有一个连接池了. 4.2 pgbouncer配置项

4.2.1 通用配置项

4.2.1.1 logfile

指定日志文件 4.2.1.2 pidfile

指定pidfile,文件中记录了pgbouncer的进程ID,如果是加-d启动则此项是必须配置,如果未配置启动报错如下 2017-07-25 12:26:27.875 1672 FATAL @src/main.c:517 in function go_daemon(): daemon needs pidfile configured 1 4.2.1.3 listen_addr

监听的IP地址 4.2.1.4 listen_port

监听的IP端口 4.2.1.5 unix_socket_dir

指定unix socket的文件目录,默认是/tmp 4.2.1.6 unix_socket_mode

指定unix socket文件属性,默认 0777 4.2.1.7 unix_socket_group

指定unix socket文件的组,默认没有设置 4.2.1.8 admin_users

指定启动登录console的用户名 4.2.1.9 auth_file

指定连接pgbouncer的用户名和密码认证文件. 4.2.1.10 auth_type

认证方法,可设置为any, trust, plain, crypt, md5 4.2.1.11 pool_mode

连接池模式,可为session, transaction, statement 4.2.1.12 max_client_conn

准许连接到pgbouncer上最大客户端数 4.2.1.13 default_pool_size

连接池与数据库默认大小,不同的用户或者数据库会有不同的连接池 4.2.1.14 min_pool_size

连接池最小大小,即每个连接池和数据库保持的连接数 4.2.1.15 reserve_pool_size

连接池保留连接数 4.2.1.16 reserve_pool_timeout

保留连接的超时时间 4.2.1.17 server_round_robin

负载均衡模式是否为 round robin,默认是关闭,采用LIFO(后进先出) 4.2.1.18 ignore_startup_parameters

默认pgbouncer会跟踪一些数据库参数,如client_encoding,datestyle,timezone,standard_conforming_strings,application_name等,pgbouncer能检车出这几个参数的变化并与客户端保持一致,所以默认情况下设置其他参数会导致pgbouncer抛出错误.设置此项,指定一些数据库参数,pgbouncer就可以忽略对这些参数的检查,不同参数之间用逗号隔开 4.2.1.19 disable_pqexec

是否禁止简单查询协议,默认是为0禁止.简单查询协议准许一个请求发送多条SQL,容易导致SQL注入攻击. 4.2.2 日志配置项

4.2.2.1 syslog

是否打开syslog,window下没有syslog,则使用eventlog.默认为0,表示不打开 4.2.2.2 syslog_facility

可配置为auth, authpriv, daemon, user, local0-7默认是daemon 4.2.2.3 syslog_ident

以什么名称发送日志到syslog,默认是pgbouncer 4.2.2.4 log_connections

是否记录连接成功的日志,默认值是1,记录 4.2.2.5 log_disconnections

是否记录断开连接的日志, 默认值是1,记录 4.2.2.6 log_pooler_errors

连接池发往客户端的错误是否记录在日志中,默认值是1,记录 4.2.2.7 stats_period

将汇总的统计信息写入日志的时间周期,默认60 4.2.2.8 verbose

日志记录的详细程度,在启动命令行中 –v –v 与verbose=2是同样的含义 4.2.3 console访问控制配置项

4.2.3.1 admin_users

准许在console端执行一些管理命令的用户列表,多个用户之间以逗号隔开.当设置auth_mod=any时,此配置可忽略,默认为空. 4.2.3.2 stats_users

准许连接到console上查看连接池只读信息的用户列表.这些用户可以执行除show fds命令之外的其他show命令. 4.2.4 健康检查和超时配置项

4.2.4.1 server_reset_query

当一个后端数据库连接会话被某一个客户端使用时,它的属性可能会改变,所以当这个后端数据端连接呗第二个客户端使用时,就可能会产生问题.因此一个连接被使用后重新放回连接池时,需要对这个连接的属性进行复位.默认设置为DISCARD ALL.需要注意在连接池为事务模式是,此配置项应该为空,因为在事务模式下,客户端不应该设置连接会话的属性 4.2.4.2 server_check_delay

空闲连接需要多长时间进行一次健康检查,查看其是否可用.如果设置为0则立即检查,默认设置为30s 4.2.4.3 server_check_query

健康检查的SQL,如果为空则禁止健康检查.默认为SELECT 1 4.2.4.4 server_lifetime

连接存活时间.当一个连接存活时间超过此值时,就会被关闭,然后新建一个连接.默认为3600s,模板配置文件中是1200s与默认值有冲突.如果设置为0,表示此连接只是用一次,使用后就关闭 4.2.4.5 server_idle_timeout

连接池中连接的idle时间,超过此时间,连接会被关闭,默认值为600s 4.2.4.6 server_connect_timeout

到后端数据库的login时间超过此值后,连接就会被关闭.默认为15s 4.2.4.7 server_login_retry

指定创建到后端数据库连接失败后,等待多长时间重试,默认值为15s 4.2.4.8 client_login_timeout

客户端与pgbouncer建立连接后,如果无法再这段时间内完成登录,那么连接将会被断开.默认为60s 4.2.4.9 autodb_idle_timeout

如果自动创建的数据库池已经使用用了这个时间值,那么他们会被释放,不好的方面是响应的统计数据也会丢掉,默认3600s 4.2.4.10 suspend_timeout

在SUSPEND命令暂停或者用-R重新启动期间等待缓冲区刷新的秒数,如果在此时间内flush不成功,连接将被丢弃 4.2.5 危险超时配置项

为了防止一些未知原因导致系统hang住,而设置的超时配置 4.2.5.1 query_timeout

运行时间超过该时间值的SQL会被终止.此值应该设置得比SQL的实际运行时间长一些,也应该比数据库的statement_timeout参数配置的值大一些.这个参数主要是为了便于应付一些未知网络问题.设置此值可防止查询被长时间hang住.默认值为0,表示禁止此功能 测试:设置query_timeout=1,在客户端运行超过1s的SQL报错如下:

2017-07-25 22:16:08.601 2985 LOG S-0xda6430: postgres/postgres@127.0.0.1:5432 closing because: query timeout (age=749) 2017-07-25 22:16:08.601 2985 LOG C-0xd9d960: postgres/postgres@192.168.42.102:46114 closing because: query timeout (age=749) 2017-07-25 22:16:08.601 2985 WARNING C-0xd9d960: postgres/postgres@192.168.42.102:46114 Pooler Error: query timeout

4.2.5.2 query_wait_timeout

一个请求在队列中等待被执行的最长时间,如果超过此时间还没有被分配到连接,则此客户端连接将会被断开.这主要为了防止数据库hang住后,客户端到pgbouncer的连接也一直被hang住,默认值为120s,如果设置为0则客户端无线排队等待 4.2.5.3 client_idle_timeout

如果客户端空闲该时间值后,一直不发送命令,则断开与此客户端的连接.这一般是为了防止客户端上的TCP连接实际上因为网络问题关闭,但是pgbouncer上相应的连接没有检测到客户端已经不存在而一直存在.默认值为0,表示禁止此功能. 4.2.5.4 idle_transaction_timeout

客户端启动事务后,超过此时间值还不提交事务,则关闭这个客户端连接,防止客户端消耗pgbouncer及数据库的资源,默认为0,表示禁止此功能. 4.2.6 底层网络配置项

4.2.6.1 pkt_buf

用于指定网络包的内部缓冲区大小,该值会影响发出的TCP包大小即内存使用大小.实际的libpq数据包可以比这个大,所以没有必要设置的太大.默认值为4096,一般保值这个值即可 4.2.6.2 max_packet_size

通过pgbouncer的最大包大小,这个包可以是一个SQL,也可以是一个SQL的返回结果集,有可能这个结果集非常大.默认为2147483647 4.2.6.3 listen_backlog

TCP监听函数listen的Backlog参数,默认是128,通过man 2 listen可查看backlog的含义 backlog参数定义sockfd的挂起连接队列可能增长的最大长度。如果在队列已满时连接请求到达,则客户端可能会收到带有ECONNREFUSED指示的错误,或者如果底层协议支持重传,则可能会忽略该请求,以便连接中的后续重新尝试成功 4.2.6.4 sbuf_loopcnt

在处理过程中,每个连接处理多少数据后切换到下一个连接.如果没有这个限制那么有可能会出现一个连接发送或者接收大量数据时,可能会导致其他连接饿死.如果设置为0表示不限制.默认值是5 4.2.6.5 tcp_defer_accept

此选项值的详细说明从linux下 man 7 tcp中获取.在linux下次默认值为45,其他平台为0 4.2.6.6 tcp_socket_buffer

默认没有设置 4.2.6.7 tcp_keepalive

是否以操作系统的默认值打开基本的keepalive设置.在linux操作系统下探活的相关默认设置为net.ipv4.tcp_keepalive_time = 7200, net.ipv4.tcp_keepalive_intvl = 75, net.ipv4.tcp_keepalive_probes = 9这些值默认偏大,一般根据实际情况调整 4.2.6.8 tcp_keepcnt

默认未设置 4.2.6.9 tcp_keepidle

默认未设置 4.2.6.10 tcp_keepintvl

默认未设置

转载请注明原文地址: https://www.6miu.com/read-81735.html

最新回复(0)