pgpool作为postgresql的集群应用兼有代理功能,实在是强大,在无数次的实验失败之后,总结一下我的使用心得。
一、下载安装
首先提供下载页: 点击这里。我下载的是installer-pg93-3.3.3.tar.gz,解压之后安装postgresql92-libs-9.2.4-1PGDG.didt.ep.x86_64.rpm和pgpool-II-pg93-3.3.3-1.pgdg.x86_64.rpm,这时pgpool的安装已经结束。
二、模式
pgpool给用户提供了三种模式供用户选择,分别是复制模式,主备模式和流复制模式。
pgpool模式
模式 |
示例文件 |
复制模式 |
pgpool.conf.sample-replication |
主/备模式(Slony-I) |
pgpool.conf.sample-master-slave |
主/备模式(流复制) |
pgpool.conf.sample-stream |
1、复制模式
对于模式的配置,这里不做多讲,我使用的是复制模式,简单配置如下:(数据库节点为192.168.8.142,192.168.8.143;pgpool节点为192.168.8.35)
详细配置内容参见pgpool使用手册:
点击这里。
首先修改两个节点的/etc/pgpool-II/pcp.conf
这个文件的作用是pgpool连接postgresql数据库的用户名密码认证。我们数据库的用户名密码为postgres:postgres。
[root@ucloud35 ~]# pg_md5 postgres
e8a48653851e28c69d0506508fb27fc5
然后在pcp.conf追加如下:
[root@ucloud35 ~]# echo "postgres:e8a48653851e28c69d0506508fb27fc5" >> /etc/pgpool-II/pcp.conf
进入pgpool配置目录,讲现有模版备份,拷贝复制模版为现有模版
[root@ucloud35 ~]# cd /etc/pgpool-II/
[root@ucloud35 pgpool-II]# mv pgpool.conf pgpool.conf.bak
[root@ucloud35 pgpool-II]# cp pgpool.conf.sample-replication pgpool.conf
[root@ucloud35 pgpool-II]# chmod 764 pgpool.conf
进入配置文件,修改以下内容(内容旁边都有注释)
[root@ucloud35 pgpool-II]# vim pgpool.conf
listen_addresses = '*' 监听全网段
port = 9999 开放端口9999
backend_hostname0 = '192.168.8.142' 节点1
backend_port0 = 5432 节点1接入的端口
backend_weight0 = 1 节点1的权重
backend_hostname1 = '192.168.8.143' 节点2
backend_port0 = 5432 节点1接入的端口
backend_weight1 = 1 节点2的权重
enable_pool_hba = on 接入代理的客户端认证
基本配置是这些
将142和143节点的数据库开启:
/opt/PostgreSQL/9.3/bin/pg_ctl -D /opt/PostgreSQL/9.3/data/ start
(关闭命令:/opt/PostgreSQL/9.3/bin/pg_ctl -D /opt/PostgreSQL/9.3/data/ -m fast stop)
然后开启pgpool,
[root@office-cmdb01 ~]# pgpool
第一次开启会提示pid文件不存在,需要手工创建,若父目录不存在手动添加。
再次开启pgpool就可以了,第一次开启出现的提示可以忽略。
三、注意事项
出于安全考虑,需要对数据库进行安全认证,数据库安全认证模式为md5,pgpool也是同样的。对于节点的数据库安全认证文件,我的配置如下:
[root@office-cmdb01 data]# tail pg_hba.conf -n 15
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.8.142/32 trust
host all all 192.168.8.143/32 trust
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres md5
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
此处语法很简单,只需要制定好相应IP或者IP段,写好认证方式为trust或者md5即可。
为了实现其他用户接入数据库密码认证,这里对节点数据库采用trust,对其他IP采用md5认证,优先级为从上往下。
下面是对pgpool认证文件的配置:
[root@ucloud35 pgpool-II]# tail pool_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 md5
对全网段采用md5认证。
下面生成密码文件:
[root@ucloud35 pgpool-II]#pg_md5 --md5auth -u postgres -p
输入和数据库一样的密码(postgres)。
[root@ucloud35 pgpool-II]# tail pool_passwd
postgres:md574d9e50349a805a667ad9e325fb02ebd
此时认证已经做好,用数据库客户端连接35的9999端口即可访问。
这里需要补充一下的是,数据库节点和代理节点必须分开,因为他们都是做md5认证,但是代理程序的认证是基于数据库的,由于数据库之间需要做trust认证,如果把代理节点和其中一个数据库节点放在一起,代理节点的认证则会不起作用,所以必须要和数据库节点分开使用。
同时为了达到稳定和灾备,可以搭建两个pgpool代理用keepalive实现动态迁移,在访问的时候需要访问VIP的9999端口才能实现复制模式或者其他模式。
作者:u013526896 发表于2014-4-25 18:27:07
原文链接