作者:何伟平
来源:http://www.pgsqldb.org/mwiki/index.php/Pgbouncer%E6%90%AD%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0
最近有些项目我们是采用PostgreSQL进行后端数据库,由于要对客户端的连接使用类型和连接数进行控制,因此我们采用PgBouncer来进行实施。
PgBouncer相关的基本文档pgsqldb中文站已经有不少文档,这里我就不再作过多的说明,我将集中对其中的几个要点和我实践中遇到的问题和大家分享一下。
OK,肺话也不多少,开始正题吧;D
PgBouncer是一个轻量级的数据库连接池。download
1. 添加目标数据库的连接字符串,这个表示PgBouncer将会在哪些后端数据库中建立连接,比如:
template1 = host=127.0.0.1 port=5432 dbname=template1
2. 设定PgBouncer的监听端口, port=5555,默认为6000
3. 创建用户列表文件并添加用户信息,此用户为允许客户端使用的连接用户名,比如:
A. zhaoyi@zhaoyi-laptop:[~]$ echo "user" "password" > /usr/local/pgsql/user.txt B. 在ini设定:auth_file = /usr/local/pgsql/user.txt
4. 创建admin用户,在配置中添加:admin_users = user,用户可以使用此用户名连接pgbouncer并查看运行状况等,注意:此用户必须为user.txt文件中已经存在的用户。
1. 启动:pgbouncer -d pgbouncer.ini
2. 测试连接:psql -h 127.0.0.1 -p 6000 -U user template1
3. 通过admin用户连接pgbouncer查看配置:
psql -h 127.0.0.1 -p 6000 -U user pgbouncer pgbouncer=# show config;
3. 通过admin用户连接pgbouncer查看运行情况:
pgbouncer=# show stats; pgbouncer=# show lists; pgbouncer=# show pools; pgbouncer=# show databases; #其余运行参数可以通过如下命令查看 pgbouncer=# show help;
4. 参数修改:如果修改了ini文件中相关参数,需要通过命令告知bouncer重新读取配置内容:
pgbouncer=# reload;
test=# begin; ERROR: Long transactions not allowed server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Succeeded.
这里我简单说明一下客户端不同连接方式时服务器端的处理方式,以perl中为例:
$dbh = DBI -> connect('dbi:Pg:dbname=test;host=127.0.0.1;port=6000', 'postgres', ' ' ) or die $DBI::errstr;
AutoCommit配置为:
{'AutoCommit' => 0}
psql: ERROR: no more connections allowed
template1=# select * from test; --no result
以上测试都是基于 pgbouncer version 1.1.1 + psql (PostgreSQL) 8.3.3