尚書中雲:惟事事,乃其有備,有備無患。這教導我們做事一定要有準備,做事尚且如此,在企事業機關發展中處于基礎地位的資料倉庫軟體在運作過程中,何嘗不需要有備無患呢?
今天别的不表,主要來談談企業級資料倉庫軟體deepgreen和greenplum的高可用特性之一:計算節點鏡像。
一、首先從理論上來講,正常segment節點和他的mirror是分布在不同主機上的,以防止單點故障導緻的資料庫通路異常。當正常segment節點出現故障時,mirror節點可以自動接管segment節點的服務,資料庫仍然可以正常使用。這個過程對前台應用來說是透明的。

下面我們來看實操例子:
1.測試環境
2.首先檢視叢集狀态:1 master,2 segments
3.建立鏡像節點目錄并添加節點
4.重新檢視叢集狀态:确定2個segments都已經添加好mirror
5.登入資料庫進行查詢測試
6.模拟實驗:segment1執行個體異常
7.通路資料庫測試連通性:仍然可以正常查詢
8.檢視叢集狀态:顯示有1個primary節點異常
至此本實驗完成,可以看到,在segment主執行個體異常情況下,mirror會立即接管服務,不會對前台應用産生停機影響。
實驗完成了,但是事情還沒有結束哦,因為這是故障,是以故障産生後,需要進行修複,那麼基于整個叢集,我們都需要做什麼呢?
要點一:及時恢複故障節點
要點二:雖然mirror可以臨時接管服務,保持服務的連續性,但是在實際生産過程中,由于節點及其mirror的分散性,長期使用mirror會導緻資料分布不均勻,是以故障修複後,建議及時切換回原來的架構。
二、故障節點恢複
節點在故障以後,可以通過gprecoverseg指令恢複故障節點,如下:
檢視叢集狀态
三、切換回原叢集狀态
從第二部分的最後狀态代碼也可以看出,目前是一個mirror節點接管了primary節點的服務,我們本節要講mirror的服務交還給primary。
下面執行:gprecoverseg -r 指令進行節點切換,切換完成後執行gpstate檢視狀态,代碼略。
另外,我們也可以在資料庫裡面通過字典表檢視切換資訊:
這樣,整個今天的分享就結束了,最後再啰嗦一句。從本文例子看出,資料庫主/備切換相當的簡單,gprecoverseg指令相當的智能,在primary的主機出現故障之後,mirror會自動切換為primary,不影響資料庫的正常工作,但是對監控不是很到位的系統來說,不建議使用這個功能,首先這個功能存在一定的bug,其次,監控不到位,一旦發現切換,并不能及時發現,如果再有節點出現故障,可能對資料恢複造成影響,而且如果單個節點的資料量非常大的時候,gprecoverseg同步資料的過程将會很漫長。
最後,祝大家再deepgreen & greenplum的路上一去不複返^_^
同系列文章參考: