前言
FTS(Fault Tolerance Serve)是GreenPlum中的故障檢測服務,是保證GP高可用的核心功能。GreenPlum的Segment的健康檢測及HA是由GP Master實作的,GP Master上面有個專門的程序–FTS程序,它可以快速檢測到Primary或者Mirror是否挂掉,并及時作出Primary/Mirror 故障切換。
一、FTS架構
GreenPlum的Segment的健康檢測及HA是由GP Master實作的,GP Master上面有個專門的程序–FTS程序,它可以快速檢測到Primary或者Mirror是否挂掉,并及時作出Primary/Mirror 故障切換。如果FTS挂掉了,Master将會重新fork出來一個FTS程序。

二、FTS實作原理
GP Master上面的FTS程序每隔60s(時間可以配置)向Primary或者Mirror發送心跳包,Primary和Mirror收到心跳包後傳回它們的目前狀态,FTS程序心跳包的發送狀态和Segment傳回狀态更新元資訊和作出故障切換。因為Segment可能很多,為了加快檢測速度,FTS是多線程的,預設16個線程。
三、Segment檢測及故障切換
GP Master首先會檢測Primary狀态,如果Primary不可連通,那麼将會檢測Mirror狀态,Primary/Mirror狀态總共有4種:
Primary活着,Mirror活着。GP Master探測Primary成功之後直接傳回,進行下一個Segment檢測;
Primary活着,Mirror挂了。GP Master探測Primary成功之後,通過Primary傳回的狀态得知Mirror挂掉了(Mirror挂掉之後,Primary将會探測到,将自己變成ChangeTracking模式),這時候更新Master元資訊,進行下一個Segment檢測;
Primary挂了,Mirror活着。GP Master探測Primary失敗之後探測Mirror,發現Mirror是活着,這時候更新Master上面的元資訊,同時使Mirror接管Primary(故障切換),進行下一個Segment檢測;
Primary挂了,Mirror挂了。GP Master探測Primary失敗之後探測Mirror,Mirror也是挂了,直到重試最大值,結束這個Segment的探測,也不更新Master元資訊了,進行下一個Segment檢測。
四、參數配置
4.1、gp_fts_probe_threadcount
用來故障檢測的線程數量,預設為16。
4.2、gp_fts_probe_interval
兩次檢測的時間間隔,預設為60s。如果一次檢測時間使用10s,那麼剩餘50s将會sleep;如果超過60s,将會直接進入下一次檢測。
4.3、gp_fts_probe_timeout
檢測Segment逾時時間,預設值: 20。