天天看點

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/

繼續閱讀