一、什么是pgpool

pgpool是一个位于pgsql server端和 client端中间的中间件。pgpool主要提供如下功能。

  1. pgpool提供了一个连接池,他可以保持已经连接到pgsql的连接,并在使用相同参数连接进入时,重用,以减少开销,增加吞吐量。
  2. pgpool可以管理多个 PostgreSQL 服务器。 激活复制功能并使在2台或者更多 PostgreSQL 节点中建立一个实时备份成为可能, 这样,如果其中一台节点失效,服务可以不被中断继续运行。
  3. 负载均衡
  4. 限制超过限度的连接
  5. 在线故障恢复:通过执行一个命令即可实现数据库节点的在线恢复。当在线恢复与自动故障转移一起使用时,通过故障转移分离的节点可以自动连接为备用节点。也可以同步和附加新的PostgreSQL服务器。
  6. 故障转移:当其中一个pgsql服务器出现异常时,pgpool会自动移除故障的pgsql服务器,并使用剩余可用的服务器提供服务。
  7. 复制功能:pgpool可提供实时备份功能,确保多个集群保持健康状态,不间断提供可靠服务。
  8. watchdog:watchdog可以管理多个pgpool,创建一个可靠的集群。为了避免脑裂现象出现,请创建奇数个pgpool节点。当出现异常时,待机状态当pgpool节点将接管虚拟ip,以保障服务服务连续性。

二、部署pgpool

1、下载安装包

cd /usr/local/src
wget https://www.pgpool.net/mediawiki/images/pgpool-II-4.2.3.tar.gz

2、检查编译环境

GNU需要3.8及以上版本。

root@localhost ~ # make --version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0

若GNU未安装或版本不符合,可自行安装或升级GNU

# debian 系系统安装
apt-get -y install gcc gcc-c++ make
# debian 系系统升级
apt-get -y update gcc gcc-c++ make
# rhel 系系统安装
yum -y install gcc gcc-c++ make
# rhel 系系统升级
yum -y install gcc gcc-c++ make

若需要扩展openssl,pam等认证方式,选装对应资源

yum -y install pam pam-devel openssl

3、编译安装pgpool

tar zvxf pgpool-II-4.2.3.tar.gz
cd pgpool-II-4.2.3
# 注意,当前服务器上需存在pgsql,否则编译会失败(默认pgsql在/usr/local/pgsql目录)
./configure --prefix=/usr/local/ \
--with-pgsql=/usr/local/pgsql \
--with-openssl \
--with-pam 

make
make install

4、安装pgpool_recovery

cd pgpool-II-4.2.3/src/sql/pgpool-recovery
make
make install

在template1库中创建方法

psql
CREATE DATABASE template1
exit
psql -f pgpool-recovery.sql template1

针对pgpool-II 3.3以及更高版本,需要修改postgresql.conf

cat >>/home/postgres/data/postgresql.conf<<EOF
pgpool.pg_ctl = '/usr/local/pgsql/bin/pg_ctl'
EOF

pg_ctl reload -D /home/postgres/data/

5、创建insert_lock表

cd /usr/local/src/pgpool-II-4.2.3/src/sql
psql -f insert_lock.sql template1

6、启动pgpool

pgpool一定要先配置好后端的postgresql,同时确定后端postgresql已启动,才可以启动pgpool,否则pgpool将陷入故障转移的死循环中。

pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf

7、停止pgpool

pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -m fast stop