一、什么是pgpool-II¶
pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,它提供以下功能
-
连接池:pgpool-II保持已经连接到PostgreSQL服务器的连接,当使用相同参数(如用户名、数据库、协 议版本)的连接进来时重用它们,该功能通常对于一些短连接的应用比较有用,因为这减少了连接开销
-
负载均衡:pgpool-II利用了复制的功能以降低每台PostgreSQL服务器的负载。它分发SELECT查询到所有 可用的服务器中,增强了系统的整体吞吐量。
-
高可用功能:当一个后端数据库不可用时,pgpool-II会把用户的请求转发到其他可用的后端数据库上,以 保证对外的正常服务。pgpool-II通过有超时和重试次数的探测机制去检测后端数据库是否正常工作
-
限制超过限度的连接(类似限流):pgpoo-II支持限制最大连接数,但做法是将超过限制的连接放入队 列,不是想pg的最大链接限制一样直接报错
-
查询缓存功能:相同的SELECT语句,则直接返回缓存的数据。因为不再有SQL解析和到后端PostgreSQL 数据库的调用,所以大大加快了一些查询的速度
二、pgpool-II的架构¶
pgpool-II完全实现了PostgreSQL的连接协议,当客户端连接到pgpool-II上时与连接到数据库上完全一样。 pgpool-II的复制是同步的,即如果发一个DML语句(如INSERT、DELETE、UPDATE语句),将并 发地发送到后端所有数据库上执行,这就保证了所有数据库的数据一致性

为了保证pgpool-II自身的高可用,配置了3台 pgpool-II,一主两备,当主pgpool-II故障时,vip会切换到其中的一台备的pgpool-II上

三、pgpool-II的工作模式¶
pgpool-II有连接池、复制、负载均衡等功能,使用这些功能需要把pgpool-II配置在不同的工作模式下, pgpool-II有以下几种工作模式
-
原始模式:只实现一个故障切换的功能,可以配置多个后端数据库,当第一个后端数据库不能工作时, pgpool-II会切换到第二个后端数据库,如果第二个后端数据库也不能工作,再切换到第三个后端数据库, 依次类推
-
内置复制(Native Replication)的模式:实际上就是把修改数据 库的操作同时发送到后端所有的数据库上进行处理,只读查询发送给任意一台数据库。此模式下可以实现 负载均衡的功能
主/备模式:使用其方式比如流复制来保证主从同步,然后pgpool-II主要提供高可用和连接池的功能。在主/备 模式中,DDL和DML操作在主节点上执行,SELECT语句可以在主备节点上执行,当然也可以强制SELECT语 句在主节点上执行,但需要在SELECT语句前添加“/NO LOAD BALANCE/”注释
3.1 内置复制模式的优缺点¶
优点:
-
复制是同步的,不存在最终一致性的问题。
-
自动Failover。
-
读可以负载均衡。
-
可以在线恢复,不需要停止pgpool-II就可以在线修复或增加一个后端数据库节点。
-
容易配置
缺点:
-
写性能不是很好,有30%的写性能下降
-
不支持一些查询,如一些随机函数、序列号等
3.2 主/备模式的优缺点:¶
优点:
-
写性能较好,只有10%的性能下降。
-
自动Failover。
-
可以做读的负载均衡
缺点:
-
复制是异步的,对应用的使用有限制
-
配置复杂
四、pgpool-II的安装方法¶
wget http://www.pgpool.net/download.php?f=pgpool-II- 4.1.0.tar.gz ./configure --prefix=/home/postgres/pgpool
make
make install
五、pgpool-II如何配置¶
<PostgreSQL修炼之道:从小工到专家(第2版)>