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

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

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

Redis 高可用與集群原理

1. 前言

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

這一篇文章我們重點(diǎn)拆解:

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

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

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

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

3. Sentinel 哨兵機(jī)制

3.1 Sentinel 的作用

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

3.2 故障檢測(cè)機(jī)制

  • 主觀下線(SDOWN):某個(gè) Sentinel 認(rèn)為 Master 不可達(dá)。
  • 客觀下線(ODOWN):多數(shù) Sentinel 達(dá)成共識(shí),確認(rèn) Master 宕機(jī)。

3.3 Leader 選舉

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

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

3.4 源碼剖析(sentinel.c)

哨兵檢測(cè)主觀下線:

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

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

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

4.1 核心特性

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

4.2 集群拓?fù)?/h4>
         ┌───────────┐
         │   Client  │
         └─────┬─────┘
               │
 ┌─────────────▼─────────────┐
 │        Cluster            │
 │ ┌────────┐   ┌────────┐   │
 │ │ Master │   │ Master │   │ ...
 │ │ Slot 0 │   │ Slot 5461  │
 │ └───▲────┘   └────▲───┘   │
 │     │            │         │
 │   ┌─┴─┐        ┌─┴─┐       │
 │   │Slave│      │Slave│     │
 │   └─────┘      └─────┘     │
 └────────────────────────────┘

4.3 請(qǐng)求路由

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

5. Gossip 協(xié)議

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

  • 每個(gè)節(jié)點(diǎn)周期性地向隨機(jī)節(jié)點(diǎn)發(fā)送 PING。
  • 接收節(jié)點(diǎn)返回 PONG,附帶自己已知的集群信息。
  • 這樣集群拓?fù)湫畔⒅饾u在所有節(jié)點(diǎn)中收斂。

消息類型:

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

?? Gossip 的特點(diǎn)是 去中心化、最終一致性。

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

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

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

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

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

7. 總結(jié)

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

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

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

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

相關(guān)文章

  • redis開啟和禁用登陸密碼校驗(yàn)的方法

    redis開啟和禁用登陸密碼校驗(yàn)的方法

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

    生產(chǎn)redisson延時(shí)隊(duì)列不消費(fèi)問題排查解決

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

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

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

    redis的持久化和緩存機(jī)制解讀

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

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

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

    Redis分布式鎖的超時(shí)問題及解決

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

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

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

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

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

    解析Redis的緩存類型

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

    Redis List列表的詳細(xì)介紹

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

最新評(píng)論

阳朔县| 原平市| 明溪县| 轮台县| 绍兴县| 滕州市| 天全县| 永仁县| 台山市| 江山市| 河东区| 察隅县| 贵州省| 五莲县| 哈巴河县| 新绛县| 黎川县| 福建省| 阿坝| 合阳县| 横峰县| 石家庄市| 丽江市| 宜宾县| 兴国县| 武清区| 罗山县| 延庆县| 巨野县| 台北县| 竹溪县| 盈江县| 衡水市| 北宁市| 集安市| 松阳县| 临武县| 辉县市| 万山特区| 全椒县| 大余县|