pgpool+postgresql异步流复制+数据库集群及负载的配置方法 联系客服

发布时间 : 星期三 文章pgpool+postgresql异步流复制+数据库集群及负载的配置方法更新完毕开始阅读f0c05f6383d049649a6658b2

pgpool+postgres 集群、负载、主备的配置文档

系统环境:虚拟机(centos 6.5)

db1:postgres(master)+pgpool(master) node1:ip:172.16.144.145

db2:postgres(salve)+pgpool(salve) node2:ip:172.16.144.146 db3:postgres(salve)

node3:ip:172.16.144.147

第一章 初始化配置

首先配置3台主机

3台主机新加用户postgres;

在3台主机上新建文件 vi /home/postgre/postgresql.log 数据库的启动和pgpool的启动全部都是使用postgres用户; 以postgres用户互相SSH信任;

数据库的安装目录为:/usr/local/pgsql/

pgpool的安装目录为:/usr/local/pgpool/ (pgpool安装的时候,./configure –

prefix=/usr/local/pgpool要用命令指定安装目录,在以后的配置中比较方便,个人建议)。 数据库安装之后,要给postgresql和pgpool添加环境变量 具体的添加如下:

用root账户编辑/etc/profile文件,在文件的最后面添加以下代码 export PATH=/usr/local/pgsql/bin:$PATH:/usr/local/pgpool/bin export PGDATA=/usr/local/pgsql/data export PGHOME=/usr/local/pgsql export LANG=zh_CN.UTF-8 export PGPORT=5432

保存文件后,需要使用postgres用户 使用source /etc/profile命令使环境变量生效。

使用root账户,对/usr/local/pgsql的那个目录使用chown -R postgres:postgres pgsql

以node1,配置ntpd服务,确保node1,node2,node3的时间保持一致, 在node2和node3中要加上定时任务去同步node1的ntp服务。

主数据库的数据库需要初始化,备数据库不用数据库初始化。 主数据库的初始化的方法:

在node1的/usr/local/pgsql/目录下面新建一个文件夹叫data, 使用数据库的初始化的命令:

initdb -D /usr/local/pgsql/data --locale=zh_CN.UTF8

数据库的启动命令:pg_ctl -D /usr/local/pgsql -l /home/postgres/postgresql.log start

给数据库的postgres用户添加密码:

在终端中输入psql命令后,进入数据库,然后使用以下命令改密码

alter user postgres with password '123456';

备主机的数据库的目录下面也需要建data文件夹

第二章 数据库的流复制配置

2.1在主库中创建流复制用户

CREATE USER repuser replication LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD '123456';

2.2修改主库pg_hba.conf文件(目录在/usr/local/pgsql/data)

在最后添加如下行。

host replication repuser 172.16.144.0/24 trust host all all 172.16.144.0/24 trust host all postgres 172.16.144.0/24 trust

2.3修改主库postgresql.conf文件

修改如下几个参数 listen_addresses = '*' wal_level = hot_standby max_wal_senders = 2 hot_standby = on

max_wal_senders是Slave库的节点数〃有多少个slave库就设多少。

wal_level是write ahead log参数值,设置流复制务必将此值更新成hot_standby。

使用postgres用户启动主数据库,命令见上一章。

2.4在salve 主机上使用命令: 在备机上使用命令来跟主库进行同步:

pg_basebackup -h 172.16.144.145 -U repuser -F p -P -x -R -D /usr/local/pgsql/data/ -l node1dbbackup160619

在两台备主机上的数据库安装目录下面的data文件夹中都有了数据。 在两台备机的/usr/local/pgsql/data/下面同时有了recovery.conf文件

$ vi recovery.conf --新增以下三行 standby_mode = 'on'

trigger_file = '/usr/local/pgsql/data/pg.trigger'

primary_conninfo = 'host=172.16.144.145 port=5432 user=repuser password=123456 keepalives_idle=60'

recovery_target_timeline = 'latest'

2.5启动两台备机的postgres数据库

测试:

在主数据库上通过:

psql进入数据库命令

使用默认的数据库CREATE TABLE rep_test (test varchar(40)); 插入数据:

INSERT INTO rep_test VALUES ('data one');

INSERT INTO rep_test VALUES ('some more words'); INSERT INTO rep_test VALUES ('lalala'); INSERT INTO rep_test VALUES ('hello there'); INSERT INTO rep_test VALUES ('blahblah'); 在备机上通过psql命令进入数据库: 查询rep_test表,看数据是否插入成功;

也可以在主机的数据库中使用命令查看流复制的连接备机情况了: