配置PostgreSQL数据库流复制(replication stream)环境
在配置之前准备两台服务器环境。
第一步:在两个环境中分别安装postgresql数据库
推荐使用源码编译安装,安装步骤可以参考之前写的文章“通过源码编译安装PostgreSQL步骤及问题总结”,网址:http://blog.nbqykj.cn/?p=1535.html 。备库可以不做初始化数据的操作。
在主库中修改postgresql.conf,把listen_addresses改成”*”,默认只有localhost能登陆数据库。
第二步:在主库中创建流复制用户
CREATE USER repuser replication LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD '123456';
第三步:修改主库pg_hba.conf文件
在最后添加如下行。
host replication repuser 0.0.0.0/0 md5
第四步:修改主库postgresql.conf文件
修改如下几个参数
wal_level = hot_standby max_wal_senders = 1 hot_standby = on
max_wal_senders是Slave库的节点数,有多少个slave库就设多少。
wal_level是write ahead log参数值,设置流复制务必将此值更新成hot_standby。
修改后记得重启数据库。
第五步:基础备份复制到备库服务器
登陆备库服务器,运行如下命令从主库复制文件。如果备库PGDATA目录有文件先需要删除。
pg_basebackup -D $PGDATA -F p -h masterdb -p masterdb_port -U repuser -W
第六步:修改备库配置信息
添加recovery.conf文件。
$ cp $PGHOME/share/postgresql/recovery.conf.sample $PGDATA/recovery.conf $ vi recovery.conf --新增以下三行 standby_mode = 'on' trigger_file = '/data/pgsql/pg.trigger' primary_conninfo = 'host=192.168.2.101 port=5432 user=repuser password=123456 keepalives_idle=60'
配置.pgpass文件。
192.168.2.101:5432:postgres:repuser:123456
第七步:启动备数据库,检查是否启动成功。
查看主库是否有类似这个进程:
postgres: wal sender process repuser 192.168.2.102(45446) streaming 0/C01EDB8
查看备库是否有类似这个进程:
postgres: wal receiver process streaming 0/C01ED28
如果都有就可以在主库新建一个数据库测试下,一切没问题后流复制环境就算搭建好了。
第八步:脚本定时备份
脚本是开启archive_mode的例子。
#!/bin/bash bkpath=/home/postgres/dbbk/pgsql/dump log_path=/home/postgres/dbbk/pgsql/logarch find $log_path -mtime +15 -name "*.gz" -exec rm -f {} \; export PATH=/opt/PostgreSQL/93/bin:$PATH export PGDATA=/data/pgsql export PGHOME=/opt/PostgreSQL/93 export PGPORT=5432 echo "" echo "PostgreSQL_backup" echo "----------------------" echo "* Rotating backups..." rm -rf $bkpath/base/02 mv $bkpath/base/01 $bkpath/base/02 mkdir $bkpath/base/01 chmod 750 $bkpath/base/01 label=`date "+%Y%m%d"` echo `date` "backup started." pg_basebackup -D $bkpath/base/01 -l $label -F t -z rc=$? mv $bkpath/base/01/base.tar.gz $bkpath/base/01/base_$label.tar.gz cp -p $log_path/*.backup.gz $bkpath/base/01 chmod 640 $bkpath/base/01/*.backup.gz echo `date` "backup completed with rc $rc" exit $rc