使用 PostgreSQL 創建高可用性集群
我是數據庫設計的新手。我的任務是創建一個高可用性集群。我用Google搜尋了很多,但是我沒有找到任何在 PostgreSQL 上執行此操作的好方法。
我應該從哪裡開始?創建高可用性集群涉及哪些步驟?
有很多方法可以為 PostgreSQL 設置 HA 集群。有些方法是大而艱難的。
最簡單的方法如下:
- 將您的數據庫同步到備用伺服器
- 安裝心跳並進行非對稱集群
此方法是建構具有優雅降級的 HA 集群的最簡單方法。
大多數複製方法通常是非同步的。我推薦以下內容:
在兩個數據庫伺服器上安裝 PostgreSQL。
在兩台數據庫伺服器上安裝 DRBD
安裝ucarp或Linux Heartbeat來創建
- 數據庫貴賓
- 自動故障轉移
在預設 PostgreSQL 數據上掛載 DRBD Primary
將 PostgreSQL 數據複製到其中
在 DRBD 主節點上啟動 PostgreSQL
請記住,DRBD 是同步磁碟級複製。
更新 2012-10-18 12:01 EDT
由於 DRBD 是主動/被動網路 RAID-1,因此應通過正確編寫腳本的自動故障轉移來適應 STONITH(射擊頭部中的其他節點)。此外,被動大小(又名 DRBD 輔助)沒有執行 PostgreSQL。DRBD 將簡單地讓網路 RAID-1 設置執行磁碟複製。您為 ucarp 或 Heartbeat 設置的 upscript 應該負責通過執行以下操作來保持悲觀:
- 假設 DBVIP
- 一種。如果 DBVIP 仍在 DRBD Primary 上使用,則 DRBD Secondary 不能承擔 DBVIP
- 灣。如果 DBVIP 未在 DRBD Primary 上使用,則 DRBD Secondary 可以假定 DBVIP
- 對 DRBD 進行腦裂(即,將被動端作為 DRBD 主節點)
- 安裝
/dev/drbd0
在/var/lib/pgsql
- 啟動 PostgreSQL
如果您使用的 DBVIP 僅出現在一台伺服器上,請不要擔心腦裂情況。擁有 DBVIP 的人將確定數據寫入的位置。如果 DRBD Secondary(又名 Passive Size)執行上述四個步驟,您必須確保 ucarp 或 HeartBeat 的 upscript 檢測到 DBVIP(即,在 DBVIP 上執行 ping -c 並返回空)可供您使用,然後再執行執行
ip addr add DBVIP/32 dev (interface)
。一旦發生自動故障轉移,您就可以通過執行 ucarp 或 HeartBeat 的下腳本來隱喻地處理 STONITH 以
- 關閉 PostgreSQL
- 解除安裝
/var/lib/pgsql
_/dev/drbd0
drbdadm disconnect drbd0
drbdadm secondary drbd0
然後,當您知道 DBVIP 在新的主節點上時,轉到新的 DRBD 主節點並執行
drbdadm connect drbd0
並監控cat /proc/drbd
以確保新的 DRBD 主節點與新的 DRBD 輔助節點同步