天天看点

use zfs snapshot rollback postgresql's primary to old status in PG HA

前几天讲过zfs的snapshot用作postgresql pitr, 使用接近还原点的snapshot可以减少xlog的apply, 缩短数据库的恢复时间.

其实snapshot还有一个作用, 用作流复制ha的主备角色切换后避免因为xlog的差异导致old primary无法切换成standby角色.

例如  : 

一个pg 流复制的ha场景如下 : 

use zfs snapshot rollback postgresql's primary to old status in PG HA

在发生failover后, standby节点切换成主节点, 老的主节点切换成standby节点.

但是由于standby节点和老的主节点存在差异, (即只接收了部分xlog), 那么standby激活后实际上是从primary节点的过去状态开始了新的读写, 所以primary节点不能直接切换成standby节点.

use zfs snapshot rollback postgresql's primary to old status in PG HA

如果primary节点有snapshot的话, 可以回到以往的snapshot, 使用rollback或者使用clone都没有问题. 只是clone更保险一点, 因为还能回来, 完全ok后可以删掉其他的dataset.

注意必须回到一个节点并且所有的xlog都在新的primary可以找到.

use zfs snapshot rollback postgresql's primary to old status in PG HA

这种问题的另外一种解决办法是使用rsync , 这也是pgpool-ii中的用法, 但是rsync对于比较大的数据库, 开销一是很大的, 因为所有的文件都要读一遍, 技术checksum, 然后与本地文件的checksum进行比对. 所以不推荐使用rsync.

[参考]1. http://blog.163.com/digoal@126/blog/static/163877040201441723450443/

继续阅读