一、Pgpool-II简介
Pgpool-II是一款工作在PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件。提供了以下功能:
- 连接池
Pgpool-II保存到PostgreSQL服务器的连接,并在具有相同属性(即用户名、数据库、协议版本)的新连接进入时重新使用它们。它减少了连接开销,并提高了系统的整体吞吐量。
- 复制
Pgpool-II可以管理多个PostgreSQL服务器。使用复制功能可在2个或更多物理磁盘上创建实时备份,以便在磁盘出现故障时无需停服即可继续服务。
- 负载均衡
如果数据库有多副本,则在任何服务器上执行SELECT查询都将返回相同的结果。Pgpool-II利用复制功能,通过在多个服务器之间分配SELECT查询来减少每台PostgreSQL服务器上的负载,从而提高系统的整体吞吐量。查询性能随PostgreSQL服务器数量的增加而成比例提高。负载均衡在有许多用户同时执行多个查询的情况下工作得最好。
- 限制过多的连接
与PostgreSQL的并发连接的最大数量是有限制的,连接过多后会被拒绝。但是,设置最大连接数会增加资源消耗并影响系统性能。Pgpool-II对最大连接数也有限制,但额外的连接将被排队,而不是立即返回错误。
- 看门狗
WatchDog可以协调多个Pgpool-II,创建一个健壮的集群系统,避免单点故障或脑裂。WatchDog可以对其他pgpool-II节点执行健康检查,以检测PgPoll-II的故障。如果主用Pgpool-II关闭,备用Pgpool-II可以升级为主用,并接管虚拟IP。
- 查询缓存
查询缓存允许保存SELECT语句及其结果。如果出现相同的查询,则Pgpool-II将从缓存中返回值。由于不涉及SQL解析或访问PostgreSQL,因此在内存缓存中使用非常快。另一方面,在某些情况下,它可能比正常路径慢,因为它增加了存储缓存数据的一些开销。
Pgpool-II使用PostgreSQL的后端和前端协议,并在后端和前端之间转发消息。因此,数据库应用程序(前端)认为Pgpool-II是实际的PostgreSQL服务器,而服务器(后端)将Pgpool-II视为其客户端之一。因为Pgpool-II对服务器和客户端都是透明的,所以现有的数据库应用程序几乎可以在不更改其源代码的情况下与Pgpool-II一起使用。
下面以最新的Pgpool-II 4.4.4版为例介绍搭建过程,PostgreSQL数据库采用最新的16.0,操作系统为Rocky Linux 9.2 (Blue Onyx)。构架图如下(图片转自Pgpool-II官网)
二、安装规划
2.1 主机名及IP地址
主机名 |
IP地址 | 虚拟IP |
server1 | 192.168.0.1 | 192.168.0.5 |
server2 | 192.168.0.2 | |
server3 | 192.168.0.3 |
2.2 PostgreSQL版本及相关配置
项目 |
内容 |
说明 |
PostgreSQL版本 | 16.0 | - |
端口 |
5432 | - |
$PGDATA | /data/pgsql16/data | - |
归档模式 |
on | 归档日志目录:/data/pgsql16/archive |
Replication Slots | 开启 | - |
2.3 PgPool-II版本及配置
项目 |
内容 |
说明 |
Pgpool-II版本 | 4.4.4 | - |
端口 |
9999 | Pgpool-II连接端口 |
9898 | PCP进程连接端口 | |
9000 | watchdog连接端口 | |
9694 | 接收心跳信号的UDP端口 | |
配置文件 |
/home/postgres/pgpool/etc/pgpool.conf | Pgpool-II配置文件 |
Pgpool-II启动用户 | postgres (Pgpool-II 4.1及后续版本) | Pgpool-II 4.0及之前版本需要用root用户启动 |
运行方式 | 流复制模式 | - |
Watchdog | on | 健康检查方法: heartbeat |
2.4 相关脚本
功能描述 |
脚本名 |
说明 |
故障转移 |
/home/postgres/pgpool/etc/failover.sh |
通过failover_command调用此脚本执行故障转移 |
/home/postgres/pgpool/etc/follow_primary.sh |
完成故障转换后通过follow_primary_command调用此脚本同步对新主节点和从节点进行同步。 |
|
在线恢复 | /home/postgres/pgpool/etc/recovery_1st_stage |
通过 recovery_1st_stage_command执行此脚本恢复指定的从节点 |
/home/postgres/pgpool/etc/pgpool_remote_start |
通过 recovery_1st_stage_command执行此脚本启动从节点 |
|
Watchdog | /home/postgres/pgpool/etc/escalation.sh |
通过wd_escalation_command执行此脚本在Pgpool-II节点间切换浮动IP |
三、安装
在进行Pgpool-II安装配置前,请先在三个节点上安装好PostgreSQL,PostgreSQL安装方法请参考 PostgreSQL源码安装 。
这里使用源码安装的方法安装Pgpool-II
wget https://www.pgpool.net/mediawiki/download.php?f=pgpool-II-4.4.4.tar.gz # wget下载后文件名是'download.php?f=pgpool-II-4.4.4.tar.gz',需要改名或者wget时带上-O参数指定文件名mv'download.php?f=pgpool-II-4.4.4.tar.gz' pgpool-II-4.4.4.tar.gz tar zxvf pgpool-II-4.4.4.tar.gz cd pgpool-II-4.4.4 # 一定要加上--with-openssl,否则后续使用Pgpool验证密码时会出错# 这里将Pgpool安装到/home/postgres/pgpool目录下./configure --prefix=/home/postgres/pgpool --with-opensslmakemake install # 如果后续要使用Pgpool-II的online recovery功能,则需要编译相关扩展cd src/sql/pgpool-recovery makemake install