Redis 高可用與集群原理

Redis 高可用與集群原理

在這里插入圖片描述

1. 前言

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

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

  • Sentinel 哨兵機制:如何發現故障、如何自動主從切換。
  • Cluster 集群架構:如何實現分片存儲與高可用。
  • Gossip 協議:節點間如何通信。
  • 故障轉移源碼剖析:Redis 內部實現流程。

2. Redis 高可用架構演進

  1. 主從復制(Replication)

    • 提供讀寫分離,但主節點宕機會導致服務中斷,需要人工干預。
  2. 哨兵(Sentinel)

    • 自動監控主節點健康,支持 自動故障轉移
  3. Cluster 集群

    • 支持 數據分片(水平擴展),并內置高可用。

👉 可以理解為:
復制 = 數據冗余
Sentinel = 自動運維
Cluster = 擴展能力 + 內置高可用


3. Sentinel 哨兵機制

3.1 Sentinel 的作用

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

3.2 故障檢測機制

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

3.3 Leader 選舉

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

  • 每個 Sentinel 給候選者投票。
  • 超過半數票數的 Sentinel 當選 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, "%@");}
}

這段代碼表明,當哨兵發現主節點無法連接時,會標記為 S_DOWN


4. Redis Cluster 集群架構

4.1 核心特性

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

4.2 集群拓撲

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

4.3 請求路由

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

5. Gossip 協議

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

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

消息類型:

  • MEET:新節點加入。
  • PING/PONG:心跳檢測與狀態同步。
  • FAIL:節點失效信息。

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


6. 故障轉移源碼剖析

當 Master 宕機時,Cluster 的轉移邏輯如下:

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

執行槽位遷移,客戶端可繼續訪問。

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

7. 總結

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

  1. Sentinel:實現了自動故障轉移,基于 SDOWN/ODOWN 和選舉機制。
  2. Cluster:通過哈希槽實現數據分片和自動轉移。
  3. Gossip 協議:支撐集群中節點間的通信和狀態同步。
  4. 源碼剖析:揭示了 Redis 在 sentinel.ccluster.c 中的故障轉移實現。

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/97746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/97746.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/97746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Oracle OCP認證考試題目詳解082系列第31題

考察知識點:SET VERIFY ON命令 英文題目 Which two statements are true about the SET VERIFY ON command? A.It displays values for variables prefixed with && B.It displays values for variables created by the DEFINE command C.It can be used in SQL Dev…

【WebSocket?】入門之旅(五):WebSocket 的安全性

本篇文章將講解 WebSocket 的安全性,特別是如何防止常見的 WebSocket 安全漏洞,如中間人攻擊(MITM)、XSS、CSRF 等。我們將介紹如何使用 wss:// 協議保障數據傳輸的安全,并給出一些安全最佳實踐,幫助你在使…

流程圖用什么工具做?免費/付費工具對比,附在線制作與下載教程

在日常工作和學習中,流程圖是一種高效的可視化工具——項目開發時梳理需求邏輯、業務推進中拆解步驟節點、學術研究里呈現論證框架,甚至是生活中規劃旅行路線,都能借助流程圖讓復雜信息變得清晰易懂。但面對市面上五花八門的流程圖工具&#…

Oracle重做日志(Redo Log):數據一致性的“守護者“

在Oracle數據庫的三大核心文件中,數據文件承載著最終的業務數據,控制文件記錄著數據庫的"身份檔案",而重做日志(Redo Log)則扮演著"事務日記"的關鍵角色——它以不可篡改的方式記錄每一次數據變更…

C++學習:map/set源碼剖析+利用紅黑樹封裝map/set

前面我們已經學習了紅黑樹這個高級數據結構的實現。我們知道STL的map/set的底層數據結構為紅黑樹,本期就查看STL源碼的map/set,并結合著這之前的紅黑樹的實現,模擬實現map和set的一部分功能 STL源碼:樓田莉子/CPP代碼學習 作者的個…

【c++進階系列】:map和set的模擬實現(附模擬實現的源碼)

🔥 本文專欄:c 🌸作者主頁:努力努力再努力wz 💪 今日博客勵志語錄:每一次抉擇,都是將未來的自己輕輕推向某個方向 ★★★ 本文前置知識: 紅黑樹 原理 那么在上一期博客中&#xf…

JVM默認棧大小

JVM 里線程棧的大小不是一個固定值,而是由 操作系統平臺、JVM 實現版本、以及啟動參數 共同決定的。 常見情況(以 HotSpot 為例): Linux / macOS 64 位 JVM 默認大約是 1M (1024 KB)32 位 JVM 默認大約是 3…

AI 機器視覺檢測方案:破解食物包裝四大質檢難題,筑牢食品安全防線

在食品生產領域,包裝盒或包裝袋作為食品的直接包裝載體,其質量優劣直接關系到食品安全與企業聲譽。傳統人工質檢在應對食物包裝生產的高速節奏與復雜質量問題時,逐漸暴露出諸多局限性,成為企業發展的瓶頸。而 AI 視頻檢測技術的出…

嵌入式 Linux 安全簡介-第二部分

大家好!我是大聰明-PLUS!這是有關嵌入式Linux安全性的文章的第二部分。在第一部分中,我們討論了一些安全概念、威脅建模、安全啟動、代碼和數據加密、加密密鑰和密鑰存儲技術。在第二部分中,讓我們繼續討論提高嵌入式 Linux 設備安…

Vue3+JS 復雜表單實戰:從驗證到性能優化的全流程方案

繼上一篇分享組合式 API Hook 封裝后,這次想聚焦前端開發中 “讓人又愛又恨” 的場景 —— 復雜表單。不管是管理后臺的配置表單,還是用戶中心的多步驟提交,表單處理都占了業務開發的 40% 以上。這篇文章會從實際項目痛點出發,分享…

[特殊字符] Python在CentOS系統執行深度指南

文章目錄1 Python環境安裝與配置問題1.1 系統自帶Python的限制1.2 安裝Python 3的常見問題及解決方案1.3 SSL模塊問題解決方案1.4 環境變量配置與管理1.5 軟件集合(SCL)替代方案2 包管理與虛擬環境問題2.1 pip包管理器問題與解決方案2.2 虛擬環境的最佳實…

ptx 簡介03,ldmatrix 的應用實例解析

1. 實例編譯 運行 main.cu //nvcc -g -lineinfo -stdc17 -archnative main.cu -o main#include <iostream> #include <thrust/device_vector.h>/* ldmatrix.sync.aligned.shape.num{.trans}{.ss}.type r, [p];.shape {.m8n8}; .num {.x1, .…

PostgreSQL 的核心優勢數據庫優化與面試問題解析

Part0: PostgreSQL 的核心優勢PostgreSQL 的核心優勢可以總結為&#xff1a;它不僅僅是一個關系型數據庫&#xff0c;更是一個功能極其強大、設計高度嚴謹、且具有無限擴展潛力的數據平臺。其核心優勢主要體現在以下幾個方面&#xff1a;1. 高度符合 SQL 標準與可靠性&#xff…

牛客周賽 Round 109 (小紅的直角三角形

小紅的直角三角形思路&#xff1a;當作向量來求&#xff0c;向量乘為0&#xff1b;#include<bits/stdc.h> #define ll long long #define endl "\n" using namespace std; typedef pair<ll, ll> pll; int n; vector<pll> u; void solve() {int x,…

efcore 對象內容相同 提交MSSQL后數據庫沒有更新

一、efcore 對象內容相同 提交MSSQL后數據庫沒有更新在.net6EFcore6環境&#xff0c;遇到一個問題&#xff0c;當界面UI傳給EF的對象值沒有變化&#xff0c;它居然不去更新數據庫。那我有2個EFcore實例都在更新數據庫&#xff0c;值一直不變&#xff0c;程序就更新不到數據庫中…

DockerComposeUI+cpolar:容器管理的遠程可視化方案

前言&#xff1a;DockerComposeUI作為Docker容器的可視化管理工具&#xff0c;通過直觀的Web界面實現容器的啟動、暫停、終止等操作&#xff0c;支持鏡像管理和Compose文件編輯。特別適合開發團隊和運維人員&#xff0c;其圖形化操作簡化了復雜的命令行操作&#xff0c;狀態面板…

H5 頁面與 Web 頁面的制作方法

1. H5 頁面制作使用 HTML5、CSS3 和 JavaScript 技術&#xff1a;這些技術支持創建交互式和響應式 H5 頁面。使用 H5 編輯器或框架&#xff1a;如 Adobe Dreamweaver、Brackets 或 Ionic&#xff0c;這些工具提供了預先構建的模板和組件&#xff0c;簡化了開發過程。考慮移動設…

1.6、機器學習-決策樹模型(金融實戰)

決策樹是一種基于特征分割的監督學習算法,通過遞歸分割數據空間來構建預測模型。 1.1、決策樹模型基本原理 決策樹思想的來源樸素,程序設計中的條件分支結構就是 if-then結構,最早的決策樹就是利用這類結構分割數據的一種分類學習方法。為了更好理解決策樹具體怎么分類的,…

常見中間件的同步算法、CAP 默認傾向及自定義支持情況

文章目錄CAP 概念1、比較2、關鍵說明&#xff1a;CAP 概念 CAP 定理指分布式系統無法同時滿足??一致性&#xff08;C??onsistency&#xff09;、??可用性&#xff08;??A??vailability&#xff09;、??分區容錯性&#xff08;??P??artition Tolerance&#xf…

Spring 中處理 HTTP 請求參數注解全解析

在 Spring 框架的 Web 開發中&#xff0c;處理 HTTP 請求參數是一項基礎且重要的工作。除了 PathVariable、RequestParam 和 Valid RequestBody 外&#xff0c;還有一些其他注解也用于此目的。本文將對這些注解進行全面的區分和解析&#xff0c;幫助開發者在實際項目中更準確地…