亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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 來(lái)執(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)無(wú)法連接時(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)文章

  • 全網(wǎng)最完整的Redis新手入門指導(dǎo)教程

    全網(wǎng)最完整的Redis新手入門指導(dǎo)教程

    這篇文章主要給大家介紹了Redis新手入門的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Linux服務(wù)器使用Redis作為數(shù)據(jù)緩存并用log4j2進(jìn)行日志記錄的過程分享

    Linux服務(wù)器使用Redis作為數(shù)據(jù)緩存并用log4j2進(jìn)行日志記錄的過程分享

    這篇文章主要介紹了Linux服務(wù)器使用Redis作為數(shù)據(jù)緩存并用log4j2日志記錄,關(guān)于SpringBoot項(xiàng)目配置Redis與log4j2是查詢官方文檔,本文中的Redis配置類、Redis工具類以及l(fā)og4j2.xml配置文件來(lái)自網(wǎng)絡(luò),查證源自何處比較麻煩,所以在此感謝所有人的分享
    2023-09-09
  • Redis主從復(fù)制的實(shí)現(xiàn)示例

    Redis主從復(fù)制的實(shí)現(xiàn)示例

    Redis主從復(fù)制實(shí)現(xiàn)多機(jī)備份,本文就來(lái)介紹一下Redis主從復(fù)制的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Redis?SCAN命令詳解

    Redis?SCAN命令詳解

    SCAN 命令是一個(gè)基于游標(biāo)的迭代器,每次被調(diào)用之后, 都會(huì)向用戶返回一個(gè)新的游標(biāo), 用戶在下次迭代時(shí)需要使用這個(gè)新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù), 以此來(lái)延續(xù)之前的迭代過程,這篇文章給大家介紹了Redis?SCAN命令的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2022-07-07
  • Redis數(shù)據(jù)庫(kù)的安裝和配置教程詳解

    Redis數(shù)據(jù)庫(kù)的安裝和配置教程詳解

    這篇文章主要介紹了Redis數(shù)據(jù)庫(kù)的安裝和配置?,主要包括Linux環(huán)境安裝Redis和windows環(huán)境安裝Redis,redis客戶端安裝方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Redis如何實(shí)現(xiàn)投票功能

    Redis如何實(shí)現(xiàn)投票功能

    這篇文章主要介紹了Redis如何實(shí)現(xiàn)投票功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • RedisDesktopManager遠(yuǎn)程連接redis的實(shí)現(xiàn)

    RedisDesktopManager遠(yuǎn)程連接redis的實(shí)現(xiàn)

    本文主要介紹了RedisDesktopManager遠(yuǎn)程連接redis的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 完美解決linux上啟動(dòng)redis后配置文件未生效的問題

    完美解決linux上啟動(dòng)redis后配置文件未生效的問題

    今天小編就為大家分享一篇完美解決linux上啟動(dòng)redis后配置文件未生效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-05-05
  • Redis中的單線程多線程解讀

    Redis中的單線程多線程解讀

    這篇文章主要介紹了Redis中的單線程多線程使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-08-08
  • springboot中redis并發(fā)鎖的等待時(shí)間設(shè)置長(zhǎng)短的方法

    springboot中redis并發(fā)鎖的等待時(shí)間設(shè)置長(zhǎng)短的方法

    在SpringBoot應(yīng)用中,Redis鎖的等待時(shí)間設(shè)置不當(dāng)可能導(dǎo)致資源浪費(fèi)、響應(yīng)時(shí)間增加、死鎖風(fēng)險(xiǎn)升高、系統(tǒng)負(fù)載增加、業(yè)務(wù)邏輯延遲以及故障恢復(fù)慢等問題,建議合理設(shè)置等待時(shí)間,并考慮使用其他分布式鎖實(shí)現(xiàn)方式提高性能
    2024-10-10

最新評(píng)論