PostgreSQL的warm standby安装配置详解
2009年08月19日 作者: 大头刚
PostgreSQL的warm standby和Oracle的dataguard类似,简单说了就是1台主库primary,1台备库standby,standby利用primary的归档日志,使standby的数据和primary实时的同步,当primary宕机的时候,能及时的切换到standby。
当然,和oracle的dataguard技术相比,warm standby的功能没有那样完善,例如standby不提供只读,不能进行swtich,只提供failover等。相关的中文文档也是很少,PostgreSQL的路还很长呀。
下面以最新的8.4.0版本为例,介绍下如何配置PostgreSQL warm standby,简单的说就是4步。
1、安装PostgreSQL
在primary和standby的2台机器上安装配置好PostgreSQL,版本最好是一样的。安装方法可以参考我前面的文章,这里就不介绍了。
2、在primary配置WAL。
配置参数:
archive_mode = on archive_command = 'scp %p standby_ip:/var/wal_archive/%f </dev/null' #standby_ip是指备库的ip地址。 archive_timeout = 1200
这里注意archive_command是用的SCP,就是说归档到standby机器的指定目录,SCP不输密码配置可以去网上搜索。
archive_timeout设置根据自己的业务来把。
3、在primary进行一次全备,在恢复到standby。
3.1 在primary上进行备份,开启备份标识
echo “SELECT pg_start_backup(’mybackup’);” | psql -U postgres
3.2 将primary的数据文件备份打包,并传到standby
tar -cvf /shared/mybackup.tar /var/pgsql/data
scp /shared/mybackup.tar standby_ip:/var/pgsql
3.3 把备份解压到相对应的目录
rm -rf /var/pgsql/data
cd /var/pgsql
tar -xvf mybackup.tar
chown -R postgres:postgres data
3.4 在primary关闭备份标识
echo “SELECT pg_stop_backup();” | psql -U postgres
4、在standby配置recovery.conf,然后进行恢复。
4.1 创建recovery.conf
restore_command = 'pg_standby -d -s 2 -t /tmp/pgsql.trigger.5442 /var/wal_archive %f %p %r 2>>standby.log' recovery_end_command = 'rm -f /tmp/pgsql.trigger.5442'
这里需要注意,如果报错pg_standby这个命名不存在,需要去安装这个命令,我就是在这被卡了很久,呵呵。
cd /usr/local/pgsql/contrib/pg_standby ls Makefile pg_standby pg_standby.c pg_standby.o make make install
4.2 启动standby,
pg_ctl start
4.3 检查是否配置成功
查看日志,是否配置成功,看到类似下面的日志,说明你配置成功,standby已经在进行实时恢复
more standby.log Trigger file : /tmp/pgsql.trigger.5442 Waiting for WAL file : 00000001000000000000008A.00000020.backup WAL file path : /var/wal_archive/00000001000000000000008A.00000020.backup Restoring to : pg_xlog/RECOVERYHISTORY Sleep interval : 2 seconds Max wait interval : 0 forever Command for restore : cp "/var/wal_archive/00000001000000000000008A.00000020.backup" "pg_xlog/RECOVERYHISTORY" Keep archive history : 000000000000000000000000 and later running restore : OK Trigger file : /tmp/pgsql.trigger.5442 Waiting for WAL file : 00000001000000000000008A WAL file path : /var/wal_archive/00000001000000000000008A Restoring to : pg_xlog/RECOVERYXLOG Sleep interval : 2 seconds Max wait interval : 0 forever Command for restore : cp "/var/wal_archive/00000001000000000000008A" "pg_xlog/RECOVERYXLOG" Keep archive history : 000000000000000000000000 and later running restore : OK Trigger file : /tmp/pgsql.trigger.5442 Waiting for WAL file : 00000001000000000000008B WAL file path : /var/wal_archive/00000001000000000000008B Restoring to : pg_xlog/RECOVERYXLOG Sleep interval : 2 seconds Max wait interval : 0 forever Command for restore : cp "/var/wal_archive/00000001000000000000008B" "pg_xlog/RECOVERYXLOG" Keep archive history : 00000001000000000000008A and later WAL file not present yet. Checking for trigger file... WAL file not present yet. Checking for trigger file... WAL file not present yet. Checking for trigger file...
当然这时你试图连接standby会有如下提示:
psql template1 FATAL: the database system is starting up psql: FATAL: the database system is starting up
5.故障切换
5.1 登录到primary,确定PostgreSQL已经关了,如果没有完全关闭可以杀进程
sudo kill -9 `sudo cat /var/data/postmaster.pid | head -n 1`
5.2 在登录的standby,用postgresql帐号登录。
5.3 这时在standby仍然是standby模式,如果你进行连接将返回’psql: FATAL: the database system is starting up’。需要创建触发文件,也就是你在recovery.conf里面设置的这个文件,touch /tmp/pgsql.trigger.5442。
5.4 OK,切换已经完成。尝试使用psql登录。




- Comments (0)
- Trackbacks (0)
Leave a comment TrackbackNo comments yet.
No trackback yet.