PostgreSQL连接池pgbouncer的使用

今天在虚拟机上整理了下pgbouncer的安装使用过程,记录如下。 
说明:pgbouncer是一款轻量级针对postgresql的数据库连接工具,可以对客户端的连接做限制,防止恶意连接,另外也可以减少数据库的实际连接数,从而减少数据库的开销。 

环境: 

VMWARE 8
CentOS 5.7 
PG 9.1.2
pgbouncer 1.5.2
libevent-2.0.19

一.安装

1.下载pgbouncer的安装包
http://pgfoundry.org/frs/?group_id=1000258&release_id=1952,本次下载的安装包是pgbouncer-1.5.2.tar.gz2.下载libevent包
http://monkey.org/~provos/libevent/,见pgbouncer源码包中的Readme
这玩意也是个好东西,在很多地方用到3.安装libevent
$ cd libevent-2.0.19-stable
$ ./configure --prefix=/home/postgres/libevent
$ make
$ make install4.安装pgbouncer
$ cd pgbouncer-1.5.2
$ ./configure --prefix=/home/postgres/pgbouncer/ --with-libevent=/home/postgres/libevent/
$ make 
$ make install

查看pgbouncer是否安装成功,可以通过查看config.log中最后的返回值exit来确认,0是成功1是失败. 
二.配置 
1.配置pgbouncer的cfg文件

[postgres@localhost config]$ pwd
/home/postgres/pgbouncer/config
[postgres@localhost config]$ more pgbouncer.ini 
[databases]
f_game = host=127.0.0.1 port=1949 dbname=test_db user=test password=test[pgbouncer]
listen_port = 1999 
listen_addr = 127.0.0.1
auth_type = md5
auth_file = /home/postgres/pgbouncer/user.txt
logfile = /home/postgres/pgbouncer/pgbouncer.log
pidfile = /home/postgres/pgbouncer/pgbouncer.pid
admin_users = u_kenyon
pool_mode = Transaction

2.配置用户密码文件users.txt

[postgres@localhost pgbouncer]$ pwd
/home/postgres/pgbouncer
[postgres@localhost pgbouncer]$ more user.txt 
"u_kenyon" "123"

三.启动 
1.启动命令

[postgres@localhost config]$ pgbouncer -d pgbouncer.ini 
2012-08-21 00:29:55.573 4247 LOG File descriptor limit: 1024 (H:1024), max_client_conn: 100, max fds possible: 130

2.查看日志 
tail -f /home/postgres/pgbouncer/pgbouncer.log 

3.登录

[postgres@localhost pgbouncer]$ psql -h 127.0.0.1 -p 1999 -U u_kenyon f_game
Password for user u_kenyon: 
psql (9.1.2)
Type "help" for help.f_game=> \dList of relationsSchema |   Name   | Type  |  Owner   
--------+----------+-------+----------public | t_kenyon | table | postgrespublic | test     | table | testpublic | test2    | table | postgres
(3 rows)f_game=> \q

4.参数使用例子 
连接pgbouncer本身的DB

[postgres@localhost config]$ psql -h 127.0.0.1 -p 1999 -U u_kenyon pgbouncer Password for user u_kenyon: 
psql (9.1.2, server 1.5.2/bouncer)
WARNING: psql version 9.1, server version 1.5.Some psql features might not work.
Type "help" for help.pgbouncer=# show help;
NOTICE:  Console usage
DETAIL:  SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|VERSIONSHOW STATS|FDS|SOCKETS|ACTIVE_SOCKETS|LISTS|MEMSHOW DNS_HOSTS|DNS_ZONESSET key = argRELOADPAUSE []RESUME []KILL          SUSPENDSHUTDOWN
SHOW
pgbouncer=# show config;key            |                 value                  | changeable 
---------------------------+----------------------------------------+------------job_name                  | pgbouncer                              | noconffile                  | pgbouncer.ini                          | yeslogfile                   | /home/postgres/pgbouncer/pgbouncer.log | yespidfile                   | /home/postgres/pgbouncer/pgbouncer.pid | nolisten_addr               | 127.0.0.1                              | nolisten_port               | 1999                                   | nolisten_backlog            | 128                                    | nounix_socket_dir           | /tmp                                   | nounix_socket_mode          | 511                                    | nounix_socket_group         |                                        | noauth_type                 | md5                                    | yesauth_file                 | /home/postgres/pgbouncer/user.txt      | yespool_mode                 | transaction                            | yesmax_client_conn           | 100                                    | yesdefault_pool_size         | 20                                     | yesmin_pool_size             | 0                                      | yesreserve_pool_size         | 0                                      | yesreserve_pool_timeout      | 5                                      | yessyslog                    | 0                                      | yessyslog_facility           | daemon                                 | yessyslog_ident              | pgbouncer                              | yesuser                      |                                        | noautodb_idle_timeout       | 3600                                   | yesserver_reset_query        | DISCARD ALL                            | yesserver_check_query        | select 1                               | yesserver_check_delay        | 30                                     | yesquery_timeout             | 0                                      | yesquery_wait_timeout        | 0                                      | yesclient_idle_timeout       | 0                                      | yesclient_login_timeout      | 60                                     | yesidle_transaction_timeout  | 0                                      | yesserver_lifetime           | 3600                                   | yesserver_idle_timeout       | 600                                    | yesserver_connect_timeout    | 15                                     | yesserver_login_retry        | 15                                     | yesserver_round_robin        | 0                                      | yessuspend_timeout           | 10                                     | yesignore_startup_parameters |                                        | yesdisable_pqexec            | 0                                      | nodns_max_ttl               | 15                                     | yesdns_zone_check_period     | 0                                      | yespkt_buf                   | 2048                                   | nosbuf_loopcnt              | 5                                      | yestcp_defer_accept          | 1                                      | yestcp_socket_buffer         | 0                                      | yestcp_keepalive             | 1                                      | yestcp_keepcnt               | 0                                      | yestcp_keepidle              | 0                                      | yestcp_keepintvl             | 0                                      | yesverbose                   | 0                                      | yesadmin_users               | u_kenyon                               | yesstats_users               |                                        | yesstats_period              | 60                                     | yeslog_connections           | 1                                      | yeslog_disconnections        | 1                                      | yeslog_pooler_errors         | 1                                      | yes
(56 rows)

本次测试环境修改的参数不多,还有其他参数如server_idle_timeout,max_connections也比较重要,后期再写。 
使用reload可以不用重启pgbouncer而使修改的参数生效

pgbouncer=# reload;
RELOAD
pgbouncer=# 

5.使用效果 
在连接池端看连接数:

pgbouncer=# show clients;type |   user   | database  | state  |   addr    | port  | local_addr | local_port |    connect_time     |    request_time     |   ptr    | link 
------+----------+-----------+--------+-----------+-------+------------+------------+---------------------+---------------------+----------+------C    | u_kenyon | f_game    | active | 127.0.0.1 | 59555 | 127.0.0.1  |       1999 | 2012-08-21 00:32:19 | 2012-08-21 01:47:14 | 0xbc4670 | C    | u_kenyon | f_game    | active | 127.0.0.1 | 59558 | 127.0.0.1  |       1999 | 2012-08-21 00:32:35 | 2012-08-21 02:09:04 | 0xbc4940 | C    | u_kenyon | f_game    | active | 127.0.0.1 | 59573 | 127.0.0.1  |       1999 | 2012-08-21 02:09:08 | 2012-08-21 02:09:10 | 0xbc43a0 | C    | u_kenyon | f_game    | active | 127.0.0.1 | 59576 | 127.0.0.1  |       1999 | 2012-08-21 02:09:44 | 2012-08-21 02:09:46 | 0xbc4aa8 | C    | u_kenyon | f_game    | active | 127.0.0.1 | 59578 | 127.0.0.1  |       1999 | 2012-08-21 02:09:58 | 2012-08-21 02:10:10 | 0xbc4c10 | C    | u_kenyon | pgbouncer | active | 127.0.0.1 | 59570 | 127.0.0.1  |       1999 | 2012-08-21 02:01:58 | 2012-08-21 02:10:12 | 0xbc4508 | C    | u_kenyon | pgbouncer | active | 127.0.0.1 | 59574 | 127.0.0.1  |       1999 | 2012-08-21 02:09:17 | 2012-08-21 02:09:29 | 0xbc47d8 | 
(7 rows)pgbouncer=# show fds;fd |  task  |   user   | database |   addr    | port  |       cancel        | link | client_encoding | std_strings | datestyle |  timezone  
----+--------+----------+----------+-----------+-------+---------------------+------+-----------------+-------------+-----------+------------8 | pooler |          |          | 127.0.0.1 |  1999 |                   0 |    0 |                 |             |           | 9 | pooler |          |          | unix      |  1999 |                   0 |    0 |                 |             |           | 13 | client | u_kenyon | f_game   | 127.0.0.1 | 59555 | 8879718699069493200 |    0 | UTF8            | on          | ISO, MDY  | US/Pacific15 | client | u_kenyon | f_game   | 127.0.0.1 | 59558 | 2718240829565746463 |    0 | UTF8            | on          | ISO, MDY  | US/Pacific14 | client | u_kenyon | f_game   | 127.0.0.1 | 59573 | 9376066101244793463 |    0 | UTF8            | on          | ISO, MDY  | US/Pacific16 | client | u_kenyon | f_game   | 127.0.0.1 | 59576 | 9911177087544032756 |    0 | UTF8            | on          | ISO, MDY  | US/Pacific17 | client | u_kenyon | f_game   | 127.0.0.1 | 59578 | 7987308370302986343 |    0 | UTF8            | on          | ISO, MDY  | US/Pacific12 | server | test     | f_game   | 127.0.0.1 |  1949 |      20770794712503 |    0 | UTF8            | on          | ISO, MDY  | US/Pacific
(8 rows)

在DB端看连接数:

f_game=> select count(1) from pg_stat_activity;count 
-------2
(1 row)

只有2个,看来池的效果已经初显成效,可预计高并发的时候池连接的可重复性使用,实际连接到DB端的进程并不是很多.

6.pool_mode说明 
有三种模式:session,transaction,statement 
session是默认的模式,每开启一个进程,DB端也会开启一个新的进程 
transaction是基于事务模式的 
statement是基于每个查询的,开启此模式不适合执行事务,会报错 
原文见安装后pgbouncer中的usage.txt,本次文件地址 /home/postgres/pgbouncer/share/doc/pgbouncer

Session pooling :: Most polite method. When client connects, a server connection will be assigned to it for the whole duration the client stays connected. When the client disconnects, the server connection will be put back into the pool. This is the default method. 
Transaction pooling :: A server connection is assigned to client only during a transaction. When PgBouncer notices that transaction is over, the server connection will be put back into the pool.
Statement pooling :: Most aggressive method. The server connection will be put back into pool immediately after a query completes. Multi-statement transactions are disallowed in this mode as they would break. 

四.总结 
1.本次在虚拟机上测试,使用的模式是修改后的transcation模式,在服务端开启6个psql进程,但在数据库端实际只有1个连接,池的效果可见一斑,对并发高的访问,可以有效减少DB端的连接进程,减少消耗。 
2.测试过程中,假如第一次访问被拒绝以后(不是密码不对),后续访问会直接拒绝,此举可以有效降低攻击性的访问。

 

转:http://my.oschina.net/Kenyon/blog/73935

转载于:https://www.cnblogs.com/shuaixf/archive/2012/10/02/2710432.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

❤️❤️❤️【资料免费领取】简历模板、职场PPT模板、硬核学习资料+PDF资料(Java、Python、大数据、机器学习)❤️❤️❤️

🍅【领取方法】 长按识别二维码,回复【资料】领取 目录 1、100套小编购买的简历模板(部分截图) 2、1000套精品PPT模板(部分截图) 3、大数据-学习资料(1.3G 硬核PDF,官方指南&…

超20亿!2018年国家自然科学基金(重点项目)出炉!

来源:青塔摘要:8月16日,2018年国家自然科学基金评审结果正式揭晓。8月16日,2018年国家自然科学基金评审结果正式揭晓。继昨天发布了2018年国家优青项目各单位的立项情况后,青塔今天又整理重点项目的立项情况和完整名单…

❤️ 珊姐带你学JavaScript:数组和函数 (万文建藏)❤️

🍅 作者:阿珊 🍅 简历模板、职场PPT模板、技术交流尽管关注私聊我。 🍅 期许:欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 热门专栏推荐: 🥇 大数据集锦…

查看本机打开的端口

一、怎样查看本机打开的端口?1. Windows本身自带的netstat命令 Netstat 显示协议统计和当前的 TCP/IP 网络连接。该命令只有在安装了 TCP/IP 协议后才可以使用。 netstat [-a] [-e] [-n] [-s] [-p protocol] [-r] [interval] 参数 -a 显示所有连接和侦…

产业|中国电子学会发布《机器人十大新兴应用领域(2018-2019年)》

来源: 中国电子学会8月19日,2018世界机器人大会胜利闭幕,闭幕式上中国电子学会发布了《发布机器人十大新兴应用领域(2018-2019年)》。当前,全球正在经历科技、产业、资本高度耦合、深度迭加的新一轮变革&am…

在linux下添加路由

linux下添加路由的方法:   一:使用 route 命令添加   使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法:   //添加到主机的路由   # route add –host 192.168.168.110 dev eth0   # rout…

2018-2019年新一代AI领域十大最具成长性技术展望

来源:网络大数据摘要:在2018世界机器人大会17日的主论坛上,中国电子学会发布《新一代人工智能领域十大最具成长性技术展望(2018-2019年)》。当前,全球正在经历科技和产业高度耦合、深度迭加的新一轮变革,大数据的形成、…

wzplayer for android V1.0

V1.0上图,哈哈 转载于:https://www.cnblogs.com/weinyzhou/archive/2012/10/12/2750055.html

全球公有云巨头:亚马逊 AWS

来源:乐晴智库精选摘要:亚马逊AWS目前拥有超过1500种产品和2100余种第三方模块,为全球190个国家的企业提供支持。AWS作为亚马逊旗下的云计算服务平台,面向全世界范围的用户提供包括弹性计算、存储、数据库、应用程序在内的一整套云…

地灾应急暨地灾危险性评估培训班学习笔记

前一阵子单位安排到新疆参加了一个培训,关于地灾应急和危险性评估方面的,培训时间不长,不过信息量挺大,学习的时候做了一些读书笔记如下:首先讲到关于加强地质灾害防治工作的内容,其中有提到关于地质灾害信…

❤️爆肝新一代大数据存储宠儿,梳理了2万字 “超硬核” 文章!❤️

🍅 作者:不吃西红柿 🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 如有…

埃森哲:技术改变看病的五大趋势!每个人都将受益【附下载】| 智东西内参...

来源:智东西摘要:解读五大科技趋势及其对生活的影响,盘点新兴技术对医疗健康产业的影响案例。全球医疗水准已经达到一个临界点,那就是与技术的深度碰撞,商业与个人医疗的界限在模糊。医疗机构越来越重视智能化技术的作…

php页面缓存

这几天接触了phpcms的页面缓存,有些感触。其好处就不多说了,它一般是用在数据库查询较多的页面中,对于插入修改删除的页面就不大合适了。 这里有缓存技术的简单介绍:http://www.cnblogs.com/penghcn/articles/2720202.html php页面…

《画解算法》1.两数之和【python实现】

🍅 作者主页:不吃西红柿 🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。 🍅 欢迎点赞 👍 收藏 ⭐留言 📝…

工业AI时代,大数据云平台未来5年迎最佳发展时机

来源:专知摘要:继德国工业 4.0 的提出,中国也确立了“中国制造 2025”的目标,工业 4.0 及物联网的概念在中国大地上遍地开花,整个行业也是红红火火。从工业大数据到智能制造,工业大数据云平台将为工业创新和…

噪音 - Perlin Noise

转载自:http://www.cnblogs.com/babyrender/archive/2008/10/27/BabyRender.html 说起perlin noise, 最初也就是在课上大概了解了一下, 知道是个生成仿真贴图的东西. 学的时候没怎么细想, 只是知道这个东西很快. 生成3d贴图很方便. 不过最近在做sampling的时候, 发现…

《画解算法》2.整数反转【python-简单】

🍅 作者主页:不吃西红柿 🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌。简历模板、职场PPT模板、技术难题交流、面试套路尽管【关注】私聊我。 🍅 欢迎点赞 👍 收藏 ⭐留言 📝…

360:中国为什么没有自主研发的浏览器内核?

来源:360公司物联网智库 整理发布摘要:近日360公司发表题为《中国为什么没有自主研发的浏览器内核?》的文章,文章中写道:从0到1,从无到有,这是很多人理解的自主研发,按这个标准&…

用 WebClient 轻松实现文件下载上传、网页抓取

我们知道用 WebRequest(HttpWebRequest、FtpWebRequest) 和 WebResponse(HttpWebResponse、FtpWebResponse)可以实现文件下载上传、网页抓取,可是用 WebClient 更轻松。用 DownloadFile 下载网页using (System.Net.Web…

❤️ 炒 股 实 战丨原 地 起 飞 ❤️

郑重声明: 1、个人版可以免费获取交易数据进行分析,企业级大规模调用数据需要购买积分(大家玩玩即可) 2、为避免广告代言,本文将不会出现任何logo、链接和包,需要玩的主页私聊我! &#x1f345…