博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pgbouncer最佳实践:系列四
阅读量:2019 次
发布时间:2019-04-28

本文共 4694 字,大约阅读时间需要 15 分钟。

作者:王志斌,曾获得中国PostgreSQL数据库管理工程师(PGCE),是PostgreSQL官方认证讲师,盘古云课堂特邀金牌讲师。

最后再来说一下关于Pgbouncer的部署形式,包括单应用场景、多应用场景、集群场景还有多实例场景,这些方式都是依据不同的业务场景,没有孰优孰劣,符合的才是对的。其中单应用和多应用场景来源于官方。

单应用场景:

在这里插入图片描述

单应用场景主要具体为短连接较多的场景,频繁进行数据库的连接操作,但操作时间较短,均为短连接,所以将pgbouncer于应用服务器部署在同一台服务器,减少应用服务器和pgbouncer之间的开销。

配置文件

[databases]test1 =test =[pgbouncer]listen_port = 6688listen_addr = 192.168.165.3auth_type = md5auth_file = /home/postgres/pgbouncer/bin/userlist.txtlogfile = /home/postgres/pgbouncer/pgbouncer1.logpidfile =/home/postgres/pgbouncer/pgbouncer1.pidunix_socket_dir = /tmp;;unix_socket_mode = 0777admin_users = wzbstats_users = wzbpool_mode = sessionmax_client_conn=1000default_pool_size=30

导出数据库中用户名及密码到userslist.txt

userslist.txt,格式为用户名 密码

"testuser" "md54d15115d8bebd3188c1ae09c4a9848af""testuser1" "md5f8386abbae413786661ee5a5cfb5593c""wzb" "md53d57c4bc9a647385e6916efd0b44db46"

启动Pgbouncer

pgbouncer -d pgbouncer.ini

客户端连接方式

psql -dtest1 -Utestuser1 -p6688

多应用场景:

在这里插入图片描述

多应用场景,一般指多个应用服务器连接数据库,因此可以选择将pgbouncer与数据库服务部署在同一台服务器上,减少pgbouncer和数据库之间的开销。

配置PgBouncer.ini文件

[databases]a1 =  host=127.0.0.1 port=5432 dbname=testa2 =  host=127.0.0.1 port=5432 dbname=test1[pgbouncer]listen_port = 6688listen_addr = *auth_type = md5auth_file = /home/postgres/pgbouncer/bin/userlist.txtlogfile = /home/postgres/pgbouncer/pgbouncer.logpidfile =/home/postgres/pgbouncer/pgbouncer.pidadmin_users = wzbstats_users = wzbpool_mode = sessionmax_client_conn=1000default_pool_size=30

导出数据库中用户名及密码到userslist.txt

userslist.txt,格式为用户名 密码

"testuser" "md54d15115d8bebd3188c1ae09c4a9848af""testuser1" "md5f8386abbae413786661ee5a5cfb5593c""wzb" "md53d57c4bc9a647385e6916efd0b44db46"

启动Pgbouncer

pgbouncer -d pgbouncer.ini

连接后端数据库

$ psql -p 6688 -U testuser a1
$ psql -p 6688 -U testuser1 a2

连接pgbouncer数据库

psql -p 6688 pgbouncer -U wzb
pgbouncer=# show help;
NOTICE: Console usage
DETAIL:
SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|USERS|VERSION
SHOW FDS|SOCKETS|ACTIVE_SOCKETS|LISTS|MEM
SHOW DNS_HOSTS|DNS_ZONES
SHOW STATS|STATS_TOTALS|STATS_AVERAGES|TOTALS
SET key = arg
RELOAD
PAUSE []
RESUME []
DISABLE
ENABLE
RECONNECT []
KILL
SUSPEND
SHUTDOWN
SHOW
pgbouncer=# show clients;

type| Cuser| pgbouncerdatabase| pgbouncerstate| activeaddr| unixport| 6432local_addr| unixlocal_port| 6432connect_time| 2020-10-09 20:41:32 CSTrequest_time| 2020-10-09 20:41:32 CSTwait| 5wait_us| 483185close_needed| 0ptr| 0x9ec340link|remote_pid| 23567tls |

pgbouncer=# show pools;

database| pgbounceruser| pgbouncercl_active| 1cl_waiting| 0sv_active|0sv_idle|0sv_used|0sv_tested|0sv_login|0maxwait|0maxwait_us|0pool_mode|  transaction

集群场景(读写分离):

读写分离场景下pgbouncer的配置与前面配置基本一致,主要区别于要针对读和写进行分别部署pgbouncer,因为pgbouncer本身只是数据库连接池,不具备负载均衡,或高可用,IP漂移等特性,需要结合其他成熟产品进行组合使用。

多实例场景:

在这里插入图片描述

多实例场景主要利用linux系统端口重用技术,这个特性依靠Linux内核上的支持(Linux3.6以上版本),并结合pgbouncer自身支持(设置so_reuseport=1)结合起来形成多实例场景下的pgbouncer使用,可以认为是pgbouncer的高可靠或者高可用,在某一个实例进程故障的情况下,其他实例集成仍然可以处理来自外部的数据库连接请求。从操作系统层面来看,属于多进程共享同一个端口。

实例配置1

[databases]a2 =  host=127.0.0.1 port=5432 dbname=test1 pool_size=50;;a1 =  host=127.0.0.1 port=5432 dbname=test pool_size=30[pgbouncer]listen_port = 6688listen_addr = 192.168.165.3auth_type = md5auth_file = /home/postgres/pgbouncer/bin/userlist.txtlogfile = /home/postgres/pgbouncer/pgbouncer1.logpidfile =/home/postgres/pgbouncer/pgbouncer1.pidunix_socket_dir = /tmp/pg1#unix_socket_mode = 0777admin_users = wzbstats_users = wzbpool_mode = sessionmax_client_conn=1000default_pool_size=30so_reuseport = 1

实例配置2

[databases]a2 =  host=127.0.0.1 port=5432 dbname=test1 pool_size=50;;a1 =  host=127.0.0.1 port=5432 dbname=test pool_size=30[pgbouncer]listen_port = 6688listen_addr = 192.168.165.3auth_type = md5auth_file = /home/postgres/pgbouncer/bin/userlist.txtlogfile = /home/postgres/pgbouncer/pgbouncer2.logpidfile =/home/postgres/pgbouncer/pgbouncer2.pidunix_socket_dir = /tmp/pg2#unix_socket_mode = 0777admin_users = wzbstats_users = wzbpool_mode = sessionmax_client_conn=1000default_pool_size=30so_reuseport = 1

导出数据库中用户名及密码到userslist.txt

userslist.txt,格式为用户名 密码

"testuser" "md54d15115d8bebd3188c1ae09c4a9848af""testuser1" "md5f8386abbae413786661ee5a5cfb5593c""wzb" "md53d57c4bc9a647385e6916efd0b44db46"

启动多实例

./pgbouncer pgbouncer.ini
./pgbouncer pgbouncer1.ini

参考

[1]Pgbouncer官网
[2]PgBouncer Configuration
[3]Tuning PostgreSQL for sysbench-tpcc
[4]understanding-user-management-in-pgbouncer
[5]performance-best-practices-for-using-azure-database-for-postgresql-connection-pooling
[6]guide-using-pgbouncer
[7]azure-database-for-postgresql/connection-handling-best-practice-with-postgresql
[8]steps-to-install-and-setup-pgbouncer-connection-pooling-proxy
[9]pg-phriday-securing-pgbouncer

了解更多PostgreSQL热点资讯、新闻动态、精彩活动,请访问

解决更多PostgreSQL相关知识、技术、工作问题,请访问
下载更多PostgreSQL相关资料、工具、插件问题,请访问

转载地址:http://pmmxf.baihongyu.com/

你可能感兴趣的文章
IP地址分类
查看>>
单反拍摄技巧:常用拍摄技巧汇总
查看>>
ubuntu安装tftpserver
查看>>
单反拍摄技巧:利用直方图曝光
查看>>
pyqt5.8.2没有qt Designer和assistant exe的问题
查看>>
eric6安装插件cx-freeze的问题
查看>>
深度:老年旅游市场迎来转折点,50/60新老年消费升级带来结构性创新机会—营销/产品/运营
查看>>
深度:老年消费品细分领域潜藏爆品机会,老花镜市场6000万风险投资揭示老年消费升级背后的创新机会!
查看>>
深度:进入洗牌期的老年鞋市场对中国老年消费品行业的发展启示—足力健地位能否持续,奥康/红蜻蜓能否逆袭?
查看>>
深度分享:解读中国老年行业创新创业生态,六位创业者带来老年创投/社交电商/教育/旅游/化妆品一线实战经验心得!
查看>>
深度:回顾老年行业创新创业三大阶段,揭示老年需求升级、BAT高手入场、投资机构加快出手三大趋势!
查看>>
深度:巨头覆盖之下中老年电商的创新突破策略-获客、选品、转化、粘性
查看>>
深度:解密50+中老年电视/直播购物最新变化趋势—电视购物转型+直播购物崛起
查看>>
深度:老年消费市场新品类新热点不断涌现,解读轮椅/老年鞋/蛋白粉/助听器四大类产品创新发展路径
查看>>
HAProxy,智能分流的负载均衡方案
查看>>
linux、windows下利用Nginx对Tomcat做负载均衡
查看>>
Nginx + Tomcat
查看>>
Map遍历方法四种
查看>>
JavaScript跨域总结与解决办法
查看>>
使用spring配置RMI
查看>>