前面介绍了 PostgreSQL 事务与并发控制、主从复制、高可用方案、基于 Patroni 高可用架构部署及故障切换、 基于 repmgr 高可用架构实践等相关的知识点,今天我将详细的为大家介绍 PostgreSQL 基于 pgpool 实现读写分离相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!
Pgpool 简介
Pgpool 是一个高性能的连接池和负载均衡器,用于 PostgreSQL 数据库。Pgpool 可以作为中间层,位于客户端和 PostgreSQL 服务器之间,来管理连接请求并分配给不同的 PostgreSQL 服务器进行处理,以提高整体的系统性能和可用性。Pgpool 的一些主要功能包括:
-
连接池:Pgpool在应用程序和数据库之间建立一个连接池,使得多个应用程序可以共享一组数据库连接,避免了重复的连接和断开。
-
负载均衡:Pgpool可以将客户端请求均衡地分配到多个PostgreSQL服务器上,以实现负载均衡和更好的性能。
-
高可用性:Pgpool可以检测到PostgreSQL服务器的故障,并自动将客户端请求重新路由到其他可用服务器,从而提高系统的可用性和稳定性。
-
并行查询:Pgpool可以将大型查询分成几个子查询,然后将这些子查询并行发送到多个PostgreSQL服务器上执行,以提高查询性能。
当使用 Postgresql HA 集群时,应用只需连接 pgpool
即可。
-
通过 pgpool 实现读写分离,写入操作由 Master 执行,读取操作由 Slave 执行。
-
由 repmgr 实现流复制,Master 数据自动复制到 Slave。
-
当 Master 遇故障下线时,由 repmgr 自定选择 Slave 为 Master,并继续执行写入操作。
-
当某个节点遇故障下线时,由 pgpool 自动断开故障节点的连接,并切换到可用的节点上。
-
更多关于 PostgreSQL 系列的学习文章,请参阅:PostgreSQL 数据库,本系列持续更新中。
环境准备
主从复制请看:
主机分配
-
OS:CentOS 7
-
节点1:master(192.168.36.130)
-
节点2:slave(192.168.36.131)
-
节点3:slave(192.168.36.133)
主从切换
手动切换
在上一节中,配置好了流复制结构,接下来模拟主库宕机,进行测试。
-
主库宕机
在master上执行
pg_ctl stop
会发现测试库报错,连接不上主库。这时我们创建触发文件。
touch /tmp/trigger_file0
也可以放在别的目录,记得要给postgres权限。这时,测试库会变成主库。我们在slave上的测试库中新建测试表,并插入数据。
create database test;
create teble test_1 (id int);
insert into test_1 valuse (1);
将主库的recover.done变为recovery.conf
mv recovery.done recovery.conf
启动主库
pg_ctl start
主库会自动的发现时间线的差异,并拷贝过来。登录主库查询,可以查到数据。
如果你们更改recovery.done,或者进行了别的操作,你会发现数据是不一样的。这是你需要停掉被恢复的库,手动同步时间线。
pg_rewind --target-pgdata=/home/postgres/data --source-server='host=slave port=5432 user=postgres dbname=postgres'
将主库的recover.done变为recovery.conf
mv recovery.done recovery.conf
再次启动主库。数据就已经同步了。
你可以多次手动切换进行测试,但是你会发现一个问题。触发文件trigger_file0每次在即创建完成后并不会存在,他在切换完成后就消失了。每次都要手动创建文件的话很麻烦,所以使用pgpool进行自动切换。更多关于 PostgreSQL 系列的学习文章,请参阅:PostgreSQL 数据库,本系列持续更新中。
pgpool 自动切换
下载地址:http://www.pgpool.net/mediawiki/images/
解压编译安装
tar -zxvf pgpool-II-3.6.0.tar.gz -C /opt/
cd /opt/pgpol-II/
./configure –prefix=/opt/pgpool -with-pgsql=path -with-pgsql=/home/postgres
make
make install
添加环境变量
vim