postgresql从入门到精通 - 第35讲:中间件PgBouncer部署|PostgreSQL教程

wufei123 发布于 2023-11-28 阅读(458)

最新php菜鸟教程下载

原标题:postgresql从入门到精通 - 第35讲:中间件PgBouncer部署|PostgreSQL教程

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程资源,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。

第35讲:中间件PgBouncer部署11资源月25日(周六)19:30-20:30,往期公开课的文档及视频,联系CUUG内容1 : PgBouncer 简介内容2 : PgBouncer 安装内容3 : PgBouncer 启动与关闭

内容4 :资源 通过PgBouncer 连接到数据库PgBouncer简介· PgBouncer 是 PostgreSQL的轻量的连接池,支持三种模式->Session pooling/会话连接池最礼貌的方法。

在客资源户端连接的时候,在它的连接生命期内,会给它赋予一个服务器连接在客户端断开的时候,服务器连接会放回到连接池中->Transaction pooling/事务连接池服务器连接只有在一个事务里的时候才赋予客资源户端。

在 PgBouncer 注意到事务结束的时候,服务器将会放回连接池中这是一个 hack,因为它打破了应用对后端连接的看法只有在应用配合这样的使用模式,没有使用会破坏这种使用模式的时候才能用这个连资源接方式->Statement pooling/语句连接池 最激进的模式。

这是事务连接池的一个扭曲的变种 - 不允许多语句的事务这就意味着是在客户端强制 “autocomit”模式,主要是给 PL/Pr资源oxy 用的· PgBouncer 特点内存需求低(缺省的时候每个连接 2k)。

它不是和单个后端服务器绑定的,目标数据库可以位于不同的主机上对大多数设置,都支持在线的重新配置,无需重启支持在线的重启/资源升级,而不会退出客户端的连接应用程序如果直接与PostgreSQL连接,每次连接pg都会克隆出一个服务进程来为应用程序提供服务,关闭连接后pg会自动将服务进程给停掉.频繁的创建和销毁进程,会消耗比较多资源的系统资源,pgbouncer会将与pg的连接缓存住,当有请求进来,只是分配一个空闲的连接,这样降低了系统资源的消耗。

使用pgbouncer可以控制住数据库上的活动连接,一般配置为CPU核数的1.5-资源2.5倍之间pgbouncer使用libevent进行socket通信,效率很高PgBouncer部署· Pgbouncer 安装。

1、安装libevent(root用户):/soft/libeven资源t-2.1.12-stable./configure --prefix=/usr/local/libeventmakemakeinstall

2、安装pgbouncer (postgres用户)expo资源rt PKG_CONFIG_PATH=/usr/local/libevent/lib/pkgconfigcd /soft/pgbouncer-1.17.0

./configure --prefix=/u资源sr/local/pgbouncermake && make install· Pgbouncer 配置1、创建/usr/local/pgbouncer/conf目录,把pgbouncer.ini文件资源放在此目录下

2、复制模板文件cp /usr/local/pgbouncer/share/doc/pgbouncer/pgbouncer.ini /usr/local/pgbouncer/conf/pg资源bouncer.ini

3、编辑pgbouncer.ini文件logfile = /var/log/pgbouncer/pgbouncer.log #目录需要root用户创建,然后授权pidfile =资源 /var/run/pgbouncer/pgbouncer.pid #目录需要root用户创建,然后授权

listen_addr = *listen_port = 6432auth_type = md5资源auth_file = /etc/pgbouncer/userlist.txtadmin_users = postgres

stats_users = hr编辑/etc/pgbouncer/userli资源st.txt文件该文件包含将来通过中间件连接到数据库的用户名和密码,登录时需要用它来验证,如果修改,需要重启pgbouncer生效。

1)、先查询密码:select usename, passwd fr资源om pg_shadow order by 1;2)、编辑userlist.txt"hr" "md5e661e439b4757f4595b811b4a196182d"

"postgres" "md531资源75bce1d3201d16594cebf9d7eb3f9d“"c1" "md574fc5f6f852574d24cbca8153258784c"Pgbouncer 启动与关闭

· 启动pgbounce资源r/usr/local/pgbouncer/bin/pgbouncer -d /usr/local/pgbouncer/conf/pgbouncer.ini· 关闭pgbouncer

目前pgbounc资源er还没有自主停止的脚本或者命令,只能通过kill命令来停止格式是:cat /var/run/pgbouncer/pgbouncer.pid | xargs kill -9· 重启pgbouncer。资源

/usr/local/pgbouncer/bin/pgbouncer -R -d /usr/local/pgbouncer/conf/pgbouncer.ini参数:-d :后台运行-R :重启进程P资源gbouncer 连接

· 登录pgbouncerpgbouncer对外提供了一个虚拟数据库pgbouncer,之所以成为虚拟数据库,是因为它可以提供像PostgreSQL那样的数据库操作界面,但是这个资源数据库却并不是真实存在的。

而是pgbouncer虚拟出来的一个命令行界面$ psql -p 6432 -d pgbouncer -U postgres帮助命令,用show命令查看当前的配置Show h资源elp;pgbouncer.ini配置文件详解

· 配置主要分为两部分:第一部分是[databases]区域,是用来配置数据库连接相关信息的第二部分是[pgbouncer],是pgbouncer自身的配资源置· [databases]部分的配置它的基本格式是:。

对外提供的数据库名 = host=主机IP port=端口 user=用户 password=密码其他的规则都类似,数据库名后面的等号旁边要有空资源格隔开,后面每个成对的数值之间用空格隔开这里面的主机和端口指的是PostgreSQL监听的地址和端口,而用户和密码就是用来连接PostgreSQL数据库的用户名和密码。

testdb = host=12资源7.0.0.1 port=1922 user=hr password=hr connect_query=SELECT 1 pool_size 用来配置连接池的大小如果没有这个值则使用[pgbounce资源r]部分的default_pool_size的值。

connect_query :后面跟一个SQL语句字符串,用于探测这个连接是否正常,如果执行SQL语句出错,则换一个连接client_encoding资源:指定连接的客户端使用的字符集编码datestyle:指定日期类型。

timezone:指定时区· 使用中间件来连接到testdb数据库$ psql -p 6432 -d testdb -U hr-p 资源:指定pgbouncer监听的端口-d :指定在配置文件中声明的数据库,如果要切换到其它数据库,则需要在配置文件中声明。

· [pgbouncer]部分的配置logfile:指定日志文件,默认值是/va资源r/log/pgbouncer/pgbouncer.logpidfile:指定pid文件位置,默认值是/var/run/pgbouncer/pgbouncer.pid

listen_addr:监听的地址资源,默认值是127.0.0.1,可以使用*号表示监听所有IP地址listen_port:监听的端口,默认值是6432unix_socket_dir:指定unix socket文件的目录,默认为/tmp目资源录。

unix_socket_mode:指定unix socket文件的权限,默认值为0777unix_socket_group:指定unix socket文件的组,默认无user:指定启动PgBoun资源cer的用户名,windows系统不支持此设置

auth_type:认证的类型,默认是trust,其他值包括md5,crypt,plain,any用得较多的是md5auth_file:认证文件的位置,默资源认值是/etc/pgbouncer/userlist.txt。

pool_mode:指定池的模式,默认是session模式,还可以是transaction和statementmax_client_con资源n:允许的最大连接数default_pool_size:默认的池大小,默认值20

min_pool_size:最小的池大小,每个连接池至少会向后端数据库保持多少个连接reserve_pool_size:资源连接池的保留连接数reserve_pool_timeout:保留连接的超时时间· 日志配置项:

syslog:是否打开syslog,windows下打开eventlog,默认值为0,表示不打开syslo资源g_ident:默认为PgBouncersyslog_facilitylog_connections:是否记录连接成功的日志,默认值为1,表示记录。

log_disconnection:是否记录断开连接资源的日志,默认值为1,表示记录log_pooler_errors:连接池法网客户端的错误是否记录在日志中,默认值为1,表示记录stats_period:把汇总的统计信息写入日志的时间周期,默认是60s

·资源 控制界面访问控制配置项:admin_users:管理用户名,默认值是postgresstats_users:允许连接到控制界面,查看连接池只读信息的用户列表可以执行除“SHOW FDS”以外的其他“资源SHOW”命令。

server_reset_queryserver_check_delay:空闲的连接多长时间进行一次健康检测,判断连接是否可用如果设置为0,则立即检测,默认值为30sserver_ch资源eck_query:进行健康检查的SQL语句,如果为0,表示不检测,默认值为“select 1;”。

server_lifetime:连接的存活时间,连接超过这个时间就会被关闭,默认为3600,设置为0资源表示只使用一次server_idle_timeout:连接的idle时间,超过此时间,连接会被关闭默认为600。

server_connect_timeout:后端数据库的login时间超过这个值就会被资源关闭默认为15sserver_login_retry:传送到后端数据库的连接失败后,等多长时间后重试,默认为15s。

client_login_timeout:客户端与PgBouncer建立连接后,如果资源无法在这段时间内完成登录,那么连接会断开,默认为60s· 危险超时配置项:指的是为防止一些未知错误或者原因导致系统卡住的针对性配置。

query_timeout:允许超过该时间值的SQL会被断开,应该比资源SQL实际的执行时间稍长,也需要比数据库的statement_timeout参数值更大为了应付一些未知的网络问题默认为0.0,禁止使用。

query_wait_timeout:请求在队列中等待被执行的最资源长时间,如果超过该时间还没有分配到连接,就会断开默认为0,禁止使用client_idle_timeout:客户端连接空闲,超过该时间,则断开连接。

默认值为0,禁止使用idle_transaction_资源timeout:客户端启动事务后,超过这个时间没有结束事务,则关闭这个客户端连接默认值为0,禁止使用· 底层网络连接配置:pkt_buf:用于网络包的内部缓冲区大小,会影响发出的TCP包的大小即内存的资源使用,默认值为2048,一般保持默认值。

max_packet_size:通过PgBouncer最大的包大小,包可以是一个SQL,也可以是返回的结果,默认值是2147483647listen_backl资源og:TCP监听函数listen的Backlog参数,默认值为128。

sbuf_loopcnt:处理过程中,每个连接处理多少数据就切换到下一个连接默认为5,如果设置为0,表示不限制不限制时,一个连接发资源送大量数据,另外的连接可能就会空闲,导致被结束掉tcp_defer_accept:linux下,默认为45,其他平台为0。

tcp_socket_buffer 默认没有设置tcp_keepalive:是资源否以操作系统的默认值打开基本的keepalive 设置,在linux下,操作系统的keepalive里,默认值是tcp_keepidle=7200, tcp_keepintvl-75,tcp_keep资源cnt=9,其他操作系统类型,默认值为1

tcp_keepcnt:默认未设置tcp_keepidle:默认未设置tcp_keepintvl:默认未设置CUUG PostgreSQL技术大讲堂系列公开课,资源往期视频及文档,请联系CUUG客服返回搜狐,查看更多

责任编辑:

亲爱的读者们,感谢您花时间阅读本文。如果您对本文有任何疑问或建议,请随时联系我。我非常乐意与您交流。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。