转载
pgbouncer 安装与管理配置参数介绍
安装:
tar -xzvf pgbouncer-1.5.2.tar.gz
cd pgbouncer-1.5.2
./configure --prefix=/usr/local --with-libevent=libevent-prefix
make
make install
做make install 的时候可以知道他的东西都安装到那些目录下
[root@test740_5 pgbouncer-1.5.2]# make install
--> doc
INSTALL pgbouncer.1 /usr/local/share/man/man1 ##man帮助手册
INSTALL pgbouncer.5 /usr/local/share/man/man5 ##
<-- doc
INSTALL pgbouncer /usr/local/bin ##启动程序存放的路径
INSTALL README /usr/local/share/doc/pgbouncer ##share 目录下存放了 配置文件 pgbouncer.ini 以及用户登录列表,只有该列表中存在的用户才能连接数据库
INSTALL NEWS /usr/local/share/doc/pgbouncer
INSTALL etc/pgbouncer.ini /usr/local/share/doc/pgbouncer ## 配置文件
INSTALL etc/userlist.txt /usr/local/share/doc/pgbouncer ##用户列表
启动命令
pgbouncer [-d][-R][-v][-u user] <pgbouncer.ini>
-d 后台运行
-R 在线重启
-v 增加冗余信息,会消耗比较多的时间
-u 切换到指定的用户启动
-q 静默方式,不记录到stdout。请注意这并不影响记录详细,只是stdout是不被使用。在init.d脚本使用
-V 展示版本
-h 展示帮助命令
pgbouncer -V|-h
pgbouncer -d pgbouncer.ini -v ##加-v 可以打印出很多检查信息,对初使用者,是个不错的选择
关闭命令
用管理员用户登录pgbouncer 数据库 ,这个是一个虚拟库,然后执行shutdown 命令
psql -h 127.0.0.1 -p 6432 -u pgbouncer pgbouncer (-u 后面接管理员用户)
详细设置看 pgbouncer.ini 里面设置
pgbouncer 的三种连接方式:
session pooling: 默认方式。连接保持至客户端断开链接后,服务器会将连接放回连接池
transaction pooling:这种连接保持只有在事务的发起跟结束之间
statement pooling:最积极的方式,当一个查询结束后连接将会被回收放回连接池
管理命令:
首先是登录了pgbouncer 的数据库,其次具有执行这些命令的权限
show stats; #查看连接池的状态信息
database :数据库名称
total_requests: pgbouncer汇聚SQL请求的总数
total_received: pgbouncer 接收网络请求总字节数
total_sent: pgbouncer 发送到网络的总字节数
total_query_time:pgbouncer 连接到PG数据库所使用的总时间数,单位微秒
avg_req:上一个时刻,每秒请求平均数
avg_recv:平均每秒钟在客户端那接收到的字节数
avg_sent:平均每秒发送到客户端的字节数
avg_query:每微秒平均查询数
show servers;
type: S 表示服务器
user: pgbouncer 连接数据库服务器的用户名
database: 所连接的数据库名
state: pgbouncer 连接服务器的连接状态 (active ,used , idle )
addr:postgresql 服务器的地址
port : postgresql监听的端口
local_addr :当前pgboucer 所在服务器的ip
local_port :连接在本地机器开启的端口
connect_time : 连接创建的时间
request_time: 最后一个请求发出的时间
ptr: 本连接的一个内部对象地址,作为唯一的ID标示
link:客户端连接服务器的配对地址
show clients; 客户端连接pgbouncer 的状态信息
type :C ,表示客户端
show pools; 查看连接池中连接的状态信息
show lists ;
show users;
show databases;
show fds;
show config;查看所有的配置信息
show dns_hosts;
show dns_zones;
---进程控制命令
PAUSE[db];:这个命令尝试终止所有的到服务器端连接,首先会等待所有的查询都完成后,这个命令只有等到所有的查询都结束时才会返回,用于数据库重启。如果有指定[db] 则是
终止指定的数据库
KILL db; 马上终止指定数据库的客户端跟服务器端的连接。
suspend;刷新所有的套接字缓冲区,pgbouncer 将停止对其的监听,这个命令只有将所有的缓冲区都清空后才会返回。用于pgbouncer 在线重启
resume [db];这个命令配合 pause 跟 suspend 使用的,解除pgbouncer 的终止状态
shutdown; 关闭pgbouncer
reload;重载配置文件,并更新所有的已更改的设置
----配置文件详解 pgbouncer.ini
配置文件主要分2部分
一部分是 数据库的相关设置,一部分是 pgbouncer 的相关设置
[databases]
...
[pgbouncer]
....
数据库方面的设置:
数据库连接字符串:database name = connect string
连接字符串参数有: dbname= 要连接的数据库名,默认跟 客户端相同的名字 。(这种指定的的数据库名为真实的数据库名 前面的 database name 应该与其
一致,试过 bazdb = host=127.0.0.1 port=5432 dbname=sheen,结果在pgadmin 端进行连接时,可以连接到pgbouncer,也能看到 连接的服务器端数据库集群中所有的数据库
,但是却不能连接,会报找不到指定数据库,连 数据库名是 sheen 的也不能连接,改为 sheen = ... dbname=sheen 才可连接到 sheen 这个数据库上)
host= 要连接的数据库的主机IP
port= 要连接的数据库的监听端口(默认5432)
user= 如果指定了用户名,所有的连接到该设置的数据库连接都会以指定的用户名进行连接,那么也意味着所有的连接在连接该数据库时都
只能共用一个连接池,如果没有设置,那么pgbouncer 在连接该数据库时,将会使用客户端的用户名。这种情况下是一个用户独自使用一个连接池
password= 指定用户登录数据库的密码
client_encoding=指定客户端的编码格式
datestyle= 指定日期格式
timezone=指定时区
pool_size= 这个数据库连接每个连接池最大的连接数
connect_query=建立连接后执行的sql 查询,如果查询失败将会被记录在日志中,没有设置将会被忽略
一个简易的连接设置例子
sheen = host=127.0.0.1 port=5432 dbname=sheen
pgbouncer 的相关设置:
logfile=/dir/of/logfile/pgbouncer.log 日志文件的存放位置
pidfile=/dir/of/pidfile/pgbouncer.pid pid 文件的存放目录
listen_addr = 指定监听的IP 如不做对指定客户端监听 使用 * 监听所有
listen_port = pgbouncer 的监听端口
使用unix 套接字的话,使用如下参数设置
unix_socket_dir=
unix_socket_mode=
unix_socket_group=
授权设置
auth_type = trunst 授权方式 (any ,trust , plain , crypt , md5)
auth_file = /etc/pgbouncer/userlist.txt 授权文件,到指定的文件中读取用户及密码,也只有文件中存在的用户才能登录
userlist.txt 的格式: "username" "password"
允许登录pgbouncer 的用户
admin_users= 管理用户名,随便设置一个名字,用于登录pgbouncer 数据库用,这里设置的用户具有更改设置的权限
stats_users = 只允许使用show 命令的用户名
连接池设置
pool_mode = (session ,transaction , statement 上面已经有说过3种连接方式)
server_reset_query = DISCARD ALL pg 8.3 后使用该参数,清空server_reset_query。当上一个查询连接释放后,确保可以给下一个客户端使用前连接中没有任何事物,也不能包
含 ABORT 或者ROLLBACK
max_client_conn = 允许客户端的最大链接数
如果连接串中没有指定用户名的 max_client_conn + (max_pool_size * total_databases * total_users)
如果连接串中指定了用户名的 max_client_conn + (max_pool_size * total_databases)
default_pool_size 链接池的大小(per user/database)
reserve_pool_size 当发生问题时,额外的链接数
reserve_pool_timeout 额外链接超时
log_pooler_errors 记录从连接池发送到客户端的错误信息
超时设置
server_lifetime 默认值 1200 秒 连接到服务器端超过这个时间自动关闭连接
server_idle_timeout = 60 空闲连接超过60秒关闭连接
server_connect_timeout = 15 连接超时,链接服务器超15秒没响应取消
server_login_retry = 15 登录服务器失败后重连的时间间隔 默认15秒
client_login_timeout=60
autodb_idle_timeout = 3600
危险的超时设置
query_timeout 默认0 关闭,当查询超过设置的时间关闭
query_wait_timeout默认0 关闭,当查询等待服务器端响应超过设置时间关闭
client_idle_timeout默认0 关闭,当客户端在设置实际内没有活动,连接关闭
底层参数调节
pkt_buf = 2048 流包缓冲区大小
listen_backlog =128 确定队列中保存多少新的未答复的连接尝试。当队列已满,进一步新的连接将被丢弃
网络层参数调节 tcp
tcp_defer_accept (linux 默认45 其他OS 为0)
tcp_socket_buffer (linux 默认4096)
tcp_keepalive (0/1)
下面的参数只有在linux 中可以设置,同样需要设置tcp_keepalive =1
tcp_keepcnt=
tcp_keepidle=
tcp_keepintvl=
dns_max_ttl
dns_zone_check_period=
---简易版的pgbouncer 连接配置
[databases]
sheen = host=127.0.0.1 port=5432 dbname=sheen
[pgbouncer]
logfile=/dir/of/logfile/pgbouncer.log
pidfile=/dir/of/pidfile/pgbouncer.pid
listen_addr =*
listen_port =6432
auth_type = trunst
auth_file = /etc/pgbouncer/userlist.txt
adminuser=pgbouncer
配置pgbouncer.ini 的时候,在原来自带的那份 pgbouncer.ini 上面进行修改就好了,要启用哪个参数 前面的;去掉,设上相应的值即可
One Response