Postgresql主备同步流复制及主备切换、IP漂移

前端之家收集整理的这篇文章主要介绍了Postgresql主备同步流复制及主备切换、IP漂移前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

主备流复制环境搭建请参考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或更高版本支持


这里流复制环境的搭建不再重复,仅介绍下如何将异步模式修改为同步模式:

修改master的postgresql.conf

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库已经停掉了,所以该事物一直等待:


查看进程,可以看到有一个insert waiting 进程:


如果将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等。

猜你在找的Postgre SQL相关文章