前提:php
一、请肯定postgresql能够访问(远程),postgres用户密码是否修改,不然pgpool没法验证经过html
二、安装必要的安装包,pgxs,pcp,apt-get install postgresql-server-dev-9.5,不然会报pgxs的错误算法
参考:sql
中文(还好蛮新):http://pgpool.projects.pgfoundry.org/pgpool-II/doc/pgpool-zh_cn.html数据库
英文(官网):http://www.pgpool.net/docs/latest/pgpool-en.html#install vim
下载:http://pgpool.net/mediawiki/index.php/Downloads缓存
配置:安全
一、tar zxvf 解压,./configure编译bash
若是你须要非默认的值,有如下选项能够设置:ide
--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 冲突,已被废弃。
二、 make、make install
三、安装 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”后创建的数据库中这么作,由于这个模板数据库将被克隆成新建的数据库。
四、创建 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”后创建的数据库中这么作,由于这个模板数据库将被克隆成新建的数据库。
五、配置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
六、配置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链接超时断开
七、其余
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。
e.黑白名单
链接池开启必须打开enable_pool_hba=on,该文件又关联了pool_hba.conf
local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 md5 host all all 0.0.0.0/0 md5
这里须要很是注意,pg那边除了流复制规则,其余也参考该规则来,不然有的郁闷
注:以前配置PGHA后使用pgpool做为链接池,后面配置PG的主备机,必定要配置成内网IP,千万不要配置为127.0.0.1或者localhost,不然根据上面的规则那就是只要猜对数据库和用户名就能无密码登录。。。大大的安全问题!
配置完pool_hba.conf后,有些远程访问的用户就须要md5加密过的密码才能登录(对应pool_hba.conf中md5的规则),这里就须要用户和加密过的密码在pool_passwd文件有登记,经过下面的命令便可在本地生成,注意这个密码也只能是数据库自身的用户和密码
pg_md5 -u postgres -p -m more pool_passwd#查看是否登记成功