PgBouncer 的特点
- 内存消耗低(默认为2k/连接),因为Bouncer不需要每次都接受完整的数据包
- 可以把不同的数据库连接到一个机器上,而对客户端保持透明
- 支持在线的重新配置而无须重启
- 仅支持V3协议,因此后端版本须>=7.4
以下是Pgbouncer的安装过程。
安装准备
下载源文件
http://pgfoundry.org/frs/?group_id=1000258&release_id=1645
安装libevent组件
http://monkey.org/~provos/libevent/下载,安装过程查看手册。
安装 PgBouncer
1 2 3 |
./configure --prefix=/opt/pgbouncer --with-libevent=/usr/local/ make make install |
配置 PgBouncer
编写配置文件
1 2 3 |
$ mkdir -p $PGDATA/pgbouncer_config $ mkdir -p $PGDATA/pgbouncer_config/run cd $PGDATA/pgbouncer_config |
配置文件 config.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[databases] skytf = host=127.0.0.1 dbname=mydb port=1999 pool_size=500 postgres = host=127.0.0.1 dbname=postgres port=1999 pool_size=25 [pgbouncer] pool_mode = session listen_port = 1999 listen_addr = * unix_socket_dir = /database/pgdata/pg_root/pgbouncer_config/run auth_type = md5 auth_file = /database/pgdata/pg_root/pgbouncer_config/users.txt logfile = /var/applog/pg_log/pgbouncer.log #logfile = /dev/null pidfile = /database/pgdata/pg_root/pgbouncer_config/pgbouncer.pid max_client_conn = 6500 default_pool_size = 900 reserve_pool_timeout = 0 reserve_pool_size = 30 server_reset_query = DISCARD ALL; admin_users = pgbouncer_admin stats_users = pgbouncer_guest ignore_startup_parameters = extra_float_digits,application_name,geqo stats_period = 30 |
说明: 关于参数的解释在pgbouncer的源文件中有非常详细的文档,这里就不说明了。
配置文件 users.txt
1 2 |
"pgbouncer_admin" "pgbouncer_admin" "skytf" "skytf" |
启动 PgBouncer
1
|
./opt/pgbouncer/bin/pgbouncer -d /database/pgdata/pg_root/pgbouncer_config/config.ini
|
测试通过pgbouncer连接是否正常
1
|
psql -h 127.0.0.1 -p 1999 -d mydb -U skytf
|
管理 PgBouncer
以管理用户进入pgbouncer
1
|
psql -h 127.0.0.1 -p 1999 -U pgbouncer_admin -d pgbouncer
|
查看pgbouncer运行情况
1 2 3 4 |
pgbouncer=# show stats; pgbouncer=# show lists; pgbouncer=# show pools; pgbouncer=# show databases; |
参考目录结构
1 2 3 4 5 6 |
[postgres@pg1 pgbouncer_config]$ ll 总计 16K -rw-rw-r-- 1 postgres postgres 734 08-19 13:47 config.ini -rw-r--r-- 1 postgres postgres 5 08-19 14:01 pgbouncer.pid drwxrwxr-x 2 postgres postgres 4.0K 08-19 14:01 run -rw-rw-r-- 1 postgres postgres 52 08-19 14:09 users.txt |
一、Pgbouncer 的介绍
- Pgbouncer是一个针对PostgreSQL数据库的轻量级连接池,任何目标应用都可以把 pgbouncer 当作一个 PostgreSQL 服务器来连接,然后pgbouncer 会处理与服务器连接,或者是重用已存在的连接。
- pgbouncer 的目标是降低因为新建到 PostgreSQL 的连接而导致的性能损失。
二、PgBouncer的作用
-
PgBouncer可以在后端数据库和前端应用间建立连接的桥梁,由PgBouncer去处理和后端数据库的连接关系。
- 对客户端连接进行限制,预防过多或者恶意的连接请求。
三、概念图(下图很形象)
四、 PgBouncer的优点
- 内存消耗低(默认为2k/连接),因为Bouncer不需要每次都接受完整的数据包
- 可以把不同的数据库连接到一个机器上,而对客户端保持透明
- 支持在线的重新配置而无须重启
- pgbouncer 可以限制每一对用户+数据库 到PostgreSQL Cluster的总连接数
五、 PgBouncer缺点
-
仅支持V3协议,因此后端版本须>=7.4
- 并没有真正实现数据库的负载均衡,如果单一的对一个数据库操作会使某个数据节点读写量增大
- 当某个数据库down掉后,就不能通过pgbouncer连接起来,缺少了数据库备份的功能
六、总结
- 主要工作还是每一个数据节点对数据的存取,pgbouncer只是提供给客户端数据节点的分配和链接以及限制客户端连接的数量。
- 但整体上实现了对数据的负载均衡
七、重要的配置文件(例子)
[databases]
osdba=host=127.0.0.1 port=5432 user=osdba dbname=osdb
- “本句话说明该pgbouncer创建了针对127.0.0.1的osdb的一个连接池,该链接池对调用方的呈现的数据库名称是osdba,它映射到本机的osdb数据库上。所有访问pgbouncer上的osdba的请求都会转到osdb上完成。这意味着,客户端通过pgbouncer单次连接时,只能连接到某台主机上的某个数据库”
postgres1= host= 192.168.12.32 port=5432 user=ddong dbname=template1
postgres2=host=192.168.12.33 port=5432 user=ddong dbname=template1
[pgbouncer]
listen_port=64321
listen_addr=127.0.0.1
auth_type=md5
auth_file=users.txt
logfile=pgbouncer.log
pidfile=pgbouncer.pid
admin_users = bntest
-
在装有psql的机器上使用命令:psql -h 127.0.0.1 -p 64321 -U <用户名> <数据库名>(如数据库:osdba、postgres1、postgres2)
- 用户名为users.txt文件里的用户
- 如:psql -h 127.0.0.1 -p 64321 -U ddong postgres1 即通过pgbouncer登录到主机为192.168.12.32的数据库为template1的机器上
- Pgbouncer的配置文件有映射关系,如上例所示
八、手册参考
九、注意事项
- 基于pgbouncer的数据库集群 以上配置文件和参考文档针对软件包:PostgreSQL-9.0.13.tar.gz pgbouncer-1.3.4.tgz
- 安装完成后,须有bin目录和lib目录下的环境变量配置,安装目录所属用户
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/database/237010.html