最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis 高可用與集群原理深度解析

 更新時間:2025年09月17日 11:55:51   作者:波波烤鴨  
Redis高可用機制涵蓋主從復(fù)制、哨兵自動故障轉(zhuǎn)移及Cluster集群分片與高可用,依賴Gossip協(xié)議實現(xiàn)節(jié)點通信與狀態(tài)同步,源碼解析了故障轉(zhuǎn)移流程,為后續(xù)持久化內(nèi)容奠定基礎(chǔ),本文給大家介紹Redis高可用與集群原理,感興趣的朋友跟隨小編一起看看吧

Redis 高可用與集群原理

1. 前言

Redis 單機雖然高性能,但一旦節(jié)點宕機,數(shù)據(jù)丟失或服務(wù)不可用問題會非常嚴重。為了解決這一問題,Redis 提供了主從復(fù)制、哨兵(Sentinel)、Cluster 集群 等高可用機制。

這一篇文章我們重點拆解:

  • Sentinel 哨兵機制:如何發(fā)現(xiàn)故障、如何自動主從切換。
  • Cluster 集群架構(gòu):如何實現(xiàn)分片存儲與高可用。
  • Gossip 協(xié)議:節(jié)點間如何通信。
  • 故障轉(zhuǎn)移源碼剖析:Redis 內(nèi)部實現(xiàn)流程。

2. Redis 高可用架構(gòu)演進

  • 主從復(fù)制(Replication)
    • 提供讀寫分離,但主節(jié)點宕機會導(dǎo)致服務(wù)中斷,需要人工干預(yù)。
  • 哨兵(Sentinel)
    • 自動監(jiān)控主節(jié)點健康,支持 自動故障轉(zhuǎn)移。
  • Cluster 集群
    • 支持 數(shù)據(jù)分片(水平擴展),并內(nèi)置高可用。

?? 可以理解為:
復(fù)制 = 數(shù)據(jù)冗余
Sentinel = 自動運維
Cluster = 擴展能力 + 內(nèi)置高可用

3. Sentinel 哨兵機制

3.1 Sentinel 的作用

  • 監(jiān)控(Monitoring):周期性檢測 Master 和 Slave 是否可達。
  • 通知(Notification):當(dāng)節(jié)點異常時,向客戶端/其他哨兵發(fā)送通知。
  • 故障轉(zhuǎn)移(Failover):自動將一個 Slave 提升為新的 Master,并讓其他 Slave 復(fù)制它。

3.2 故障檢測機制

  • 主觀下線(SDOWN):某個 Sentinel 認為 Master 不可達。
  • 客觀下線(ODOWN):多數(shù) Sentinel 達成共識,確認 Master 宕機。

3.3 Leader 選舉

在多個 Sentinel 中,需要選出一個 Leader 來執(zhí)行故障轉(zhuǎn)移,算法基于 Raft 的選舉思想

  • 每個 Sentinel 給候選者投票。
  • 超過半數(shù)票數(shù)的 Sentinel 當(dāng)選 Leader。

3.4 源碼剖析(sentinel.c)

哨兵檢測主觀下線:

// sentinel.c
if (mst->flags & SRI_MASTER) {
    if ((mst->flags & SRI_S_DOWN) == 0 && mst->link->disconnected) {
        mst->flags |= SRI_S_DOWN; // 標記主觀下線
        sentinelEvent(LL_WARNING, "+sdown", mst, "%@");
    }
}

這段代碼表明,當(dāng)哨兵發(fā)現(xiàn)主節(jié)點無法連接時,會標記為 S_DOWN。

4. Redis Cluster 集群架構(gòu)

4.1 核心特性

  • 分布式存儲:采用 16384 個哈希槽(hash slots),每個節(jié)點負責(zé)一部分槽位。
  • 高可用:每個分片至少有 1 個 Master 和若干 Slave。
  • 自動故障轉(zhuǎn)移:某個 Master 掛掉時,其 Slave 自動升級為新的 Master。

4.2 集群拓撲

         ┌───────────┐
         │   Client  │
         └─────┬─────┘
               │
 ┌─────────────▼─────────────┐
 │        Cluster            │
 │ ┌────────┐   ┌────────┐   │
 │ │ Master │   │ Master │   │ ...
 │ │ Slot 0 │   │ Slot 5461  │
 │ └───▲────┘   └────▲───┘   │
 │     │            │         │
 │   ┌─┴─┐        ┌─┴─┐       │
 │   │Slave│      │Slave│     │
 │   └─────┘      └─────┘     │
 └────────────────────────────┘

4.3 請求路由

  • Client 向某個節(jié)點發(fā)起請求。
  • 如果 Key 不在本節(jié)點的槽位范圍,返回 MOVED 重定向。
  • 客戶端更新槽位映射表,下次直連正確節(jié)點。

5. Gossip 協(xié)議

Redis Cluster 中節(jié)點通信依賴 Gossip 協(xié)議,類似于 流言傳播

  • 每個節(jié)點周期性地向隨機節(jié)點發(fā)送 PING。
  • 接收節(jié)點返回 PONG,附帶自己已知的集群信息。
  • 這樣集群拓撲信息逐漸在所有節(jié)點中收斂。

消息類型:

  • MEET:新節(jié)點加入。
  • PING/PONG:心跳檢測與狀態(tài)同步。
  • FAIL:節(jié)點失效信息。

?? Gossip 的特點是 去中心化、最終一致性。

6. 故障轉(zhuǎn)移源碼剖析

當(dāng) Master 宕機時,Cluster 的轉(zhuǎn)移邏輯如下:

  1. 檢測故障
// cluster.c
if (node->flags & (CLUSTER_NODE_FAIL | CLUSTER_NODE_PFAIL)) {
    // 標記為下線
}
  1. Slave 競選新 Master
  • 每個 Slave 會嘗試升級為 Master。
  • 使用投票機制,獲得過半節(jié)點支持的 Slave 升級。
  1. 重新分配槽位
// cluster.c
clusterFailoverReplaceYourMaster();

執(zhí)行槽位遷移,客戶端可繼續(xù)訪問。

  1. 客戶端感知
  • 客戶端收到 MOVED / ASK,刷新槽位映射。

7. 總結(jié)

本文深入分析了 Redis 高可用與集群原理:

  1. Sentinel:實現(xiàn)了自動故障轉(zhuǎn)移,基于 SDOWN/ODOWN 和選舉機制。
  2. Cluster:通過哈希槽實現(xiàn)數(shù)據(jù)分片和自動轉(zhuǎn)移。
  3. Gossip 協(xié)議:支撐集群中節(jié)點間的通信和狀態(tài)同步。
  4. 源碼剖析:揭示了 Redis 在 sentinel.c、cluster.c 中的故障轉(zhuǎn)移實現(xiàn)。

?? 下一步可以寫 Redis 持久化(RDB/AOF)與復(fù)制原理,這樣整個高可用 + 數(shù)據(jù)可靠性體系就完整了。

到此這篇關(guān)于Redis 高可用與集群原理深度解析的文章就介紹到這了,更多相關(guān)Redis 高可用集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis開啟和禁用登陸密碼校驗的方法

    redis開啟和禁用登陸密碼校驗的方法

    今天小編就為大家分享一篇redis開啟和禁用登陸密碼校驗的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 生產(chǎn)redisson延時隊列不消費問題排查解決

    生產(chǎn)redisson延時隊列不消費問題排查解決

    這篇文章主要為大家介紹了生產(chǎn)redisson延時隊列不消費問題排查解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Redis優(yōu)化經(jīng)驗總結(jié)(必看篇)

    Redis優(yōu)化經(jīng)驗總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄猂edis優(yōu)化經(jīng)驗總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • redis的持久化和緩存機制解讀

    redis的持久化和緩存機制解讀

    這篇文章主要介紹了redis的持久化和緩存機制,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 解決linux下redis數(shù)據(jù)庫overcommit_memory問題

    解決linux下redis數(shù)據(jù)庫overcommit_memory問題

    這篇文章介紹了解決linux下redis數(shù)據(jù)庫overcommit_memory問題的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Redis分布式鎖的超時問題及解決

    Redis分布式鎖的超時問題及解決

    這篇文章主要介紹了Redis分布式鎖的超時問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • redis+lua實現(xiàn)限流的項目實踐

    redis+lua實現(xiàn)限流的項目實踐

    redis有很多限流的算法(比如:令牌桶,計數(shù)器,時間窗口)等,在分布式里面進行限流的話,我們則可以使用redis+lua腳本進行限流,下面就來介紹一下redis+lua實現(xiàn)限流
    2023-10-10
  • 解決 Redis 數(shù)據(jù)傾斜、熱點等問題

    解決 Redis 數(shù)據(jù)傾斜、熱點等問題

    ?單臺機器的硬件配置有上限制約,一般我們會采用分布式架構(gòu)將多臺機器組成一個集群,這篇文章主要介紹了解決 Redis 數(shù)據(jù)傾斜、熱點等問題,需要的朋友可以參考下
    2022-12-12
  • 解析Redis的緩存類型

    解析Redis的緩存類型

    本文主要介紹了Redis的緩存類型,主要介紹了4種緩存,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Redis List列表的詳細介紹

    Redis List列表的詳細介紹

    這篇文章主要介紹了Redis List列表的詳細介紹的相關(guān)資料,Redis列表是簡單的字符串列表,按照插入順序排序,需要的朋友可以參考下
    2017-08-08

最新評論

双辽市| 重庆市| 额尔古纳市| 辉县市| 靖边县| 赤城县| 岳西县| 德州市| 政和县| 彭州市| 开平市| 烟台市| 平凉市| 丰宁| 南平市| 许昌县| 泰安市| 龙井市| 崇义县| 岳阳市| 和龙市| 玛多县| 高青县| 怀宁县| 普兰县| 江山市| 宁夏| 南汇区| 布尔津县| 环江| 中西区| 柘城县| 介休市| 宝应县| 沽源县| 安义县| 尼勒克县| 锡林浩特市| 墨脱县| 博野县| 敖汉旗|