主备流复制环境搭建请参考http://blog.csdn.net/baiyinqiqi/article/details/47833811,参考文章介绍的是异步流复制环境的搭建,实际上同步模式只需要修改主库的几个参数即可实现。
主:192.168.3.201
从:192.168.3.202
postgresql 的几种流复制:
1+n异步流复制:1是指master,n是指slave。一个master可以有多个slave。
1+1+n同步加异步流复制:也就是说1个master与n个slave的流复制环境,在n个slave中有一个slave是同步模式,其它是异步模式。如果同步的slave挂掉,其它异步的slave会选举出一个slave切换到同步模式,整个流复制环境仍能够保证1+1+n的结构。
级联流复制:1个master A,一个slave B直连A,其它slave连B,从B获取数据。这种方式要9.2或更高版本支持。
这里流复制环境的搭建不再重复,仅介绍下如何将异步模式修改为同步模式:
synchronous_standby_names = '*' # *=all,意思是所有slave都被允许以同步方式连接到master,但同一时间只能有一台slave是同步模式。另外可以指定slave,将值设置为slave的application_name即可。
synchronous_commit = on #这个参数控制是否等待wal日志buffer写入磁盘再返回用户事物状态信息。这个对性能影响还是比较大的,看业务实际情况可考虑关闭,在关键数据更新时在事物中将其暂时性打开,保证关键数据不会因意外停机而丢失。默认情况下是打开状态。同步流复制模式需要打开这个参数。
测试:
若使用同步流复制模式,那么master会等待同步slave返回事物状态后,才会完成当前事物。所以如果slave停掉,那么master的事物会一直等待下去。下面将slave 202数据库关掉,然后在master 201进行事物操作。
slave 202数据库停掉:
在master 201中进行数据更新,因为同步slave库已经停掉了,所以该事物一直等待:
如果将synchronous_commit = off 关掉,即使slave库关掉了,master的事物也不会出现等待的现象。
主备切换及IP漂移:
模拟环境:192.168.3.201 master 、192.168.3.202 slave 两台服务器设置对外ip 192.168.3.100。模拟201宕机,202从slave切换到master,同时100ip从201漂移到202。
设置漂移ip:一块网卡绑定多个ip网上有很多资料,可以去搜下。注意,master与slave的网卡都要绑定192.168.3.100。master是启用状态,slave是停用状态。
切换前IP配置情况:
切换前数据库状态:
在搭建流复制环境的时候,一般在master、与slave服务器上都要配置密码文件,以便将来master宕机后进行主备切换,这里就不赘述了。
开始模拟:
停掉master数据库:
[postgres@CentOS_201 ~]$ pg_ctl stop -m fast
停用master 的192.168.3.100 ip :
启用slave的192.168.3.100 ip,完成ip漂移:
slave库进行切换:
查看slave状态,已经切换到production状态:
配置原master库recovery:
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.3.202 port=5432 user=rep'
启动原master,自动切换到standby模式:
ok!
主备切换完成,至于ip漂移,可以用其他服务器的客户端测试,比如,漂移前,master停用后,slave启用前,漂移完成后。
另外,postgresql在9.3增加了流复制协议自动拷贝时间线timeline的功能,本过程使用的是9.4。如果您在测试的时候,使用的是9.3以前的版本,可能需要手工拷贝时间线文件。
ip漂移可以使用第三方工具来做,比如keepalived等。
原文链接:https://www.f2er.com/postgresql/195029.html