postgresql pgsql 连接池 pgBouncer(详细)

适用连接池可以有效的降低反复连接造成的损耗
2023.9.28更新,演示:1.20.1版本

没有安装pgsql的可以参考:pgsql编译安装

一、编译安装

包安装更简单,就是不能选版本

1.pgBouncer下载地址

链接:github项目地址
链接:pgbouncer官网

2.下载

进入目录

cd /usr/local

官网下载

wget https://www.pgbouncer.org/downloads/files/1.20.1/pgbouncer-1.20.1.tar.gz

或者
github下载

wget https://github.com/pgbouncer/pgbouncer/releases/download/pgbouncer_1_20_1/pgbouncer-1.20.1.tar.gz

3.解压

tar -zxvf pgbouncer-1.20.1.tar.gz && cd pgbouncer-1.20.1

4.依赖安装

apt-get install libevent-dev libsystemd-dev

5.编译安装

更多参数参考官方文档:官方文档

./configure --prefix=/usr/local --with-systemd --with-pam
make && make install

安装完成后提示相关文件位置如下:
在这里插入图片描述

二、模式和原理

(一)会话模式

实际使用第二级的比较多

1.Session pooling/会话连接池

这种方式和不用连接池差不多,效果不明显
session,会话级连接,在客户端连接的生命周期内,连接池分配一个连接给它,直到客户端断开连接,分配的连接才会回到连接池中。

2.Transaction pooling/事务连接池(推荐)

服务器连接只有在一个事务里的时候才赋予客户端。在 PgBouncer 注意到事务结束的时候,服务器将会放回连接池中。这是一个 hack,因为它打破了应用对后段连接的看法。只有在应用配合这样的使用模式,没有使用会破坏这种使用模式的时候才能用这个连接方式。参阅下标获取会破坏 这种模式的特性。

3.Statement pooling/语句连接池

最激进的模式。这是事务连接池的一个扭曲的变种 - 不允许多语句的事务。这就意味着是在客户端强制“autocomit”模式,主要是给 PL/Proxy 用的。

三、配置、管理

(一)配置文件

1.建立配置文件

个人习惯将配置文件存放到/etc目录下

mkdir /etc/pgbouncer

复制配置文件

cp /usr/local/share/doc/pgbouncer/pgbouncer.ini /etc/pgbouncer

2.创建需要的目录

创建日志目录和日志文件

mkdir -p /var/pgbouncer

移交所有权给postgres用户(linux的pgsql,习惯上用这个用户)

chown postgres:postgres /var/pgbouncer

3.编辑配置文件

vi /etc/pgbouncer/pgbouncer.ini

添加数据库连接[database]下
账号密码是pgsql的账号密码,用于连接已有的pgsql数据库
这里的最前面的名称main_pg,就是关联的后面的源数据库的postgres库,连接时用main_pg作为虚拟的数据库,代替后面的localhost:5432的postgres数据库,相当于一个别名,到时候连接的时候就连接这个main_pg虚拟的数据库

main_pg = host=localhost port=5432 dbname=postgres user=postgres password=abc123456 

修改log和pid地址

在这里插入图片描述
允许外部访问
listen_addr = *

修改admin_users
如果没有认证,这个参数就失效了

admin_users = postgres

修改每个池最大连接数
找到max_client_conn,修改为1000,删除前面的;

max_client_conn = 1000

修改连接池数
找到default_pool_size ,修改为200,删除前面的;

default_pool_size = 200

修改连接池模式
找到pool_mode = session,修改为下面的,并删除前面的;

pool_mode = transaction

设置ignore_startup
删除前面的;

ignore_startup_parameters = extra_float_digits

(二)连接文件配置

1.复制认证文件

cp /usr/local/share/doc/pgbouncer/userlist.txt /etc/pgbouncer

2.编辑数据库账号密码文件

vi /etc/pgbouncer/userlist.txt

改成类似如下的形式,前面是pgsql的用户名,postgres是默认的账号名,密码为明文密码,
形如以下部分

"postgres" "abc123456"

这个密码是连接pgbouncer的密码,可以和pgsql源库的密码不一致,这样也是相当于多了一层保护

(三)systemctl管理

1.复制systemctl文件

cp /usr/local/share/doc/pgbouncer/pgbouncer.service /lib/systemd/system

2.编辑文件

vi /lib/systemd/system/pgbouncer.service

修改ExecStart地址(编译完成后会提示)
按照我的目录是/usr/local/bin

在这里插入图片描述

3.启动程序

systemctl daemon-reload && systemctl start pgbouncer

4.查看状态

systemctl status pgbouncer

(四)连接测试

1.进入pgBouncer的psql

su postgres
psql -p 6432 pgbouncer

密码为上面设定的连接文件里的密码

2.pgbouncer自带的命令

显示所有配置

show config; 

显示所有客户连接

show clients;

显示所有的源数据库

show servers;

四、使用

1.连接原理

使用psql连接pgbouncer的main_pg数据库(pgbouncer此时连接main_pg的源数据库)
通过这种方式实现了pgsql的池。

psql -h localhost -p 6432 -U postgres -d main_pg

此时在源数据库中输入命令即可查询到pgbouncer的连接

select * from pg_stat_activity;

2.后端程序中调用

在这个案例中,后端连接6432端口的main_pg数据库,即可对应原来的5432端口的postgres数据库
只需要修改连接地址即可,无需调整后端逻辑(除非变成第三种模式,不推荐)

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

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

相关文章

云中网络的隔离GREVXLAN

底层的物理网络设备组成的网络我们称为 Underlay 网络,而用于虚拟机和云中的这些技术组成的网络称为 Overlay 网络,这是一种基于物理网络的虚拟化网络实现。 第一个技术是 GRE,全称 Generic Routing Encapsulation,它是一种 IP-o…

leetcode top100(20) 搜索二维矩阵 II

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,2…

Golang的测试、基准测试和持续集成

在Golang中,内置的垃圾回收器处理内存管理,自动执行内存分配和释放。 单元测试是软件开发中至关重要的一个方面,它确保了代码的正确性并在开发过程中尽早发现错误。在Go中,编写有效的单元测试非常简单,并为开发人员提…

【每日一题】2703. 返回传递的参数的长度

2703. 返回传递的参数的长度 - 力扣(LeetCode) 请你编写一个函数 argumentsLength,返回传递给该函数的参数数量。 示例 1: 输入:args [5] 输出:1 解释: argumentsLength(5); // 1只传递了一个值…

现货白银图表分析的依据

现货白银的行情图表分析其实与股票的差不多,投资者可以结合均线、k线的变化,来分析实时的行情走势。当走势图的均线呈多头排列,即短期、中期、长期均线依次从上到下排列并向右上方运行,且白银价格沿各均线向右上方拉升&#xff0c…

Centos7安装mysql

文章目录 版权声明centos7防火墙[准备]检测防火墙允许3306端口 centos7安装mysql5.7检测安装配置 CentOS7安装MySQL8.0检测安装配置 Centos完全卸载mysql 版权声明 本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明,所有版权属于黑马程序员…

如何用Postman做接口自动化测试

前言 什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试,模拟人去操作软件界面,把人从简单重复的劳动中解放出来。 本质是用代码去测试另一段代码,属于一种软件开发工作,已经开发完成…

常见的排序算法及时间空间复杂度

排序算法是计算机科学中的基本算法之一,它用于将一组数据按照某种顺序进行排列。下面是一些常见的排序算法,以及它们的思想和时间空间复杂度,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢…

laravel 阿里云短信发送

示例 一、安装 安装:composer require mrgoon/aliyun-sms dev-master 二、打开config/app.php,添加配置代码 1、‘providers’ 配置组下添加 Mrgoon\Aliyunsms\AliyunsmsServiceProvider::class, 2、‘aliases’ 配置组下添加 Aliyunsms>Mrgoon…

Java技术接单

今天给大家介绍一个阶段性(周期性)能获取一定收益的Java技术接单群,分享给大家!主要对搞Java的粉丝有帮助,因为可以赚点小钱,对Java技术的要求不高! 注意:首先进群不是免费的&#…

【事务】事务的特性、并行事务有什么问题、事务的隔离级别等重点知识汇总

目录 事务的四大特性 并行事务会引发什么问题? 事务的隔离级别 事务的四大特性 原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复…

Kubernetes集群+Keepalived+Nginx+防火墙实例

文章目录 实验前期规划1.拓扑图结构2.实验要求3.实验环境规划 一.kubeadm 部署 K8S 集群架构1.环境准备2.三个节点安装docker3.三个节点安装kubeadm,kubelet和kubectl4.部署K8S集群(1)初始化(2)部署网络插件flannel&am…