简介
PgBouncer 是一个流行的开源连接池软件,用于管理和缓解 PostgreSQL 数据库的连接压力。它的作用是在应用程序和数据库服务器之间创建一个连接池,以便有效管理和复用数据库连接。PgBouncer 的主要优势如下:
- 连接池管理:PgBouncer 可以管理大量客户端连接,并将它们重用,避免了频繁创建和销毁连接的开销。
- 资源节省:PgBouncer 将连接请求分配给事先建立的数据库连接,减少了数据库服务器的负载,提高了系统资源的利用率。
- 高可用性:PgBouncer 允许配置与多个 PostgreSQL 实例的连接,当一个数据库服务器出现故障时,可以自动切换到备用服务器,提供高可用性服务。
- 安全性增强:PgBouncer 支持 SSL/TLS 加密连接和身份验证,增加数据库连接的安全性。
PgBouncer 可以解决以下问题:
- 连接瓶颈:通过连接池管理和复用,PgBouncer 可以缓解大量并发连接对数据库服务器的压力。
- 性能优化:通过减少连接的创建和销毁,PgBouncer 可以改善数据库的响应时间和吞吐量。
- 高可用性:通过配置多个数据库服务器和自动故障转移,PgBouncer 可以提供高可用性服务。
在使用 PgBouncer 时,需要注意以下事项:
- 配置调整:需要根据实际需求和负载情况调整 PgBouncer 的配置参数,以确保连接池的大小和性能适合应用程序。
- 监控和故障排除:监控 PgBouncer 的连接池活动和性能指标,及时发现和解决连接问题或性能瓶颈。
- 限制功能使用:了解 PgBouncer 的限制,并避免在应用程序中使用与这些限制相关的功能。
- 安全性配置:正确配置和管理 PgBouncer 的安全性功能,包括 SSL/TLS 加密和身份验证设置。
总之,PgBouncer 是一个强大的连接池工具,可以提供连接管理、资源优化和高可用性,但需要注意它的一些功能限制和正确的配置。
安装环境说明
ip@hostname | depend | remarke |
10.0.0.199@vm02 | postgresql-15.3+pgbouncer1.20.1 | standby |
10.0.0.198@vm03 | postgresql-15.3 | master |
10.0.0.197@vm04 | postgresql-15.3 | standby |
这里本文已经安装好了postgresql 并配置了级联复制关系 ,vm03➡vm02➡vm04。
由于pgbouncer的运行遵循psql协议,所以这里在部署的pgbouncer的节点必须有可运行的psql
安装依赖
官网对于pgboucer 的安装依赖有做说明
- GNU Make 3.81+
- Libevent 2.0+
- pkg-config
- OpenSSL 1.0.1+(用于TLS支持)
- c-ares(可选,作为Libevent的evdns的替代)
- PAM库(可选)
yum install make libevent pkgconfig openssl openssl-devel libevent-devel
通过pgbouncer官网下载源码包,上传到虚拟机中。
wget https://www.pgbouncer.org/downloads/files/1.20.1/pgbouncer-1.20.1.tar.gz
解压压缩包
tar -zxvf pgbouncer-1.20.1.tar.gz
创建安装目录
mkdir /home/postgres/pgbouncer
进入到解压包中进行编译
./configure --prefix=/home/postgres/pgbouncer
--prefix=/home/postgres/pgbouncer 指定安装的路径。
make && make install
进行构建项目
将pgbouncer 的所属权限给postgres
chown -R postgres:postgres /home/postgres/pgbouncer
chmod u+w /home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt
chmod u+w /home/postgres/pgbouncer/share/doc/pgbouncer/pgbouncer.ini
注:
在安装完成后,会在/home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt 生成userlist.txt文件使用以上copy 对这个文件内容进行覆盖。这里最重要的两个配置文件pgbouncer.ini,userlist.txt需要进行编辑配置进行启动,所以需要对这两个文件拥有编辑权限
userlist.txt文件处理
切换操作用户到postgres ,进入数据库导出数据库的用户和密码到
copy (select '"' || usename || '" "' || passwd ||'"' from pg_shadow ) to '/home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt';
在安装完成后,会在/home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt 生成userlist.txt文件使用以上copy 对这个文件内容进行覆盖。这里最重要的两个配置文件pgbouncer.ini,userlist.txt需要进行编辑配置进行启动,所以需要对这两个文件拥有编辑权限
此时在文件中仍然还会保留有 \N 的非法字符,需要进入文件中将其删掉
pgbouncer.ini文件处理
按照以上步骤安装完成后会在/home/postgres/pgbouncer/share/doc/pgbouncer下生成userlist.txt,pgbouncer.ini文件
配置pgbouncer.ini文件内容
[databases]
a1 = host=127.0.0.1 port=35432 dbname=postgres
readyonly = host=10.0.0.197 port=45432 dbname=postgres
readywrite = host=10.0.0.198 port=35432 dbname=postgres
[pgbouncer]
listen_addr=*
auth_type=md5
auth_file=/home/postgres/pgbouncer/share/doc/pgbouncer/userlist.txt
logfile=/home/postgres/pgbouncer/pgbouncer1.log
pidfile=/home/postgres/pgbouncer/pgbouncer1.pid
unix_socket_dir = /tmp
max_client_conn=1000
default_pool_size=50
在编辑的注意文件会打开一些参数 不注意的话 会在启动时候报错 ,需要注释掉
默认pool_mode = session
启动pgbouncer
/home/postgres/pgbouncer/bin/pgbouncer -d /home/postgres/pgbouncer/share/doc/pgbouncer/pgbouncer.ini
查看是否正常启动
pgrep -alf |grep pgbouncer
出现一下内容,表示启动正常
使用pbouncer访问数据库,其默认端口是默认6432,
psql -p 6432 -U postgres readyonly
读写分离,主库是可读可写,从库是只读模式,可以通过pgbouncer实现变相的读写分离
本文
设置了两个name
readywrite :是主库,可读可写
readyonly:是从库,只读。
数据池监控
在pgbouncer中有一个伪数据库pgbouncer,用于对连接池的监控。
psql -p 6432 -U pgbouncer pgbouncer
这个是安装中默认存在的一个伪数据库,使用show help 可以查看一监控表数据。
下文继续讲关于pgbouncer中伪装数据库 ,