配置PostgreSQL进行多机热备
l 文档变更记录
日期 | 版本号 | 作者 | 备注 |
2009-9-8 | v1.0 | 陈浩 | 创建 |
|
|
|
|
|
|
|
|
|
|
|
|
1 规划
说明 | 主机 | 备机 |
Linux版本 | Debian502 | Debian502 |
IP address | 192.168.15.90 | 192.168.15.91 |
PostgreSQL版本 | 8.4 | 8.4 |
PostgreSQL安装目录 | /usr/local/pgsql/ | /usr/local/pgsql/ |
数据文件目录 | /usr/local/pgsql/data/ | /usr/local/pgsql/data |
归档日志目录 | /usr/local/pgsql/backup/archive_log/ |
|
热备日志目录 |
| /usr/local/pgsql/backup/standby_log/ |
2 安装PostgreSQL
下载PostgreSQL8.4版本,安装到主机和备机规划的目录中,并初始化数据库集群,创建standby数据库。
3 安装pg_standby
备机进入编译后的/postgresql-8.4.0/contrib./pg_standby目录,执行以下命令
make
make install
这时便安装好pg_standby。
4 安装设定SCP无密码传送文件
4.1 主机和备机分别安装SSH
apt-get install openssh-server
4.2 主机和备机分别创建/home/postgres/.ssh/目录
mkdir –p /home/postgres/.ssh/
4.3 主机以postgres用户登录,创建密码文件
ssh-keygen –t rsa,三个回车,密码文件默认会创建在/home/postgres/.ssh/下
4.4 把主机的id_rsa.pub 传送到备机同目录,命名为authorized_keys
scp /home/postgres/.ssh/id_rsa.pub postgres@192.168.15.91:/home/postgres/.ssh/authorized_keys,出现提示时输入备机postgres用户的密码
4.5 输入ssh 192.168.15.91进行测试,无需输入密码即可连接,这时主机向备机传送归档WAL日志文件时就不用输入密码了。
5 主机设定WAL归档
vim /usr/local/pgsql/data/postgres.conf
设定如下参数:
archive_mode = on
archive_command = ‘scp %p 192.168.15.91:/usr/local/pgsql/backup/standby_log/%f
archive_timeout = 1200
archive_mode参数,开启WAL归档
archive_command参数,设定归档时执行的命令,我们这里通过scp把主机的WAL归档日志传送到备机的/usr/local/pgsql/backup/standby_log/目录下
archive_timeout参数,规定了最多多久执行一次归档,也是发生故障时数据库丢失数据的最长时间。设定很小的话保证了安全性,增加了网络传输量。
6 主机进行备份,恢复到备机
6.1 主机开始备份
psql standby
select pg_start_backup(‘baseline’);
6.2 主机压缩备份整个data目录
tar –jcv –f /usr/local/pgsql/backup/baseline.tar.bz2 /usr/local/pgsql/data/
6.3 主机通过scp复制到备机
scp /usr/local/pgsql/backup/baseline.tar.bz2 192.168.15.90: /usr/local/pgsql/backup/baseline.tar.bz2
6.4 备机解压缩备份文件
tar –jxv –f /usr/local/pgsql/backup/baseline.tar.bz2 –C /
6.5 备机更改目录权限
chown –R postgres:postgres /usr/local/pgsql/
6.6 主机结束备份
psql standby
select pg_stop_backup();
7 备机进行设置,启动到恢复模式
7.1 在/usr/local/pgsql/data目录内建立recovery.conf文件,设置如下:
restore_command = 'pg_standby -d -s 2 -t /tmp/pgsql.trigger.5432 /usr/local/pgsql/backup/standby_log %f %p %r 2>>standby.log'
recovery_end_command = 'rm -f /tmp/pgsql.trigger.5432'
7.2 更改/usr/local/pgsql/data/postgres.conf文件中备份设置
vim /usr/local/pgsql/data/postgres.conf
把archive_mode、archive_command、archive_timeout三个参数注释掉,这些参数是主机设置的,由于我们备机暂时不需归档,所以注释掉他。
7.3 启动备机postgresql数据库
pg_ctl –D /usr/local/pgsql/data start
备机会一直读取主机传送的WAL归档日志进行恢复,知道/tmp目录下创建pgsql.trigger.5432文件,停止备份后会删除该文件防止错误操作。
8 测试
8.1 主机登录standby数据库,创建表并插入相应数据
psql standby
create table tb(a int);
insert into tb(a) values(1);
insert into tb(a) values(2);
insert into tb(a) values(3);
8.2 主机归档WAL日志
select pg_switch_xlog();
8.3 备机查看/usr/local/pgsql/data/standby.log,确定主机刚发送过来的WAL归档日志已经被应用到备机上。
8.4 备机在/tmp目录下创建pgsql.trigger.5432文件
touch /tmp/pgsql.trigger.5432
8.5 登录备机standby数据库,查看数据是否恢复
psql standby
select * from tb;
a
---
1
2
3
至此,数据已同步到备机。需要切换时只要创建/tmp/pgsql.trigger.5432文件,备机会自动完成切换。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14293419/viewspace-614586/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14293419/viewspace-614586/