postgreSQL hot stand by

来源:互联网 发布:中国facebook知乎 编辑:程序博客网 时间:2024/06/06 04:35

博客被遗弃好久了,不是因为忙,而是一直都很懒。今天也算是心血来潮吧。把最经刚刚在windows上配置的postgreSQL hot standby 的过程和大家分享一下。主要还是参考了别人的文章,然后再把自己配置过程中遇到的问题和注意点加以说明。主要是为了做一个记录备案,方便以后需要的时候,拿出来参考。同时给同样需要配置这样的环境的朋友一点参考。

这里我主要参考了这边的一篇博客:http://bbs.pgsqldb.com/index.php?t=msg&th=13110&start=0&rid=501&S=e98802133a29f3dc3313874966d5e986。

postgreSQL hot standby configurantion on windows

1、Hot standby

Standby技术基于PostgreSQL的预写入日志(wal)同步,建立服务器级的数据同步节点。他的节点间直接传递写操作的二进制预写入事务,传输效率高,性能好,一致性强,自动同步的DDL操作。流式同步允许slave节点连接到primary节点上,以流式获取新的wal数据。Replication连接要求用于流式同步的登录账号必须是superuser,可以限定该用户只能在primary节点中执行同步复制,提高安全性。

 

hot-standby的配置场景有三个:

(1) 正常运行时场景,配置master和slave,并且 master正常运行,slave也正常的运行

(2) Failover场景,即master坏了,slave提升为master,然后修理master机器

(3) Switchover场景,即master修复好后,配置为slave,即角色从原来的master转换为slave,而原来的slave转换成为master

 

2、Master节点

(1)下载安装postgreSQL最新版本(9.1.3.zip),解压到D盘

(2)创建postgres用户,并且设置密码123456

(3)在命令行输入:runas/user:postgres cmd ,输入postgres账户密码,进入postgres命令行环境。进入pgsql\bin目录initdb.exe -D ../data --no-locale 初始化数据群d

 

打开d:\pgsql\data\postgresql.conf修改

listen_addresses= '*'

wal_level =hot_standby

max_wal_senders= 5

wal_keep_segments= 1000  #需要至少16*1000=16GB的pg_xlog目录空间,否则可能空间溢出

(4)启动master节点,增加一个用于管理流复制的数据库用户

       psql

       Create user rep SUPERUSER ENCRYPTENPASSWORD ‘110’

(5) 配置master节点,让其可以接受slave节点连接

       打开D:\pgsql\data\pg_hba.conf

添加  host replication  rep  172.25.21.72/32  md5

注:这里的红色的ip就是slave服务器的ip地址

启动master节点:pg_ctl restart-D ../data

(6) 对master做基础备份

然后把 data目录复制出来(在配置slave中会有到),接着执行下面的命令

<!—master节点配置完成-->

 

2、slave节点配置

同样在slave机器上,解压postsql到C盘

然后把master中复制出来的data目录放到pgsql中

到c:\pgsql\share目录复制recovery.conf.sample,改名为recovery.conf,放到data目录下,并且做如下修改

archive_cleanup_command='d:\\pgsql\\bin\\pg_archivecleanupc:\\pgsql\\data\\pg_xlog %r'

standby_mode= 'on'

primary_conninfo= 'host=172.25.21.47 port=5432 user=reppassword=110'

trigger_file= 'c:\\pgsql\\data5433\\trigger_active.5433'

注:这里红色的ip指的是master的IP地址

接着修改c:\pgsql\data\postgresql.conf文件

hot_standby=on  //注:这里的on不能有引号

然后启动就OK了。

 

注:两台机器需要时相同OS,如果操作系统不相同的话,当把data目录,从master复制到slave时,在slave的机器上无法用postgres的账户启动服务。

 

3、当作为master的机器failover

(1)将原来的slave配置成master

在slave端的data目录下,新建一个文件,trigger_active.5433 (这个文件时在recovery.conf中有配置的),然后

Slave端就成为了master

执行命令:psql  -c “select pg_start_backup(‘third’)”

然后把data目录复制出来,拷贝到原来的master机器上,替换其中data

然后在执行命令:psql–c “select pg_stop_backup()”

(2)将原来的master配置成slave

这边的配置和配置slave的步骤一样的

然后再启动服务