<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 三個定時任務 1. 每10秒每個sentinel對master和slave執行info; 1.發現slave節點; 2. 確認主從關系; ![](https://img.kancloud.cn/62/82/6282c31048bd1012b73d467c28675bbc_2146x1524.png) 2. 每2秒每個sentinel通過master節點的channel交換信息(pub/sub)channel是發布訂閱的頻道; 1. 通過__sentinel__:hello頻道交互 2. 交互對節點的“看法”和自身信息; ![](https://img.kancloud.cn/49/dc/49dcd38f65e4909a94af6784da54fba9_2188x1526.png) 3. 每1秒每個sentinel對其他sentinel和redis執行ping; 1. 心跳檢測,失敗判定依據; ![](https://img.kancloud.cn/f1/3e/f13ef48739a4777276823c0429d6ce0d_2040x1546.png) ## 主觀下線和客觀下線 主觀下線: 上面介紹的第三個定時任務(每隔一秒),當這些節點超過down-after-milliseconds(設置的有效回復時間)沒有進行有效的回復,Sentinel節點就會對該節點做失敗判定,這個行為叫做主觀下線 客觀下線: 當Sentinel主觀下線的節點是主節點時,該Sentinel節點會通過sentinel ismaster-down-by-addr命令向其他Sentinel節點詢問對主節點的判斷,當超過個數,Sentinel節點認為主節點確實有問題,這時該Sentinel節點會 做出客觀下線的決定 這樣客觀下線的含義是比較明顯了,也就是大部分Sentinel節點都對主節點的下線做了同意的判定,那么這個判定就是客觀的 當判定完客觀下線后是不是就可以進行故障轉移了?當然不是,實際上至于要一個sentinel節點來執行,所以要先進行領導者的選擇,由這個領導者來進行。 ## 領導者節點的選舉 Redis使用了Raft算法實 現領導者選舉,因為Raft算法相對比較抽象和復雜,以及篇幅所限,所以這里給出一個Redis Sentinel進行領導者選舉的大致思路: 1)每個在線的Sentinel節點都有資格成為領導者,當它確認主節點主觀下線時候,會向其他Sentinel節點發送sentinel is-master-down-by-addr命令, 要求將自己設置為領導者 2)收到命令的Sentinel節點,如果沒有同意過其他Sentinel節點的sentinel is-master-down-by-addr命令,將同意該請求,否則拒絕 3)如果該Sentinel節點發現自己的票數已經大于等于max(quorum, num(sentinels)/2+1),那么它將成為領導者; 如下圖的2就是通過((節點數/2) + 1)計算獲得(意思就是大于半數+1的節點同意); 所以sentinel的節點數最好是一個奇數(3,5,7); ![](https://img.kancloud.cn/49/57/495784acb6739720abde3b350550b55d_1974x170.png) 4)如果此過程沒有選舉出領導者,將進入下一次選舉 選舉的過程非常快,基本上誰先完成客觀下線,誰就是領導者 其實這個過程就是一個投票的過程,sentinel中先完成客觀下線的就向其他sentinel節點詢問是否同意自己當領導,假如票數大于一半,自己將成為領導者,如果沒有足夠的票數,就重新進行選舉; ![](https://img.kancloud.cn/80/f7/80f76aef40dfd2c56e8c664f52983e1d_2698x1458.png) ## 故障轉移(sentinel領導者節點完成) 故障轉移就是當master宕機,選擇一個合適的slave節點來升級為master節點的操作,sentinel會自動完成這個,不需要手動實現; 具體步驟: 1)在從節點列表中選出一個節點作為新的主節點,選擇方法如下: * a)過濾:“不健康”(主觀下線、斷線)、5秒內沒有回復過Sentinel節 點ping響應、與主節點失聯超過down-after-milliseconds\*10秒 * b)選擇slave-priority(從節點優先級)最高的從節點列表,如果存在則返回,不存在則繼續;(默認不配置的) * c)選擇復制偏移量最大的從節點(復制的最完整),如果存在則返回,不存在則繼續 * d)選擇runid最小的從節點 2)Sentinel領導者節點會對第一步選出來的從節點執行slaveof no one命令讓其成為主節點 3)Sentinel領導者節點會向剩余的從節點發送命令,讓它們成為新主節點的從節點,復制規則和parallel-syncs參數有關 4)Sentinel節點集合會將原來的主節點更新為從節點,并保持著對其關注,當其恢復后命令它去復制新的主節點; ![](https://img.kancloud.cn/48/d4/48d4606b68f6ce778666b0727b4438ef_546x828.png)
                  <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>

                              哎呀哎呀视频在线观看