Redis 的集群

深入理解 Redis 的集群模式與高可用機制

Redis 是一款廣泛應用于高性能緩存與存儲系統的 NoSQL 數據庫。隨著業務的發展,如何提升 Redis 的高可用性和水平擴展能力成為架構設計的關鍵。本篇博客將系統講解 Redis 的不同集群模式及其高可用策略,深入剖析其故障恢復機制與主從選舉規則。


一、Redis 的四種主要部署模式

1. 單機模式(Standalone)

  • 所有數據集中存儲在一個 Redis 實例中。

  • 簡單、快速、適合測試或小型系統。

  • 缺點:沒有容災能力,單點故障嚴重。

2. 主從復制模式(Master-Slave)

  • 一個主節點(Master)提供讀寫,多個從節點(Slave)復制主節點的數據,僅提供讀。

  • 支持讀寫分離,從節點可緩解主節點壓力。

  • 缺點:主節點掛掉后需人工切換,沒有自動恢復能力。

3. Sentinel 哨兵模式

  • 在主從復制基礎上,增加 Sentinel 守護進程,負責監控主從狀態并實現主從自動切換。

  • 自動故障轉移,無需人工干預。

  • 高可用但不支持數據分片,適合中小型系統。

4. Redis Cluster 模式

  • Redis 官方提供的分布式架構,支持數據自動分片與高可用。

  • 每個主節點負責部分數據(slot),并配有一個或多個從節點。

  • 集群自動處理主從故障轉移,具備真正的彈性擴展能力。


二、Sentinel 模式中的部署與容災原理

1. Sentinel 是什么?

  • 是 Redis 提供的高可用組件,獨立運行的進程,不是 Redis 實例本身。

  • 負責監控主從節點、判斷故障、發起主從切換。

2. Sentinel 可以部署在哪?

  • 可以部署在任意能訪問 Redis 的服務器上

  • 推薦部署在:

    • 與從節點同機(節省資源)

    • 獨立服務器上(高可用性強)

  • 不推薦部署在主節點上:主節點宕機,Sentinel 也失效。

3. 最小部署建議

  • 至少 3 個 Sentinel 節點,確保有法定票數判斷主節點狀態。

  • 推薦架構:

    • 1 主 + 2 從 + 3 Sentinel(可與從節點共用機器)


三、Redis Cluster 模式的高可用機制

Redis Cluster 在設計上具備原生的分布式高可用能力,主要包括以下幾個方面:

1. 主從架構

  • 每個主節點對應一個或多個從節點,用于備份數據、提升可用性。

2. 節點間 Gossip 協議

  • 所有節點定時互發心跳包(PING/PONG),檢測對方存活狀態。

  • 若某主節點被多數節點判斷失聯,則標記為 FAIL

3. 自動 Failover 機制

當主節點宕機時,其從節點會自動參與“競選”成為新的主節點,流程如下:

晉升規則(從節點選主):
  1. 優先看 slave-priority 配置(默認值越小越優先;為 0 表示不參與選主)。

  2. 再比較復制偏移量 offset,越大說明同步越完整,優先級越高。

  3. 最后比較節點 ID,值較小的節點勝出(UUID)。

?? 選主需要多數主節點存活,Redis Cluster 遵循 “超過半數” 原則防止腦裂。


四、如果主節點和它的所有從節點都宕機了怎么辦?

情況說明:

  • 某個主節點及其所有從節點都掛了。

后果:

  • 對應的數據分片(slot)將不可訪問。

  • Redis Cluster 不會將這些 slot 自動分配給其他主節點(為了數據一致性安全)。

  • 集群部分服務仍可用,但出現 cluster_slots_fail 狀態。

解決方案:

  1. 啟動一個新的 Redis 節點。

  2. 使用 redis-cli --cluster add-node 加入集群。

  3. 使用 setslotreshard 等命令重新分配 slot。

  4. 恢復備份數據(RDB/AOF)到新節點。

如何避免:

  • 為每個主節點配置 至少兩個從節點

  • 部署在不同物理機或網絡區域,增強容災能力。


五、小結與最佳實踐

模式是否高可用是否支持分片是否自動故障恢復適用場景
單機???測試、開發
主從?(部分)??(需手動)小型項目
Sentinel???中型項目,高可用需求
Cluster???大型分布式系統,數據量大

🔚 寫在最后

Redis 的集群模式提供了豐富的選擇,每種模式適合的場景和復雜度不同。在生產環境中,推薦使用 Redis Cluster 結合多個從節點部署,保障數據分片與故障恢復能力,并通過合理設置 slave-priority 和監控系統提升系統彈性。

如果你正在設計 Redis 架構,不妨從自身系統的可用性要求、數據規模、讀寫壓力等方面出發,選擇合適的集群模式,并做好部署與監控體系的建設。


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

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

相關文章

基于Dify平臺構建AI應用

2022年底openAI的chatgpt的出現,讓人們看到生成式AI的能力如此強大,引燃了生成式AI的一波浪潮。2025年春節前,DeepSeek的橫空出世讓大模型這個領域變得人人都可以參與進來,生成式AI大模型不再有非常高的顯卡的門檻,普通…

Python tikinter實現打開指定ip的電腦攝像頭

以下是一個使用Python的tkinter和OpenCV庫實現打開指定IP攝像頭的應用程序。這個程序允許用戶輸入IP攝像頭的URL,并實時顯示攝像頭畫面,同時支持截圖和錄制功能。 登錄后復制 import tkinter as tk from tkinter import ttk, messagebox, filedialog imp…

OpenCV插值方法詳解:原理、應用與代碼實踐

一、引言 在數字圖像處理中,插值是一種基本且重要的技術,它廣泛應用于圖像縮放、旋轉、幾何變換等場景。OpenCV作為最流行的計算機視覺庫之一,提供了多種插值方法供開發者選擇。本文將全面介紹OpenCV中的插值技術,包括各種方法的…

創客匠人解析:身心靈賽道創始人 IP 打造核心策略

在當代社會焦慮情緒蔓延的背景下,身心靈賽道正以萬億級市場規模成為知識變現的新藍海。作為知識變現領域的重要參與者,創客匠人通過服務超 5W 知識博主的實踐經驗,揭示了該賽道中創始人 IP 打造的底層邏輯 ——IP 不僅是形象符號&#xff0c…

Rust 和C++工業機器人實踐

Rust 調用Cursor案例 Cursor 的這些功能可以顯著提升開發效率,減少重復勞動,適合個人開發者和團隊協作使用。 讀取文件內容并處理 使用Cursor讀取文件內容并逐行處理: use std::io::{Cursor, BufRead};let data = "Line 1\nLine 2\nLine 3".as_bytes(); let c…

llama.cpp學習筆記:后端加載

單例 struct ggml_backend_registry {std::vector<ggml_backend_reg_entry> backends;std::vector<ggml_backend_dev_t> devices;// ... }struct ggml_backend_reg_entry {ggml_backend_reg_t reg;dl_handle_ptr handle; };typedef struct ggml_backend_reg * ggm…

Prompt工程標準化在多模型協同中的作用

&#x1f680; 在AI模型"群雄逐鹿"的時代&#xff0c;如何讓這些"AI武林高手"協同作戰&#xff1f;答案可能藏在一個看似平凡卻至關重要的概念中&#xff1a;Prompt工程標準化。 &#x1f4da; 文章目錄 引言&#xff1a;AI模型的"巴別塔"困境什…

Java面試寶典:基礎五

104. 源文件命名規則 題目:主類名為 a1,保存它的源文件可以是? 選項: A. a1.java B. a1.class C. a1 D. 都對 答案:A 解析: Java 源文件必須與公共類名完全匹配(區分大小寫),后綴為 .java。.class 是編譯后的字節碼文件,非源文件。105. Java類的本質 題目:Java類…

Pycaita二次開發基礎代碼解析:幾何特征統計、跨零件復制與發布技術的工業級實現

本文將從工業實踐角度深入剖析CATIA二次開發中的三項核心技術&#xff1a;幾何特征量化分析、跨零件特征遷移和產品對象發布。全文嚴格基于提供的類方法代碼展開解析&#xff0c;不做任何修改和補充。 一、幾何圖形集特征統計技術&#xff1a;設計復雜度的精確量化 方法功能解…

入門級STM32F103C8T6無人機(共兩張)

入門級STM32F103C8T6無人機&#xff08;原理圖其一&#xff09; 一、STM32F103C8T6 最小系統電路中各接口&#xff08;引腳&#xff09;的解釋及作用 一&#xff09;電源相關引腳 引腳名稱說明3.3V為芯片及部分外圍電路提供 3.3V 工作電源&#xff0c;保障芯片正常運行所需的電…

Git安裝全攻略:避坑指南與最佳實踐

1、系統環境檢查 確認操作系統版本&#xff08;Windows/macOS/Linux&#xff09;及位數&#xff08;32/64位&#xff09;檢查是否已安裝舊版Git&#xff0c;避免版本沖突確保系統環境變量配置權限 2、下載安裝包注意事項 官方下載地址推薦&#xff08;避免第三方鏡像源&…

AlpineLinux安裝部署MariaDB

簡單來說,MariaDB被視為MySQL的一個社區驅動的分支,它保留了MySQL的許多特性和功能,同時引入了一些新的特性和改進。許多用戶和組織選擇使用MariaDB,因為它提供了更多的自由度和對未來許可證變更的保護。而對于一些需要特定Oracle支持或特定MySQL功能的用例,依然使用MySQL…

SpringBoot醫療用品銷售網站源碼

概述 一個基于SpringBoot框架開發的醫療用品銷售網站完整項目源碼&#xff0c;包含用戶管理、商品展示、訂單處理等完整電商功能。該項目采用SpringBoot框架開發&#xff0c;代碼規范、結構清晰&#xff0c;非常適合二次開發或學習參考&#xff0c;幫助開發者快速搭建醫療用品…

使用CSS創建帶三角形指示器的氣泡框

在網頁設計中&#xff0c;氣泡框&#xff08;或工具提示&#xff09;是一種常見的UI元素&#xff0c;用于突出顯示信息或提供額外說明。本文將介紹如何使用純CSS創建一個簡單的氣泡框&#xff0c;并添加一個三角形指示器。 HTML結構 首先&#xff0c;我們有一個簡單的HTML結…

Java面試題031:一文深入了解MySQL(3)

Java面試題029&#xff1a;一文深入了解MySQL&#xff08;1&#xff09; Java面試題030&#xff1a;一文深入了解MySQL&#xff08;2&#xff09; 1、MySQL多表查詢 &#xff08;1&#xff09;內連接 inner join 返回兩個表中完全匹配的行&#xff0c;即只保留兩個表連接字段值…

springboot小區物業管理系統

目 錄 第一章 緒 論 1.1背景及意義 1 1.2國內外研究概況 2 1.3 研究的內容 2 第二章 關鍵技術的研究 2.1 相關技術 3 2.2 Java技術 3 2.3 MySQL數據庫 4 2.4 Tomcat介紹 4 2.5 Spring Boot框架 5 第三章 系統分析 3.1 系統設計目標 6 3.2 系統可行性分析 6 3.3 系統功能分析…

微信小程序云開發--環境共享

1、創建配置文件 // utils/cloudConfig.js // 云開發環境配置// 當前小程序配置 const currentConfig {env: "cloudbase-6goxxxxxxd6c75e0", // 當前小程序環境 IDappid: "wxdexxxxx5dbcf04", // 當前小程序 AppID };// 共享云開發環境配置 const shared…

SpringBoot+ShardingSphere-分庫分表教程(一)

日常使用數據庫的時候&#xff0c;更多的時間是在關心業務功能的實現&#xff0c;為了盡快完成新版本的發布上線&#xff0c;通常在項目初期不太會去在意數據庫的壓力和性能問題。在服務上線一段時間之后&#xff0c;就會發現當初設計存在著很多的不足&#xff0c;這都是項目研…

INA226 電流計 功率計電路圖轉PCB制作

上次發布了TI的INA226電路圖&#xff0c;今天抽了點時間&#xff0c;把電路圖生成了PCB。 帖出來&#xff0c;不足之處&#xff0c;請兄弟們留言指正。 沒什么問題就可以去嘉立創白嫖了。^_^

Vcpkg 經典模式完整遷移方案

&#x1f680; 從零開始&#xff1a;高效使用 Vcpkg 安裝 Qt WebEngine&#xff08;經典模式 緩存優化 性能釋放&#xff09; &#x1f9e9; 背景簡介 在使用 Vcpkg 安裝 Qt 系列庫時&#xff0c;特別是龐大的 qtwebengine 模塊&#xff0c;編譯量極大&#xff0c;耗時可達…