<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redis 官方的高可用性解決方案

          共 5052字,需瀏覽 11分鐘

           ·

          2021-03-11 00:18


          -     Redis 主從復(fù)制的問(wèn)題     -


          Redis 主從復(fù)制可將主節(jié)點(diǎn)數(shù)據(jù)同步給從節(jié)點(diǎn),從節(jié)點(diǎn)此時(shí)有兩個(gè)作用:

          1. 一旦主節(jié)點(diǎn)宕機(jī),從節(jié)點(diǎn)作為主節(jié)點(diǎn)的備份可以隨時(shí)頂上來(lái)。
          2. 擴(kuò)展主節(jié)點(diǎn)的讀能力,分擔(dān)主節(jié)點(diǎn)讀壓力。

          主從復(fù)制同時(shí)存在以下幾個(gè)問(wèn)題:
          1. 一旦主節(jié)點(diǎn)宕機(jī)從節(jié)點(diǎn)晉升成主節(jié)點(diǎn),同時(shí)需要修改應(yīng)用方節(jié)點(diǎn)地址,還需要命令所有從節(jié)點(diǎn)復(fù)制新的主節(jié)點(diǎn),整個(gè)過(guò)程需要人工干預(yù)
          2. 主節(jié)點(diǎn)寫能力受到單機(jī)的限制。
          3. 主節(jié)點(diǎn)存儲(chǔ)能力受到單機(jī)的限制。
          4. 原生復(fù)制的弊端在早期的版本中也會(huì)比較突出,比如:Redis 復(fù)制中斷后,從節(jié)點(diǎn)會(huì)發(fā)起 psync。此時(shí)如果同步不成功,則會(huì)進(jìn)行全量同步,主庫(kù) 執(zhí)行 全量備份 的同時(shí),可能會(huì)造成毫秒或秒級(jí)的卡頓



          -     Redis 的哨兵(Sentinel)深入探究     -


          Redis Sentinel 的架構(gòu):

          Redis的哨兵機(jī)制就是解決我們以上主從復(fù)制存在缺陷(選舉問(wèn)題),保證我們的Redis高可用,實(shí)現(xiàn)自動(dòng)化故障發(fā)現(xiàn)與故障轉(zhuǎn)移。

          該系統(tǒng)執(zhí)行以下三個(gè)任務(wù):

          監(jiān)控:哨兵會(huì)不斷檢查你的主服務(wù)器和從服務(wù)器是否運(yùn)作正常。

          提醒:當(dāng)被監(jiān)控的某個(gè)Redis服務(wù)器出現(xiàn)問(wèn)題時(shí),哨兵可以通過(guò)API給程序員發(fā)送通知動(dòng)故障轉(zhuǎn)移:主服務(wù)器宕機(jī),哨兵會(huì)開始一次自動(dòng)故障轉(zhuǎn)移操作,升級(jí)一個(gè)從服務(wù)器為主服務(wù)器,并讓其他從服務(wù)器改為復(fù)制新的主服務(wù)器。



          -     配置 Sentinel     -


          Redis 源碼中包含了一個(gè)名為 sentinel.conf 的文件, 這個(gè)文件是一個(gè)帶有詳細(xì)注釋的 Sentinel 配置文件示例。

          1)sentinel monitor mymaster 192.168.10.202 6379 2

          Sentine監(jiān)聽的maste地址,第一個(gè)參數(shù)是給master起的名字,第二個(gè)參數(shù)為master IP,第三個(gè)為master端口,第四個(gè)為當(dāng)該master掛了的時(shí)候,若想將該master判為失效,
          在Sentine集群中必須至少2個(gè)Sentine同意才行,只要該數(shù)量不達(dá)標(biāo),則就不會(huì)發(fā)生故障遷移。
          -----------------------------------------------------------------------------------------------

          2)sentinel down-after-milliseconds mymaster 30000

          表示master被當(dāng)前sentinel實(shí)例認(rèn)定為失效的間隔時(shí)間,在這段時(shí)間內(nèi)一直沒有給Sentine返回有效信息,則認(rèn)定該master主觀下線。
          只有在足夠數(shù)量的 Sentinel 都將一個(gè)服務(wù)器標(biāo)記為主觀下線之后, 服務(wù)器才會(huì)被標(biāo)記為客觀下線,``將服務(wù)器標(biāo)記為客觀下線所需的 Sentinel 數(shù)量由對(duì)主服務(wù)器的配置決定。
          -----------------------------------------------------------------------------------------------

          3)sentinel parallel-syncs mymaster 2

          當(dāng)在執(zhí)行故障轉(zhuǎn)移時(shí),設(shè)置幾個(gè)slave同時(shí)進(jìn)行切換master,該值越大,則可能就有越多的slave在切換master時(shí)不可用,可以將該值設(shè)置為1,即一個(gè)一個(gè)來(lái),這樣在某個(gè)
          slave進(jìn)行切換master同步數(shù)據(jù)時(shí),其余的slave還能正常工作,以此保證每次只有一個(gè)從服務(wù)器處于不能處理命令請(qǐng)求的狀態(tài)。
          -----------------------------------------------------------------------------------------------

          4)sentinel can-failover mymaster ``yes

          在sentinel檢測(cè)到O_DOWN后,是否對(duì)這臺(tái)redis啟動(dòng)failover機(jī)制
          -----------------------------------------------------------------------------------------------

          5)sentinel auth-pass mymaster 20180408

          設(shè)置sentinel連接的master和slave的密碼,這個(gè)需要和redis.conf文件中設(shè)置的密碼一樣
          -----------------------------------------------------------------------------------------------

          6)sentinel failover-timeout mymaster 180000

          failover過(guò)期時(shí)間,當(dāng)failover開始后,在此時(shí)間內(nèi)仍然沒有觸發(fā)任何failover操作,當(dāng)前sentinel將會(huì)認(rèn)為此次failoer失敗。 
          執(zhí)行故障遷移超時(shí)時(shí)間,即在指定時(shí)間內(nèi)沒有大多數(shù)的sentinel 反饋master下線,該故障遷移計(jì)劃則失效
          -----------------------------------------------------------------------------------------------

          7)sentinel config-epoch mymaster 0

          選項(xiàng)指定了在執(zhí)行故障轉(zhuǎn)移時(shí), 最多可以有多少個(gè)從服務(wù)器同時(shí)對(duì)新的主服務(wù)器進(jìn)行同步。這個(gè)數(shù)字越小, 完成故障轉(zhuǎn)移所需的時(shí)間就越長(zhǎng)。
          -----------------------------------------------------------------------------------------------

          8)sentinel notification-script mymaster ``/var/redis/notify``.sh

          當(dāng)failover時(shí),可以指定一個(gè)``"通知"``腳本用來(lái)告知當(dāng)前集群的情況。
          腳本被允許執(zhí)行的最大時(shí)間為60秒,如果超時(shí),腳本將會(huì)被終止(KILL)
          -----------------------------------------------------------------------------------------------

          9)sentinel leader-epoch mymaster 0

          同時(shí)一時(shí)間最多0個(gè)slave可同時(shí)更新配置,建議數(shù)字不要太大,以免影響正常對(duì)外提供服務(wù)。

          主觀下線和客觀下線

          • 主觀下線:指的是單個(gè) Sentinel 實(shí)例對(duì)服務(wù)器做出的下線判斷。
          • 客觀下線:指的是多個(gè) Sentinel 實(shí)例在對(duì)同一個(gè)服務(wù)器做出 SDOWN主觀下線 判斷。



          -     Redis Sentinel 的工作原理     -


          1.每個(gè) Sentinel 以每秒一次的頻率向它所知的主服務(wù)器、從服務(wù)器以及其他 Sentinel 實(shí)例發(fā)送一個(gè) PING 命令。

          2.如果一個(gè)實(shí)例距離最后一次有效回復(fù) PING 命令的時(shí)間超過(guò)指定的值, 那么這個(gè)實(shí)例會(huì)被 Sentinel 標(biāo)記為主觀下線

          3.正在監(jiān)視這個(gè)主服務(wù)器的所有 Sentinel 要以每秒一次的頻率確認(rèn)主服務(wù)器的確進(jìn)入了主觀下線狀態(tài)。

          4.有足夠數(shù)量的 Sentinel 在指定的時(shí)間范圍內(nèi)同意這一判斷, 那么這個(gè)主服務(wù)器被標(biāo)記為客觀下線。
          5.每個(gè) Sentinel 會(huì)以每 10 秒一次的頻率向它已知的所有主服務(wù)器和從服務(wù)器發(fā)送 INFO 命令。當(dāng)一個(gè)主服務(wù)器被 Sentinel 標(biāo)記為客觀下線時(shí), Sentinel 向下線主服務(wù)器的所有從服務(wù)器發(fā)送 INFO 命令的頻率會(huì)從 10 秒一次改為每秒一次。
          6.Sentinel 和其他 Sentinel 協(xié)商 主節(jié)點(diǎn) 的狀態(tài),如果 主節(jié)點(diǎn) 處于 SDOWN 狀態(tài),則投票自動(dòng)選出新的 主節(jié)點(diǎn)。將剩余的 從節(jié)點(diǎn) 指向 新的主節(jié)點(diǎn) 進(jìn)行 數(shù)據(jù)復(fù)制。

          7.當(dāng)沒有足夠數(shù)量的 Sentinel 同意 主服務(wù)器 下線時(shí), 主服務(wù)器 的 客觀下線狀態(tài) 就會(huì)被移除。當(dāng) 主服務(wù)器 重新向 Sentinel 的 PING 命令返回 有效回復(fù) 時(shí),主服務(wù)器 的 主觀下線狀態(tài) 就會(huì)被移除。





          -     自動(dòng)發(fā)現(xiàn) Sentinel 和從服務(wù)器     -


          一個(gè) Sentinel 可以與其他多個(gè) Sentinel 進(jìn)行連接, 各個(gè) Sentinel 之間可以互相檢查對(duì)方的可用性, 并進(jìn)行信息交換。

          你無(wú)須為運(yùn)行的每個(gè) Sentinel 分別設(shè)置其他 Sentinel 的地址, 因?yàn)?Sentinel 可以通過(guò)發(fā)布與訂閱功能來(lái)自動(dòng)發(fā)現(xiàn)正在監(jiān)視相同主服務(wù)器的其他 Sentinel

          • 每個(gè) Sentinel 會(huì)以每?jī)擅胍淮蔚念l率, 通過(guò)發(fā)布與訂閱功能, 向被它監(jiān)視的所有主服務(wù)器和從服務(wù)器的頻道發(fā)送一條信息, 信息中包含了 Sentinel 的 IP 地址、端口號(hào)和運(yùn)行 ID (runid)。
          • 每個(gè) Sentinel 都訂閱了被它監(jiān)視的所有主服務(wù)器和從服務(wù)器的頻道, 查找之前未出現(xiàn)過(guò)的 sentinel 。當(dāng)一個(gè) Sentinel 發(fā)現(xiàn)一個(gè)新的 Sentinel 時(shí), 它會(huì)將新的 Sentinel 添加到一個(gè)列表中。
          • Sentinel 發(fā)送的信息中還包括完整的主服務(wù)器當(dāng)前配置。如果一個(gè) Sentinel 包含的主服務(wù)器配置比另一個(gè) Sentinel 發(fā)送的配置要舊, 那么這個(gè) Sentinel 會(huì)立即升級(jí)到新配置上。
          • 在將一個(gè)新 Sentinel 添加到監(jiān)視主服務(wù)器的列表上面之前, Sentinel 會(huì)先檢查列表中是否已經(jīng)包含了和要添加的 Sentinel 擁有相同運(yùn)行 ID 或者相同地址(包括 IP 地址和端口號(hào))的 Sentinel , 如果是的話, Sentinel 會(huì)先移除列表中已有的那些擁有相同運(yùn)行 ID 或者相同地址的 Sentinel , 然后再添加新 Sentinel。



          -     故障轉(zhuǎn)移     -


          一次故障轉(zhuǎn)移操作由以下步驟組成:

          • 發(fā)現(xiàn)主服務(wù)器已經(jīng)進(jìn)入客觀下線狀態(tài)。
          • 對(duì)我們的當(dāng)前紀(jì)元進(jìn)行自增, 并嘗試在這個(gè)紀(jì)元中當(dāng)選。
          • 如果當(dāng)選失敗, 那么在設(shè)定的故障遷移超時(shí)時(shí)間的兩倍之后, 重新嘗試當(dāng)選。如果當(dāng)選成功, 那么執(zhí)行以下步驟。
          • 選出一個(gè)從服務(wù)器,并將它升級(jí)為主服務(wù)器。
          • 向被選中的從服務(wù)器發(fā)送 SLAVEOF NO ONE 命令,讓它轉(zhuǎn)變?yōu)橹鞣?wù)器。
          • 通過(guò)發(fā)布與訂閱功能, 將更新后的配置傳播給所有其他 Sentinel , 其他 Sentinel 對(duì)它們自己的配置進(jìn)行更新。
          • 向已下線主服務(wù)器的從服務(wù)器發(fā)送 SLAVEOF 命令, 讓它們?nèi)?fù)制新的主服務(wù)器。
          • 當(dāng)所有從服務(wù)器都已經(jīng)開始復(fù)制新的主服務(wù)器時(shí), 領(lǐng)頭 Sentinel 終止這次故障遷移操作。


          參考:
          https://redis.io/
          https://www.cnblogs.com/bingshu/p/9776610.html

          作者:須臾之余

          來(lái)源:

          https://my.oschina.net/u/3995125/blog/3133204


           



          -   關(guān)注“架構(gòu)之美”   -

          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人做爰黄级A片免费看土方 | 无码人妻一区二区一牛影视 | 欧美天天干 | 7799视频 | 色开心五月天 |