PostgreSQL 故障轉(zhuǎn)移

2021-09-01 16:21 更新

如果主服務(wù)器失效,則后備服務(wù)器應(yīng)該開始故障轉(zhuǎn)移過程。

如果后備服務(wù)器失效,則不會有故障轉(zhuǎn)移發(fā)生。如果后備服務(wù)器可以被重啟(即使晚一點),由于可重啟恢復(fù)的優(yōu)勢,那么恢復(fù)處理也能被立即重啟。如果后備服務(wù)器不能被重啟,則一個全新的后備服務(wù)器實例應(yīng)該被創(chuàng)建。

如果主服務(wù)器失效并且后備服務(wù)器成為了新的主服務(wù)器,那么接下來舊的主服務(wù)器重啟后,你必須有一種機制來通知舊的主服務(wù)器不再成為主服務(wù)器。有些時候這被稱為STONITH(Shoot The Other Node In The Head,關(guān)閉其他節(jié)點),這對于避免出現(xiàn)兩個系統(tǒng)都認(rèn)為它們是主服務(wù)器的情況非常必要,那種情況將導(dǎo)致混亂并且最終導(dǎo)致數(shù)據(jù)丟失。

很多故障轉(zhuǎn)移系統(tǒng)僅使用兩個系統(tǒng),主系統(tǒng)和后備系統(tǒng),它們由某種心跳機制連接來持續(xù)驗證兩者之間的連接性和主系統(tǒng)的可用性。也可能會使用第三個系統(tǒng)(稱為目擊者服務(wù)器)來防止某些不當(dāng)故障轉(zhuǎn)移的情況,但是除非非常小心地建立它并且經(jīng)過了嚴(yán)格地測試,額外的復(fù)雜度可能會使該工作得不償失。

PostgreSQL并不提供在主服務(wù)器上標(biāo)識失敗并且通知后備數(shù)據(jù)庫服務(wù)器所需的系統(tǒng)軟件?,F(xiàn)在已有很多這樣的工具并且很好地與成功的故障轉(zhuǎn)移所需的操作系統(tǒng)功能整合在一起,例如 IP 地址遷移。

一旦發(fā)生到后備服務(wù)器的故障轉(zhuǎn)移,就只有單一的一臺服務(wù)器在操作。這被稱為一種退化狀態(tài)。之前的后備服務(wù)器現(xiàn)在是主服務(wù)器,但之前的主服務(wù)器處于關(guān)閉并且可能一直保持關(guān)閉。要回到正常的操作,一個后備服務(wù)器必須被重建,要么在之前的主系統(tǒng)起來時使用它重建,要么使用第三臺(可能是全新的)服務(wù)器來重建。在大型集簇上,pg_rewind功能可以被用來加速這個過程。一旦完成,主服務(wù)器和后備服務(wù)器可以被認(rèn)為是互換了角色。某些人選擇使用第三臺服務(wù)器來為新的主服務(wù)器提供備份,直到新的后備服務(wù)器被重建,不過顯然這會使得系統(tǒng)配置和操作處理更復(fù)雜。

因此,從主服務(wù)器切換到后備服務(wù)器可以很快,但是要求一些時間來重新準(zhǔn)備故障轉(zhuǎn)移集群。從主服務(wù)器到后備服務(wù)器的常規(guī)切換是有用的,因為它允許每個系統(tǒng)有常規(guī)的關(guān)閉時間來進行維護。這也可以作為一種對故障轉(zhuǎn)移機制的測試,以保證在你需要它時它真地能夠工作。我們推薦寫一些管理過程來做這些事情。

要觸發(fā)一臺日志傳送后備服務(wù)器的故障轉(zhuǎn)移,運行pg_ctl promote,調(diào)用 pg_promote(),或者創(chuàng)建一個觸發(fā)器文件,其文件名和路徑由promote_trigger_file設(shè)置指定。 如果你正在規(guī)劃使用pg_ctl promote或調(diào)用pg_promote()以進行故障轉(zhuǎn)移, promote_trigger_file就不是必要的。 如果你正在建立只用于從主服務(wù)器分流只讀查詢而不是高可用性目的的報告服務(wù)器,你不需要提升它。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號