金融其它双机热备

PostgreSQL9.0 HA 双机热备配置

PostreSQL9发布了,无比灿烂的一个版本
文档:http://www.postgresql.org/docs/9.0/static/index.html
通过学习文档,实验后总结HA配置如下:

1.安装pgsql9

2.initdb data文件夹

3.将文件夹复制到standby机器

4.配置一般standby,这种standby数据库无法登录,总是显示"the database system is starting up"

primary端打开archive(与一般归档日志配置相同)
日志级别设为最高级,以适应下面所有情况:
Java代码

   1. wal_level = hot_standby  

wal_level = hot_standby



standby端:配置recovery.conf
Java代码

   1. standby_mode = 'on'  
   2. restore_command = 'copy "d:\program files\PostgreSQL\9.0\arch\%f" "%p"'  

standby_mode = 'on'
restore_command = 'copy "d:\program files\PostgreSQL\9.0\arch\%f" "%p"'



这个时候数据库已经可以复制了,只不过standby库是无法登陆的,可以查看日志,看到在读取归档日志.

5.配置streaming 复制,及具有更高的实时性,会读取没有进入归档日志的改变
primary端pg_hba添加访问,给一个超级用户给standby,database列填replication
如:
Java代码

   1. host    replication     pgsql             192.168.1.3/32            md5  

host    replication     pgsql             192.168.1.3/32            md5


max_wal_senders 增加数字,表示可以有几个standby连过来

standby端,增加primary_conninfo设置primary服务器的登陆参数 :
Java代码

   1. standby_mode = 'on'  
   2. primary_conninfo = 'host=192.168.1.2 port=5432 user=Administrator password=foopass'  
   3. restore_command = 'copy "d:\program files\PostgreSQL\9.0\arch\%f" "%p"'  

standby_mode = 'on'
primary_conninfo = 'host=192.168.1.2 port=5432 user=Administrator password=foopass'
restore_command = 'copy "d:\program files\PostgreSQL\9.0\arch\%f" "%p"'



6.配置hot standby(这种就是在standby机器可查询,可用作报表服务器等等):
standby端打开
Java代码

   1. hot_standby = on  

hot_standby = on



7.唤醒standby为primary,recovery.conf增加:
Java代码

   1. standby_mode = 'on'  
   2. primary_conninfo = 'host=192.168.1.2 port=5432 user=Administrator password=foopass'  
   3. restore_command = 'copy "d:\program files\PostgreSQL\9.0\arch\%f"   
   4. trigger_file = '"d:\program files\PostgreSQL\9.0\trigger_file"'  

standby_mode = 'on'
primary_conninfo = 'host=192.168.1.2 port=5432 user=Administrator password=foopass'
restore_command = 'copy "d:\program files\PostgreSQL\9.0\arch\%f"
trigger_file = '"d:\program files\PostgreSQL\9.0\trigger_file"'


写入此文件,就会唤醒,进入正常工作状态,以代替primary

以上就是全部的配置

在windows下已经试验成功

在freebsd8.1下,使用ports安装pg9,日志用archive_command 中加入scp传送到另一台机器,可以成功配置standby
但是 streaming 复制没有成功,会在standby端日志中显示错误信息:
Java代码

   1. [2-1] FATAL:  could not access file "libpqwalreceiver": No such file or directory  

[2-1] FATAL:  could not access file "libpqwalreceiver": No such file or directory

,等待ports更新吧.
现在只能切换日志发送最新数据了:
Java代码

   1. psql -c"select pg_switch_xlog() ;" postgres  

psql -c"select pg_switch_xlog() ;" postgres



解决这个问题的方法,是自己下载编译pg9,可以看到完成后有这个文件lib/libpqwalreceiver.so,而ports安装的就没有,至少目前是没有,以后可能会修复这个bug,我想是ports的bug。

自己编译pg9,freebsd8.1上也完全成功了。

进入psql
执行select pg_is_in_recovery();
可以查看是否在恢复状态,一个standby库,在没有变成primary时,语句返回总是't'
其他的函数还有:pg_last_xlog_receive_location()等
网址:http://www.postgresql.org/docs/9 ... RECOVERY-INFO-TABLE

    可以看出pg 9对HA的实现基于WAL日志系统,并应用原来的配置文件,增加了几个关键字,与原结构保持统一。

    在使用中还需要考虑归档日志的传输脚本和primary数据库状态的检测脚本的实现,好在这些工具已经有很多。

    其实自己用python写一个代理,并另作一个程序监控主库的状态,并发送给python代理,提示切换至standby和写入trigger文件,我想代码不会超过200行。
参与0

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

yinxin
系统管理员银信长远
擅长领域: 服务器存储数据库

相关问题

问题状态

  • 发布时间:2010-10-21
  • 关注会员:0 人
  • 问题浏览:3950
  • X社区推广