前提:
1、请确定postgresql可以访问(远程),postgres用户密码是否修改,否则pgpool无法验证通过
2、安装必要的安装包,pgxs,pcp,apt-get install postgresql-server-dev-9.5,否则会报pgxs的错误
参考:
中文(还好蛮新):http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-zh_cn.html
英文(官网):http://www.pgpool.net/docs/latest/pgpool-en.html#install
下载:http://pgpool.net/mediawiki/index.php/Downloads
配置:
1、tar zxvf 解压,./configure编译
如果你需要非默认的值,有以下选项可以设置:
--prefix=path
pgpool-II 的二进制程序和文档将被安装到这个目录。默认值为 /usr/local
--with-pgsql=path
PostgreSQL 的客户端库安装的顶层目录。默认值由 pg_config
提供
--with-openssl
pgpool-II 程序将提供 OpenSSL 支持。默认是禁用 OpenSSL 支持的。
--enable-sequence-lock
在 pgpool-II 3.0 系列中使用 insert_lock 兼容。pgpool-II 针对序列表中的一行进行加锁。PostgreSQL 8.2 或2011年六月以后发布的版本无法使用这种加锁方法。
--enable-table-lock
在 pgpool-II 2.2 和 2.3 系列中使用 insert_lock 兼容。pgpool-II 针对被插入的表进行加锁。这种锁因为和 VACUUM 冲突,已被废弃。
2、 make、make install
3、安装 pgpool_regclass
如果你在使用 PostgreSQL 8.0 或之后的版本,强烈推荐在需要访问的 PostgreSQL 中安装 pgpool_regclass 函数,因为它被 pgpool-II 内部使用。如果不这样做,在不同的 schema 中处理相同的表名会出现问题(临时表不会出问题)。
cd pgpool-II-x.x.x/sql/pgpool-regclass make make install psql -f pgpool-regclass.sql template1
应在在每台通过 pgpool-II 访问的数据库中执行 pgpool-regclass.sql。你不需要在你执行“psql -f pgpool-regclass.sql template1”后建立的数据库中这么做,因为这个模板数据库将被克隆成新建的数据库。
4、建立 insert_lock 表
如果你在复制模式中使用了 insert_lock ,强烈推荐建立 pgpool_catalog.insert_lock 表,用于互斥。到现在为止,insert_lock 还能够工作。但是,在这种情况下,pgpool-II 需要锁定插入的目标表。这种行为和 pgpool-II 2.2 和 2.3 系列类似。表锁与 VACUUM 冲突,所以 INSERT 操作可能因而等待很长时间。
cd pgpool-II-x.x.x/sql psql -f insert_lock.sql template1(可能会提示报错,无所谓,那是sql脚本正常报错)
应在在每台通过 pgpool-II 访问的数据库中执行 insert_lock.sql。你不需要在你执行“psql -f insert_lock.sql template1”后建立的数据库中这么做,因为这个模板数据库将被克隆成新建的数据库。
5、配置pcp.conf(其实这儿的用户名就用数据库自身的即可,密码用select * from pg_shadow查到的md5,下面的方法貌似加密算法不对)
pgpool-II 有一个控制接口,管理员可以通过它远程收集 pgpool-II 的状态信息或者终止 pgpool-II 进程。 pcp.conf
是用于这个接口认证的用户/密码文件。所有的模式都需要先设置 pcp.conf
文件。一个$prefix/etc/pcp.conf.sample
文件在 pgpool-II 安装时已经被创建。重命名这个文件为 pcp.conf
并添加你要的用户名和密码到其中。
cp $prefix/etc/pcp.conf.sample $prefix/etc/pcp.conf
空行或者以“#
”开始的行将被认为是注释,会被忽略掉。一个用户名和对应的密码必须以以下的方式写成一行。
username:[password encrypted in md5]
[password encrypted in md5]
可以通过 $prefix/bin/pg_md5
命令生成。
pg_md5 -p password: <your password>
或者
./pg_md5 foo acbd18db4cc2f85cedef654fccc4a4d8
6、配置pgpool.conf
就像之前说的,每种操作模式在 pgpool.conf
文件中有它对应的配置项。一个 $prefix/etc/pgpool.conf.sample
文件在 pgpool-II 安装时已经被创建。重命名这个文件为 pgpool.conf
并修改它的内容。
cp $prefix/etc/pgpool.conf.sample $prefix/etc/pgpool.conf
#公共设置 listen_addresses:改为* port:默认9999,建议改为5432 pcp_listen_addresses:改为* backend_hostname0:数据库host backend_port0:端口 backend_data_directory0:数据主目录 pid_file_name:(这里默认是放在/var/run/pgpool目录的,但是可能是程序BUG,每次启动后不会自己创建,需要/etc/rc.local启动的时候mkdir下,否则自启动有问题) connection_life_time = 450#缓存的连接的过期时长,单位为秒。过期的缓存连接将被关闭。默认值为 0,表示缓存的连接将不被关闭 client_idle_limit = 300#多长时间不执行sql连接超时断开
7、其他
a.配置自启动
vim /etc/rc.local pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -a /usr/local/etc/pool_hba.conf
b.关闭
pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -a /usr/local/etc/pool_hba.conf stop #如果客户端有连接保持,将一直等待。。。如果直接Kill会导致pid文件无法释放,紧急处理不建议用此方法 #或者 pgpool -m fast stop#该方法不管客户端有无连接直接关闭,维护时推荐!
c.DEBUG模式
pgpool -f /usr/local/etc/pgpool.conf -F /usr/local/etc/pcp.conf -a /usr/local/etc/pool_hba.conf -dn
d.开启日志
在日志 /etc/rsyslog.conf 加入以下行
local0.* /var/log/pgpool.log
重启 rsyslog 服务
/etc/init.d/rsyslog restart
pgpool.conf 配置以下行
log_destination = 'syslog'
备注: 这里使用 syslog。