Redis Sentinel 和 Redis Cluster 各自的原理、優缺點及適用場景是什么?

我們來詳細分析下 Redis Sentinel (哨兵) 和 Redis Cluster (集群) 這兩種方案的原理和使用場景。

Redis Sentinel (哨兵)

  • 原理:

    • Sentinel 本身是一個或一組獨立于 Redis 數據節點的進程。
    • 它的核心職責是監控一個 Redis 主從復制 (Master-Slave) 架構。
    • 多個 Sentinel 進程協同工作(通常部署奇數個,如 3 或 5 個,以形成法定人數),通過互相通信來達成共識。
    • 主要功能:
      1. 監控 (Monitoring): 持續檢查 Master 和 Slave 節點是否按預期工作(通過 PING 或 INFO 命令)。
      2. 通知 (Notification): 當被監控的節點出現問題時,可以通過 API 通知管理員。
      3. 自動故障轉移 (Automatic Failover): 當 Master 節點被判定為下線 (ODOWN - Objective Down,需多數 Sentinel 同意) 時,Sentinel 集群會選舉出一個 Leader Sentinel。Leader Sentinel 負責從在線的 Slave 節點中選出一個最合適的(基于優先級、復制偏移量等)提升為新的 Master,并命令其他 Slave 節點復制新的 Master。
      4. 配置提供者 (Configuration Provider): 客戶端連接 Sentinel 獲取當前 Master 節點的地址,而不是直接硬編碼 Master IP。當 Master 發生變化時,Sentinel 會通知客戶端。
  • 優點:

    • 實現高可用: 有效解決了 Redis 單 Master 節點的單點故障問題,提供了自動故障轉移能力。
    • 相對簡單: 相比 Redis Cluster,其概念和配置相對更容易理解和管理。
    • 客戶端兼容性好: 大多數成熟的 Redis 客戶端都支持 Sentinel 模式,客戶端邏輯相對簡單(只需連接 Sentinel 獲取 Master 地址)。
  • 缺點:

    • 不提供水平擴展能力: 數據仍然存儲在單個 Master 節點上。Master 節點的寫入性能、內存容量成為整個系統的瓶頸。讀可以通過 Slave 節點擴展,但寫能力受限。
    • 故障轉移有時間窗口: 從 Master 宕機到 Sentinel 檢測到并完成故障轉移,存在一個短暫的服務不可用窗口(通常是秒級)。
    • 資源開銷: 需要額外部署和維護 Sentinel 進程。
    • 寫操作瓶頸: 所有寫操作都必須經過 Master 節點。
  • 適用場景:

    • 需要高可用但數據量和 QPS 未達到單機瓶頸的場景: 單個 Redis 實例的性能足以滿足業務需求,但又不想看到 單節點(Master)故障。
    • 對水平擴展需求不高的場景: 主要是為了保障服務的連續性。
    • 運維復雜度相對較低的場景: 相比 Cluster,管理負擔較輕。

Redis Cluster (集群)

  • 原理:

    • Redis Cluster 是 Redis 官方提供的分布式解決方案,旨在同時提供高可用性水平擴展性 (分片 Sharding)
    • 數據分片: 數據被自動分割到多個節點(Master 節點)上。Cluster 使用哈希槽 (Hash Slot) 的概念,共有 16384 個槽。每個 Master 節點負責處理一部分哈希槽。客戶端請求的 Key 通過 CRC16 算法計算后對 16384 取模,決定該 Key 屬于哪個槽,進而確定由哪個 Master 節點處理。
    • 內置高可用: 每個 Master 節點可以擁有一個或多個 Slave 節點。當某個 Master 節點宕機時,其對應的 Slave 節點會自動提升為新的 Master,接管原來 Master 負責的哈希槽,保證該分片的服務連續性。這個過程由 Cluster 內部節點間的通信(Gossip 協議)和選舉完成,不需要 Sentinel
    • 去中心化架構: 節點間通過 Gossip 協議互相交換狀態信息,進行故障檢測和配置更新,沒有中心協調節點。
  • 優點:

    • 水平擴展能力: 可以通過增加 Master 節點來擴展集群的存儲容量和并發處理能力(讀和寫)。突破了單機性能和容量的限制。
    • 高可用性: 內置了基于主從復制的自動故障轉移機制,每個分片都有 HA 保障。
    • 分布式: 數據分散存儲,負載分散到多個節點。
  • 缺點:

    • 架構和運維更復雜: 需要理解哈希槽、Gossip 協議、節點管理等概念。部署、擴容、縮容、故障排查相對更復雜。
    • 客戶端要求更高: 客戶端需要使用支持 Redis Cluster 協議的庫,能夠理解和緩存哈希槽與節點的映射關系,并能處理節點重定向 (MOVED, ASK 錯誤)。
    • 不支持跨多 Slot 的原子操作: 涉及多個 Key 的命令(如 MSET, MGET, Lua 腳本, 事務)通常要求這些 Key 必須位于同一個哈希槽(即同一個 Master 節點)中,否則會報錯或需要特殊處理 (如通過 Hash Tag {} 控制 Key 的分布)。這限制了某些復雜操作的直接使用。
    • 資源開銷較大: 至少需要 3 個 Master 節點才能組成一個穩定的集群(官方建議至少 6 個節點,3 主 3 從,以保證每個 Master 都有備份)。
  • 適用場景:

    • 需要處理海量數據,單機內存無法容納的場景。
    • 需要極高 QPS,單機 CPU 或網絡成為瓶頸的場景。
    • 同時需要高可用和水平擴展能力的場景。
    • 能夠接受其運維復雜性和對客戶端、跨 Slot 操作限制的場景。

總結對比:

特性Redis SentinelRedis Cluster
主要目標高可用 (HA)高可用 (HA) + 水平擴展 (Sharding)
擴展性 (單 Master 瓶頸) (數據分片,讀寫均可擴展)
HA 機制外部 Sentinel 進程監控 + 自動 Failover內置節點間 Gossip + 自動 Failover
架構主從 + Sentinel 集群分布式多 Master (+ Slave) 節點
數據分布全部數據在一主多從數據分片到多個 Master 節點
運維復雜度相對較低相對較高
客戶端要求支持 Sentinel 協議支持 Cluster 協議 (需處理重定向)
跨 Slot 操作支持 (因為數據都在 Master)受限 (大部分要求 Key 在同一 Slot)
適用場景HA 需求 > 擴展性需求,數據量/QPS 適中HA 和擴展性需求并重,數據量/QPS 大

選擇建議:

  • 如果你的 Redis 數據量和訪問壓力不大,單個實例能扛住,主要目的是防止單點故障,那么 Redis Sentinel 是更簡單、更合適的選擇。
  • 如果你的數據量巨大,或者 QPS 非常高,單個 Redis 實例已經成為瓶頸,需要同時解決可用性和擴展性問題,那么應該選擇 Redis Cluster,并準備好應對其帶來的復雜性。

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

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

相關文章

基于機器學習的電影票房預測

目錄 摘 要(完整下載鏈接附在文末) Abstract 1 緒 論 1.1 研究背景概述 1.2 國內外相關領域研究進展 1.3 電影票房預測技術概覽 1.3.1 利用人口統計學特征的方法 1.3.2 基于機器學習的預測模型 2 機器學習相關理論介紹與分析 2.1 機器學習算法理論 2.1.1卷積…

SVMSPro平臺獲取HTTP-FLV規則

SVMSPro平臺獲取HTTP-FLV規則 HTTP-FLV的服務端口為:53372,如需要公網訪問需要開啟這個端口 這里講的是如何獲取長效URL,短效(時效性)URL也支持,下回講 一、如何獲取HTTP-FLV實時流視頻 http://host:po…

ARM架構的微控制器總線矩陣

在 ARM 架構的微控制器(MCU)中,總線矩陣(Bus Matrix) 是總線系統的核心互連結構,負責協調多個主設備(如 CPU、DMA、以太網控制器等)對多個從設備(如 Flash、SRAM、外設等…

AI賦能金融:智能投顧、風控與反欺詐的未來

AI賦能金融:智能投顧、風控與反欺詐的未來 系統化學習人工智能網站(收藏):https://www.captainbed.cn/flu 文章目錄 AI賦能金融:智能投顧、風控與反欺詐的未來摘要引言一、智能投顧:從經驗驅動到人機協同…

【機器學習】樸素貝葉斯

目錄 一、樸素貝葉斯的算法原理 1.1 定義 1.2 貝葉斯定理 1.3 條件獨立性假設 二、樸素貝葉斯算法的幾種常見類型 2.1 高斯樸素貝葉斯 (Gaussian Naive Bayes) 【訓練階段】 - 從數據中學習模型參數 【預測階段】 - 對新樣本 Xnew? 進行分類 2. 2 多項式樸素貝葉斯 (…

鴻蒙 ArkTS 組件 通用事件 通用屬性 速查表

ArkTS 組件 組件 通用事件 速查表 通用事件事件名稱簡要說明點擊事件onClick(event: Callback<ClickEvent>, distanceThreshold: number): T相較于原有 onClick 接口&#xff0c;新增 distanceThreshold 參數作為點擊事件移動閾值&#xff0c;當手指的移動距離超出所設…

Java云原生+quarkus

一、Java如何實現云原生應用&#xff1f; 傳統的 Java 框架&#xff08;如 Spring Boot&#xff09;雖然功能強大&#xff0c;但在云原生場景下可能顯得笨重。以下是一些更適合云原生的輕量級框架&#xff1a; Quarkus(推薦) 專為云原生和 Kubernetes 設計的 Java 框架。支持…

C語言教程(二十三):C 語言強制類型轉換詳解

一、強制類型轉換的概念 強制類型轉換是指在程序中手動將一個數據類型的值轉換為另一種數據類型。在某些情況下,編譯器可能不會自動進行類型轉換,或者自動轉換的結果不符合我們的預期,這時就需要使用強制類型轉換來明確指定要進行的類型轉換。 二、強制類型轉換的語法 強制類…

Spring Boot × K8s 監控實戰-集成 Prometheus 與 Grafana

在微服務架構中&#xff0c;應用的可觀測性至關重要。Kubernetes 已成為容器化部署的標準&#xff0c;但其自身的監控能力有限&#xff0c;需要與其他工具集成才能實現詳細的運行數據采集與分析。 本文將通過 Spring Boot Kubernetes Prometheus Grafana 實戰&#xff0c;打…

phpstudy修改Apache端口號

1. 修改Listen.conf文件 本地phpstudy安裝目錄&#xff1a; 2.其他問題 ① 修改httpd.conf不起作用 ② 直接通過控制面板配置好像有延遲緩存

(done) 吳恩達版提示詞工程 6. 轉換 (翻譯,通用翻譯,語氣風格變換,文本格式轉換,拼寫檢查和語法檢查)

視頻&#xff1a;https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 別人的筆記&#xff1a;https://zhuanlan.zhihu.com/p/626966526 6. 轉換任務&#xff08;Transforming&#xff0…

什么是靜態住宅ip,跨境電商為什么要用靜態住宅ip

在數字時代&#xff0c;IP地址不僅是設備聯網的“ID”&#xff0c;更是跨境電商運營中的關鍵工具。尤其對于需要長期穩定、安全操作的場景&#xff0c;靜態住宅IP逐漸成為行業首選。 一、什么是靜態住宅IP&#xff1f; 靜態住宅IP&#xff08;Static Residential IP&#xff0…

Qemu-STM32(十七):STM32F103加入AFIO控制器

概述 本文主要描述了在Qemu平臺中&#xff0c;如何添加STM32F103的AFIO控制器模擬代碼&#xff0c;AFIO是屬于GPIO引腳復用配置的功能。 參考資料 STM32F1XX TRM手冊&#xff0c;手冊編號&#xff1a;RM0008 添加步驟 1、在hw/arm/Kconfig文件中添加STM32F1XX_AFIO&#x…

QuecPython+audio:實現音頻的錄制與播放

概述 QuecPython 作為專為物聯網設計的開發框架&#xff0c;通過高度封裝的 Python 接口為嵌入式設備提供了完整的音頻處理能力。本文主要介紹如何利用 QuecPython 快速實現音頻功能的開發。 核心優勢 極簡開發&#xff1a;3行代碼完成基礎音頻錄制與播放。快速上手&#xf…

企業架構之旅(3):TOGAF ADM架構愿景的核心價值

一、引言&#xff1a;為什么架構愿景是企業架構的「導航圖」 在企業數字化轉型的浪潮中&#xff0c;TOGAF ADM&#xff08;架構開發方法&#xff09;作為公認的企業架構「方法論圣經」&#xff0c;其首個關鍵階段 —— 架構愿景&#xff08;Architecture Vision&#xff09;&a…

C++:Lambda表達式

C&#xff1a;Lambda表達式 C中lambda的基本語法1. 捕獲列表&#xff08;Capture List&#xff09;2. 示例代碼示例 1&#xff1a;簡單的lambda示例 2&#xff1a;捕獲變量示例 3&#xff1a;按引用捕獲示例 4&#xff1a;捕獲所有變量示例 5&#xff1a;作為函數參數 3. lambd…

被關在idea小黑屏里寫spark程序

一、先在idea中添加Scala插件 二、使用Maven創建新項目 1.啟動idea,選擇新建項目。之后的設置如下&#xff1a; 2.將Scala添加到全局庫中&#xff08;注意&#xff1a;Scala的版本不宜太高&#xff0c;最好是2-12.否則后面會報下面這個錯誤 E:\tool接口\SparkCore_01\src\mai…

自動化立庫/AGV物流仿真詳細步驟

以下是一種可以在預算和周期內實現自動化立庫及AGV 方案仿真分析的方法&#xff1a; 一、工具選擇 軟件工具FlexSim&#xff1a;這是一款流行的離散事件仿真軟件。它具有直觀的圖形用戶界面&#xff0c;通過簡單的拖拽操作就可以構建自動化立庫和 AGV 的模型。其內置的豐富的…

使用springboot+easyexcel實現導出excel并合并指定單元格

1&#xff1a;準備一個單元格合并策略類代碼&#xff1a; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.metadata.holder.Writ…

Python三大Web框架對比:Django、Flask、Tornado的異步實現方式詳解

目錄 引言 一、框架基礎概覽 1.1 Django 1.2 Flask 1.3 Tornado 二、異步編程基礎 2.1 同步 vs 異步 2.2 Python異步演進 三、框架異步實現對比 3.1 Django的異步進化 3.2 Flask的異步擴展 3.3 Tornado的異步范式 四、異步實現差異對比 4.1 實現機制對比 4.2 性…