簡體   English   中英

Postgresql 9.2故障轉移

[英]Postgresql 9.2 failover

我已經設置了從主DB到從DB的流復制。 如果主設備關閉,從設備將接管。 復制和故障轉移工作正常。

我有一個使用master數據庫存儲數據的Web應用程序。

一些細節:

  • 兩台服務器都運行Centos 6.4和Postgres 9.2。
  • 使用Postgres內置復制從主服務器到從服務器建立流復制。
  • 通過在連接字符串中指定主/從,Postgresql JDBC驅動程序(v9.2-1003)處理故障轉移。

我想繼續使用這種復制方法。

問題:

  • 從服務器是只讀的。 如何在故障轉移后自動將其設為主(可寫)?
  • 如果原來的主人突然再次開始工作並且我們現在有兩個主人怎么辦? 我如何拍攝頭部的原始主人? 自動。

我建議看一下帶有failover_command選項的pgpool。 在那里你可以有一個小的shell腳本來在讀/寫模式下重啟slave。 pgpool

如果你遇到pgpool的一些問題,我跟進進行故障排除的這個過程可能會有所幫助 - pgpool - stracing

PGPool-II做到了這一點。

我在第三台服務器上安裝了PGPool; 一台運行CentOS的監控服務器。 我將運行狀況檢查配置為每10秒運行一次。 failover_command設置為運行一個小shell腳本,如果主服務器出現故障,該腳本將在從屬服務器上生成觸發器文件。 而且效果很好。

為了防止主服務器再次突然啟動,我將為app服務器使用兩個配置文件(一個用於主服務器,一個用於從服務器),並使用slave配置擴展shell腳本以重新啟動應用服務器。

謝謝你的提示!

如果您考慮使用基於Docker的解決方案,請試試PostDock

目前我已經在我們的項目中使用docker-compose進行了嘗試,其架構如下所示:

pgmaster (primary node1)  --|
|- pgslave1 (node2)       --|
|  |- pgslave2 (node3)    --|----pgpool (master_slave_mode stream)----client
|- pgslave3 (node4)       --|
   |- pgslave4 (node5)    --|

我測試了以下場景,它們都運行良好:

  • 復制:在主(即主)節點上進行的更改將復制到所有備用(即從屬)節點
  • 故障轉移:停止主節點,備用節點(例如,node4)將自動接管主要角色。
  • 防止兩個主節點:恢復前一個主節點(node1),node4將繼續作為主節點,而node1將同步但作為備用節點。

至於客戶端應用程序,這些更改都是透明的。 客戶端只指向pgpool節點,並在所有上述方案中保持正常工作。

注意 :如果您在運行PostDock時遇到問題,可以嘗試我的分叉版PostDock

Pgpool-II與看門狗

上述架構的一個問題是pgpool是單點故障。 所以我也嘗試使用委派的虛擬IP 為pgpool-II啟用Watchdog,以避免單點故障。

master (primary node1)  --\
|- slave1 (node2)       ---\     / pgpool1 (active)  \
|  |- slave2 (node3)    ----|---|                     |----client
|- slave3 (node4)       ---/     \ pgpool2 (standby) /
   |- slave4 (node5)    --/

我測試了以下場景,它們都運行良好:

  • 正常情況:兩個pgpool啟動,虛擬IP自動應用於其中一個,在我的例子中,pgpool1
  • 故障轉移:關閉pgpool1。 虛擬IP將自動應用於pgpool2,因此pgpool2變為活動狀態。
  • 啟動失敗的pgpool:再次啟動pgpool1。 虛擬IP將與pgpool2一起保存,pgpool1現在作為備用。

至於客戶端應用程序,這些更改都是透明的。 客戶端只指向虛擬IP,並在所有上述方案中保持良好的工作狀態。

您可以在看門狗分支的GitHub存儲庫中找到此項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM