摘要: Gaussdb的HA采用主備從的架構實作資料可靠性,當主DN發生故障時,備DN走failover流程,升級成為新主DN,保證集群不因單DN故障而中斷業務,
本文分享自華為云社區《【玩轉PB級數倉GaussDB(DWS)】dws高可用之failover流程大解密》,作者:fxy0224,
眾所周知,PostgreSQL通過WAL預寫xlog日志的機制解決了在單機環境上因行程故障退出導致資料丟失的問題,但在磁盤損壞等情況下,存盤在持久性介質的資料就會丟失無法恢復,因此通常采用多副本的方式來保證資料可恢復,在Gaussdb中采用了主備從架構保證資料可靠性,
在Gaussdb主備從架構下,主DN分別與備?DN、從備DN建連,正常情況下,主DN與備DN、從備DN均建立流復制通道,分wal同步和資料頁同步兩個通道,wal同步是將存盤在磁盤中的wal檔案讀出,然后通過walsender執行緒發送到備DN;資料頁同步是在列存或者批量匯入行存資料的場景下使用,通過datasender執行緒將資料發送到備DN,備DN上通過walreceiver、datareceiver執行緒接收從主DN同步過來的資料,備DN對同步來的xlog做redo的方式實作與主DN的資料一致性,
failover的場景大致如下:當發生主DN故障且退出后,CM會向備DN通知failover升主的信號,備DN會率先主動連從備DN,將從備DN上的xlog與資料頁同步至備DN,然后備DN升主,備DN和從備DN之間建立新的流復制通道,這樣當主DN故障時,依靠備DN與從備DN,Gaussdb仍可對外提供服務,
failover時主備DN的狀態變化程序如下:
DN狀態切換程序示意圖
(由于wal機制,因此主備DN在啟動時均先執行redo,redo完成后DN狀態才從starting——>Normal)
當主DN因故障退出時,其狀態顯示為down,此時備DN處于斷連狀態,狀態由standby Normal變為needrepair(disconnected),當備DN收到failover信號時,狀態變為promoting,表示備DN正處于升主程序中,備DN狀態變為primary Normal后,表示備DN升主成功,
failover時備DN的流程示意圖如下:
failover流程示意圖
Gaussdb內部通過gs_ctl的方式發送給備DN的failover命令:
gs_ctl failover [-w] [-t SECS] [-D DATADIR] [-U USERNAME] [-P PASSWORD],具體流程如下:
- 備DN上Postmaster執行緒將failover信號通知到Startup執行緒, startup執行緒收到failover信號后,將與主DN不斷建連的datareceiver和walreceiver執行緒shutdown;
- startup執行緒獲取連接從備的建連資訊(從備DN的ip+port),然后通知Postmaster執行緒創建新的walreceiver和datareceiver執行緒,
- 備DN的walreceiver和datareceiver執行緒與從備DN的walsender和datasender建連,從備DN發送xlog日志與資料頁資訊到備DN
- 備DN將從備DN上的資料同步結束后,其walreceiver執行緒和datareceiver執行緒均退出,備DN由startup執行緒進行redo,redo完成后,備DN將創建walsender和datasender執行緒,并與從備DN的walreceiver和datareceiver執行緒分別建連,備DN升主成功,備DN升主后,新主將與CN連接,并將xlog日志與資料頁檔案同步至從備,
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/546257.html
標籤:MySQL
