database postgresql Pgpool使用心得体会

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。
[[email protected] ~]# pg_md5 postgres
e8a48653851e28c69d0506508fb27fc5
然后在pcp.conf追加如下:
[[email protected] ~]# echo “postgres:e8a48653851e28c69d0506508fb27fc5” >> /etc/pgpool-II/pcp.conf
进入pgpool配置目录,讲现有模版备份,拷贝复制模版为现有模版
[[email protected] ~]# cd /etc/pgpool-II/
[[email protected] pgpool-II]# mv pgpool.conf pgpool.conf.bak
[[email protected] pgpool-II]# cp pgpool.conf.sample-replication pgpool.conf
[[email protected] pgpool-II]# chmod 764 pgpool.conf
进入配置文件,修改以下内容(内容旁边都有注释)
[[email protected] 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,
[[email protected] ~]# pgpool
第一次开启会提示pid文件不存在,需要手工创建,若父目录不存在手动添加。
再次开启pgpool就可以了,第一次开启出现的提示可以忽略。

三、注意事项

出于安全考虑,需要对数据库进行安全认证,数据库安全认证模式为md5,pgpool也是同样的。对于节点的数据库安全认证文件,我的配置如下:
[[email protected] 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认证文件的配置:
[[email protected] 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认证。
下面生成密码文件:
[[email protected] pgpool-II]#pg_md5 –md5auth -u postgres -p
输入和数据库一样的密码(postgres)。
[[email protected] pgpool-II]# tail pool_passwd
postgres:md574d9e50349a805a667ad9e325fb02ebd
此时认证已经做好,用数据库客户端连接35的9999端口即可访问。
这里需要补充一下的是,数据库节点和代理节点必须分开,因为他们都是做md5认证,但是代理程序的认证是基于数据库的,由于数据库之间需要做trust认证,如果把代理节点和其中一个数据库节点放在一起,代理节点的认证则会不起作用,所以必须要和数据库节点分开使用。
同时为了达到稳定和灾备,可以搭建两个pgpool代理用keepalive实现动态迁移,在访问的时候需要访问VIP的9999端口才能实现复制模式或者其他模式。

Tagged: ,

Comments are closed.