前言
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。
4.4、gp_fts_probe_retries
檢測Segment失敗重試次數,如果超過這個次數,將會認爲當前節點掛掉,默認值: 5。
4.5、gp_segment_connect_timeout
Prmary和Mirror文件同步允許連接Mirror最大超時時間,如果達到這個超時時間,Primary將會認爲Mirror掛掉了,默認值: 180s。
五、總結
通過GreenPlum FTS機制學習,可以瞭解部分MPP架構高可用原理。同時根據自身的業務,合理地配置FTS參數,保障GP高可用。