几十个必备的设计师灵感网站,满山红网站建设,企业网站建设需要多少钱成都,手机网站接入微信登录PostgreSQL从小白到专家#xff0c;是从入门逐渐能力提升的一个系列教程#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容#xff0c;希望对热爱PG、学习PG的同学们有帮助#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第35讲#… 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/Proxy 用的。 · PgBouncer 特点
内存需求低(缺省的时候每个连接 2k)。
它不是和单个后端服务器绑定的目标数据库可以位于不同的主机上。
对大多数设置都支持在线的重新配置无需重启。
支持在线的重启/升级而不会退出客户端的连接。
应用程序如果直接与PostgreSQL连接,每次连接pg都会克隆出一个服务进程来为应用程序提供服务关闭连接后pg会自动将服务进程给停掉.频繁的创建和销毁进程会消耗比较多的系统资源pgbouncer会将与pg的连接缓存住,当有请求进来,只是分配一个空闲的连接,这样降低了系统资源的消耗。
使用pgbouncer可以控制住数据库上的活动连接,一般配置为CPU核数的1.5-2.5倍之间。
pgbouncer使用libevent进行socket通信,效率很高。 PgBouncer部署
· Pgbouncer 安装
1、安装libevent(root用户)
/soft/libevent-2.1.12-stable
./configure --prefix/usr/local/libevent
make
makeinstall
2、安装pgbouncer (postgres用户)
export PKG_CONFIG_PATH/usr/local/libevent/lib/pkgconfig
cd /soft/pgbouncer-1.17.0
./configure --prefix/usr/local/pgbouncer
make make install · Pgbouncer 配置
1、创建/usr/local/pgbouncer/conf目录把pgbouncer.ini文件放在此目录下
2、复制模板文件
cp /usr/local/pgbouncer/share/doc/pgbouncer/pgbouncer.ini /usr/local/pgbouncer/conf/pgbouncer.ini
3、编辑pgbouncer.ini文件
logfile /var/log/pgbouncer/pgbouncer.log #目录需要root用户创建然后授权
pidfile /var/run/pgbouncer/pgbouncer.pid #目录需要root用户创建然后授权
listen_addr *
listen_port 6432
auth_type md5
auth_file /etc/pgbouncer/userlist.txt
admin_users postgres
stats_users hr
编辑/etc/pgbouncer/userlist.txt文件
该文件包含将来通过中间件连接到数据库的用户名和密码登录时需要用它来验证如果修改需要重启pgbouncer生效。
1)、先查询密码
select usename, passwd from pg_shadow order by 1;
2)、编辑userlist.txt
hr md5e661e439b4757f4595b811b4a196182d
postgres md53175bce1d3201d16594cebf9d7eb3f9d“
c1 md574fc5f6f852574d24cbca8153258784c Pgbouncer 启动与关闭
· 启动pgbouncer
/usr/local/pgbouncer/bin/pgbouncer -d /usr/local/pgbouncer/conf/pgbouncer.ini
· 关闭pgbouncer
目前pgbouncer还没有自主停止的脚本或者命令只能通过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 重启进程 Pgbouncer 连接
· 登录pgbouncer
pgbouncer对外提供了一个虚拟数据库pgbouncer之所以成为虚拟数据库是因为它可以提供像PostgreSQL那样的数据库操作界面但是这个数据库却并不是真实存在的。而是pgbouncer虚拟出来的一个命令行界面。
$ psql -p 6432 -d pgbouncer -U postgres
帮助命令用show命令查看当前的配置
Show help;
pgbouncer.ini配置文件详解 · 配置主要分为两部分
第一部分是[databases]区域是用来配置数据库连接相关信息的。
第二部分是[pgbouncer]是pgbouncer自身的配置。 · [databases]部分的配置
它的基本格式是
对外提供的数据库名 host主机IP port端口 user用户 password密码
其他的规则都类似数据库名后面的等号旁边要有空格隔开后面每个成对的数值之间用空格隔开。这里面的主机和端口指的是PostgreSQL监听的地址和端口而用户和密码就是用来连接PostgreSQL数据库的用户名和密码。
testdb host127.0.0.1 port1922 userhr passwordhr connect_querySELECT 1
pool_size 用来配置连接池的大小。如果没有这个值则使用[pgbouncer]部分的default_pool_size的值。
connect_query 后面跟一个SQL语句字符串用于探测这个连接是否正常如果执行SQL语句出错则换一个连接。
client_encoding指定连接的客户端使用的字符集编码
datestyle指定日期类型
timezone指定时区。 · 使用中间件来连接到testdb数据库
$ psql -p 6432 -d testdb -U hr
-p 指定pgbouncer监听的端口
-d 指定在配置文件中声明的数据库如果要切换到其它数据库则需要在配置文件中声明。 · [pgbouncer]部分的配置
logfile指定日志文件默认值是/var/log/pgbouncer/pgbouncer.log
pidfile指定pid文件位置默认值是/var/run/pgbouncer/pgbouncer.pid
listen_addr监听的地址默认值是127.0.0.1可以使用*号表示监听所有IP地址。
listen_port监听的端口默认值是6432
unix_socket_dir指定unix socket文件的目录默认为/tmp目录
unix_socket_mode指定unix socket文件的权限默认值为0777
unix_socket_group指定unix socket文件的组默认无
user指定启动PgBouncer的用户名windows系统不支持此设置
auth_type认证的类型默认是trust其他值包括md5cryptplainany。用得较多的是md5
auth_file认证文件的位置默认值是/etc/pgbouncer/userlist.txt
pool_mode指定池的模式默认是session模式还可以是transaction和statement
max_client_conn允许的最大连接数
default_pool_size默认的池大小默认值20
min_pool_size最小的池大小每个连接池至少会向后端数据库保持多少个连接
reserve_pool_size连接池的保留连接数
reserve_pool_timeout保留连接的超时时间 · 日志配置项
syslog是否打开syslogwindows下打开eventlog默认值为0表示不打开。
syslog_ident默认为PgBouncer
syslog_facility
log_connections是否记录连接成功的日志默认值为1表示记录
log_disconnection是否记录断开连接的日志默认值为1表示记录
log_pooler_errors连接池法网客户端的错误是否记录在日志中默认值为1表示记录
stats_period把汇总的统计信息写入日志的时间周期默认是60s · 控制界面访问控制配置项
admin_users管理用户名默认值是postgres
stats_users允许连接到控制界面查看连接池只读信息的用户列表。可以执行除“SHOW FDS”以外的其他“SHOW”命令
server_reset_query
server_check_delay空闲的连接多长时间进行一次健康检测判断连接是否可用。如果设置为0则立即检测默认值为30s
server_check_query进行健康检查的SQL语句如果为0表示不检测默认值为“select 1;”
server_lifetime连接的存活时间连接超过这个时间就会被关闭默认为3600设置为0表示只使用一次。
server_idle_timeout连接的idle时间超过此时间连接会被关闭。默认为600
server_connect_timeout后端数据库的login时间超过这个值就会被关闭。默认为15s
server_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也可以是返回的结果默认值是2147483647。
listen_backlogTCP监听函数listen的Backlog参数默认值为128。
sbuf_loopcnt处理过程中每个连接处理多少数据就切换到下一个连接。默认为5如果设置为0表示不限制。不限制时一个连接发送大量数据另外的连接可能就会空闲导致被结束掉。
tcp_defer_acceptlinux下默认为45其他平台为0。tcp_socket_buffer 默认没有设置。
tcp_keepalive是否以操作系统的默认值打开基本的keepalive 设置在linux下操作系统的keepalive里默认值是tcp_keepidle7200, tcp_keepintvl-75,tcp_keepcnt9其他操作系统类型默认值为1
tcp_keepcnt默认未设置。
tcp_keepidle默认未设置。
tcp_keepintvl默认未设置。 CUUG PostgreSQL技术大讲堂系列公开课往期视频及文档请联系CUUG客服。