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/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 = host=127.0.0.1 port=1922 user=hr password=hr connect_query='SELECT 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,其他值包括md5,crypt,plain,any。用得较多的是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:是否打开syslog,windows下打开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_backlog: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_keepcnt=9,其他操作系统类型,默认值为1

tcp_keepcnt:默认未设置。

tcp_keepidle:默认未设置。

tcp_keepintvl:默认未设置。

CUUG PostgreSQL技术大讲堂系列公开课,往期视频及文档,请联系CUUG客服。

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

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

相关文章

荆涛《春节回家》:歌声中的年味与乡愁

荆涛《春节回家》:歌声中的年味与乡愁春节,对于每一个中国人来说,都是一年中最为重要的时刻。它不仅仅是一个节日,更是团圆、乡愁、回忆与希望的象征。歌手荆涛的歌曲《春节回家》恰恰捕捉到了这些情感,用音乐为人们绘…

hdlbits系列verilog解答(Exams/m2014 q4e)-46

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路: 二、verilog源码 module top_module (input in1,input in2,output out);assign out ~(in1 | in2);endmodule三、仿真结果 转载请注明出处!

【SpringBoot系列】SpringBoot日志配置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

hdlbits系列verilog解答(exams/m2014_q4i)-45

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路: 二、verilog源码 module top_module (output out);assign out 1b0;endmodule三、仿真结果 转载请注明出处!

【C++】哈希(位图、布隆过滤器)

一、哈希的应用(位图和布隆过滤器) 1、位图(bitset) (1)位图概念 【题目】 给 40亿 个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这 40亿 个数中。…

mysql 行转列 GROUP_CONCAT 试验

1.概要 很多时候需要用到行专列的方式做数据分析。比如对通讯数据的采集 数据采集结果如下: 变量值采集周期131251132272 我想要看的结果 变量1变量2采集周期351372 就是我想看到相关数据的周期变化情况。 2.试验 2.1创建数据如下(表名 tb5&…

发现有一个会Python的男友魅力值杠杠的!!!

Python能做什么? 可以做日常任务,比如自动备份你的MP3,可以做网站,很多著名的网站像知乎、YouTube就是Python写的, 可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。 上面说的这些本人并没有实…

第98步 深度学习图像目标检测:SSD建模

基于WIN10的64位系统演示 一、写在前面 本期开始,我们继续学习深度学习图像目标检测系列,SSD(Single Shot MultiBox Detector)模型。 二、SSD简介 SSD(Single Shot MultiBox Detector)是一种流行的目标检…

.netcore 获取appsettings

我的开发环境是abpvnext net6.0 。 因为业务需要,从原来老项目net4.5工程里复制了一个报表导出的业务类到net6项目里面,但是他的获取appsettings的代码其实不用想都知道会报错。因为原来framwork时代获取appsettings的方法常见的是 System.Configura…

Dubbo配置注册中心设置application的name使用驼峰命名法可能存在的隐藏启动异常问题

原创/朱季谦 首先,先提一个建议,在SpringBootDubbo项目中,Dubbo配置注册中心设置的application命名name的值,最好使用xxx-xxx-xxx这样格式的,避免随便使用驼峰命名。因为使用驼峰命名法,在Spring的IOC容器…

Java核心知识点整理大全13-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

激光雷达报告:单月上车提前突破5万台关口!车企真实搭载「去伪存真」

高工智能汽车研究院监测数据显示,截至2023年9月,激光雷达已经连续2个月交付破5万台关口。 这也意味着,这一交付关口早于预期被突破。回溯来看,2023年6月,高工智能汽车研究院在第十四届智驾开发者大会上释放预测&#…

战地5无限序章(无法保存)的解决办法

启动游戏后,目录就会自动变成这样了,也不会无限循环了!

C++类与对象(5)—流运算符重载、const、取地址

目录 一、流输出 1、实现单个输出 2、实现连续输出 二、流输入 总结: 三、const修饰 四、取地址 .取地址及const取地址操作符重载 五、[ ]运算符重载 一、流输出 1、实现单个输出 创建一个日期类。 class Date { public:Date(int year 1, int month 1,…

践行“互联网+中药服务”理念,华润煎配中心打造智能代煎新模式

移动互联网时代,“互联网+”浪潮迭起,中药企业开始探索“互联网+中药服务”模式。 华润湖南医药有限公司(以下简称“华润湖南医药”)作为华润集团旗下华润湖南医药商业集团全资控股的大型医药企业&#xff…

你听过斯大林病毒吗?

相信不少小伙伴看过这种红眼特效,那么你知道这个特效最早出自哪里吗? 其实这个红眼病毒最早出于俄罗斯的电脑病毒斯大林,一旦电脑感染这个病毒,屏幕上就会出现自带一个红眼特效的斯大林人像,同时不断播放苏联国歌。 …

基于侏儒猫鼬算法优化概率神经网络PNN的分类预测 - 附代码

基于侏儒猫鼬算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于侏儒猫鼬算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于侏儒猫鼬优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

关于提示SLF4J: Class path contains multiple SLF4J bindings的问题解决

今天搭建hbase的时候启动hbase的时候shell面板输入了一大堆日志,如下: stopping hbase.....................SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/opt/software/hadoop-3.1.3/share/hadoop/common/l…

hdlbits系列verilog解答(exams/m2014_q4f)-47

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路: 二、verilog源码 module top_module (input in1,input in2,output out);assign out in1 & (~in2);endmodule三、仿真结果 转载请注明出处!

实验题【网关设置+VRRP+静态路由+OSPF】(H3C模拟器)

嘿,这里是目录! ⭐ H3C模拟器资源链接1. 实验示意图2. 要求和考核目标3. 当前配置3.1 PC1、PC2、PC3、PC4和PC5配置3.2 SW配置3.2.1 SW2配置3.2.2 SW3配置3.2.3 SW4配置3.2.4 SW1配置 3.2. R配置3.2.1 R1配置3.2.2 R2配置 ⭐ H3C模拟器资源链接 H3C网络…