<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 前言 FTS(Fault Tolerance Serve)是GreenPlum中的故障檢測服務,是保證GP高可用的核心功能。GreenPlum的Segment的健康檢測及HA是由GP Master實現的,GP Master上面有個專門的進程–FTS進程,它可以快速檢測到Primary或者Mirror是否掛掉,并及時作出Primary/Mirror 故障切換。如果FTS掛掉了,Master將會重新fork出來一個FTS進程。 ![](https://box.kancloud.cn/2016-04-11_570b485eb74ea.png) ## FTS實現原理 GP Master上面的FTS進程每隔60s(時間可以配置)向Primary或者Mirror發送心跳包,Primary和Mirror收到心跳包后返回它們的當前狀態,FTS進程心跳包的發送狀態和Segment返回狀態更新元信息和作出故障切換。因為Segment可能很多,為了加快檢測速度,FTS是多線程的,默認16個線程。 ![](https://box.kancloud.cn/2016-04-11_570b485ed7324.png) 實現檢測方法的源碼大致如下: ~~~ while (!probeGetIpAddr(&probeInfo) || !probeOpenSocket(&probeInfo) || !probeMarkSocketNonBlocking(&probeInfo) || !probeConnect(&probeInfo) || !probeSend(&probeInfo) || !probeReceive(&probeInfo) || !probeProcessResponse(&probeInfo)) { probeClose(&probeInfo); if (retryCnt == gp_fts_probe_retries) { write_log("FTS: failed to probe segment (content=%d, dbid=%d) after trying %d time(s), " "maximum number of retries reached.", probeInfo.segmentId, probeInfo.dbId, retryCnt); break; } /* sleep for 1 second to avoid tight loops */ pg_usleep(USECS_PER_SEC); retryCnt++; //other code } ~~~ ## Segment檢測及故障切換 GP Master首先會檢測Primary狀態,如果Primary不可連通,那么將會檢測Mirror狀態,Primary/Mirror狀態總共有4種: 1. Primary活著,Mirror活著。GP Master探測Primary成功之后直接返回,進行下一個Segment檢測; 2. Primary活著,Mirror掛了。GP Master探測Primary成功之后,通過Primary返回的狀態得知Mirror掛掉了(Mirror掛掉之后,Primary將會探測到,將自己變成ChangeTracking模式),這時候更新Master元信息,進行下一個Segment檢測; 3. Primary掛了,Mirror活著。GP Master探測Primary失敗之后探測Mirror,發現Mirror是活著,這時候更新Master上面的元信息,同時使Mirror接管Primary(故障切換),進行下一個Segment檢測; 4. Primary掛了,Mirror掛了。GP Master探測Primary失敗之后探測Mirror,Mirror也是掛了,直到重試最大值,結束這個Segment的探測,也不更新Master元信息了,進行下一個Segment檢測。 ![](https://box.kancloud.cn/2016-04-11_570b485eeb312.png) ## 參數配置 ### gp_fts_probe_threadcount 用來故障檢測的線程數量,默認為16。 ### gp_fts_probe_interval 兩次檢測的時間間隔,默認為60s。如果一次檢測時間使用10s,那么剩余50s將會sleep;如果超過60s,將會直接進入下一次檢測。 ### gp_fts_probe_timeout 檢測Segment超時時間,默認值: 20。 ### gp_fts_probe_retries 檢測Segment失敗重試次數,如果超過這個次數,將會認為當前節點掛掉,默認值: 5。 ### gp_segment_connect_timeout Prmary和Mirror文件同步允許連接Mirror最大超時時間,如果達到這個超時時間,Primary將會認為Mirror掛掉了,默認值: 180s。 ## 總結 通過GreenPlum FTS機制學習,可以了解部分MPP架構高可用原理。同時根據自身的業務,合理地配置FTS參數,保障GP高可用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看