PgBouncer 是一个流行的开源连接池软件,用于管理和缓解 PostgreSQL 数据库的连接压力。它的作用是在应用程序和数据库服务器之间创建一个连接池,以便有效管理和复用数据库连接。PgBouncer 的主要优势如下:
PgBouncer 可以解决以下问题:
在使用 PgBouncer 时,需要注意以下事项:
总之,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官网下载源码包,上传到虚拟机中。
解压压缩包
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需要进行编辑配置进行启动,所以需要对这两个文件拥有编辑权限
切换操作用户到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 的非法字符,需要进入文件中将其删掉
按照以上步骤安装完成后会在/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中伪装数据库 ,