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等。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章