Redis Sentinel 詳解

Redis Sentinel 詳解

1. 什么是 Redis Sentinel?有什么用?

Redis Sentinel(哨兵) 是 Redis 官方提供的高可用性解決方案,主要用于監控、通知和自動故障轉移。當 Redis 主節點(master)發生故障時,Sentinel 能夠自動選舉新的 master,并通知客戶端以保證 Redis 集群的高可用性。

Redis Sentinel 主要提供以下功能:

  1. 監控(Monitoring): 定期檢查 Redis 主從(master-slave)實例的可用性。
  2. 通知(Notification): 當某個實例出現故障時,Sentinel 會向系統管理員或其他應用程序發送通知。
  3. 自動故障轉移(Automatic Failover): 發現主節點不可用后,自動從從節點(slave)中選舉新的 master,并讓其他 slave 重新復制新的 master。
  4. 配置管理(Configuration Provider): 客戶端可以連接 Sentinel,獲取當前可用的 Redis master 地址,減少手動維護的復雜度。

2. Sentinel 如何檢測節點是否下線?

Sentinel 通過定期發送 PING 命令檢測 Redis 節點的狀態:

  • 如果某個 Redis 節點長時間沒有響應 PING(超時),Sentinel 認為它可能下線,并標記為主觀下線(Subjectively Down,簡稱 SDOWN)
  • 如果多個 Sentinel 對該節點都判斷為主觀下線,并且達成一致意見,Sentinel 便標記其為客觀下線(Objectively Down,簡稱 ODOWN),然后進行故障轉移。
檢測機制

Sentinel 通過 sentinel.conf 配置文件中的 down-after-milliseconds 參數設置超時時間。例如:

sentinel down-after-milliseconds mymaster 5000

表示 Sentinel 如果 5 秒內未收到 PONG 響應,就認為該節點主觀下線(SDOWN)


3. 主觀下線(SDOWN)與客觀下線(ODOWN)的區別

  • 主觀下線(SDOWN,Subjectively Down)
    • 單個 Sentinel 認為某個 Redis 節點不可用,僅基于自己 PING 的響應情況得出結論。
    • 由于網絡問題,可能是 Sentinel 誤判,因此不會立即觸發故障轉移。
  • 客觀下線(ODOWN,Objectively Down)
    • 需要多個 Sentinel 經過投票一致認為某個 Redis 節點確實不可用,才會標記其為 ODOWN。
    • 只有當 Sentinel 認定 master 為 ODOWN 后,才會觸發故障轉移。

4. Sentinel 是如何實現故障轉移的?

當 Sentinel 發現 Redis 主節點 ODOWN 后,故障轉移(failover)流程如下:

  1. 選舉新的 master
    • Sentinel 選出一個可用的 slave 作為新的 master。
    • 其他 slave 重新配置,開始同步新的 master。
  2. 更新 Sentinel 配置
    • Sentinel 更新集群配置,并通知其他 Sentinel、客戶端新的 master 地址。
  3. 通知客戶端
    • 客戶端可以從 Sentinel 處獲取新的 master 地址,繼續正常工作。

5. 為什么建議部署多個 Sentinel 節點(哨兵集群)?

部署多個 Sentinel 主要是為了提高可靠性,避免單點故障,并增強故障轉移的準確性:

  1. 避免單點故障:單個 Sentinel 可能宕機,導致無法監測 Redis 狀態,因此需要多個 Sentinel 互相監控。
  2. 提高判斷準確性:多個 Sentinel 通過投票機制決定 master 是否真的 ODOWN,避免誤判(如網絡抖動)。
  3. 支持故障轉移:Sentinel 需要多個節點達成共識后才能執行 failover,以保證一致性。

一般建議至少部署 3 個 Sentinel,以保證投票機制能夠生效。


6. Sentinel 如何選擇出新的 master(選舉機制)?

當 Redis master 被判定 ODOWN 后,Sentinel 需要從 slave 里選出新的 master,遵循以下原則:

  1. 優先級(Priority):優先選擇 slave-priority 值最低的從節點(值越小,優先級越高)。
  2. 復制進度(Replication Offset):如果多個 slave 的優先級相同,則選擇數據同步最完整(復制偏移量最大的)slave。
  3. 運行時長(Run ID):如果前兩個條件仍然無法區分,Sentinel 選擇 runid 字典序最小的 slave。
  4. 可用性:確保 slave 可用,并且能夠成功被轉換為 master。

一旦選出新的 master,Sentinel 會執行 SLAVEOF NO ONE 命令,將其轉換為 master,并讓其他 slave 重新同步該 master。


7. 如何從 Sentinel 集群中選擇出 Leader?

當多個 Sentinel 發現 master ODOWN 后,需要選舉一個 Sentinel 作為Leader,負責執行故障轉移。Leader 選舉流程如下:

  1. Sentinel 通過 Raft 算法類似的 Leader 選舉機制 進行投票:
    • 每個 Sentinel 都可以提議自己為 Leader
    • 其他 Sentinel 如果尚未投票,可能會投票給它。
    • 如果某個 Sentinel 獲得超過一半的投票,它就被選為 Leader。
  2. Leader 負責執行故障轉移
    • 選舉出新的 master,并通知其他 Sentinel 進行更新。

如果 Leader 在 failover 過程中宕機,其他 Sentinel 會重新選舉新的 Leader,繼續執行 failover。


8. Sentinel 可以防止腦裂(Split-Brain)嗎?

部分情況下,Sentinel 機制可以緩解腦裂問題,但無法完全避免。例如:

  1. 避免單機多主(Multiple Masters)
    • Sentinel 通過投票機制,確保只有一個 master 存在,防止多個 Sentinel 誤判后產生多個 master。
  2. 可能的腦裂場景
    • 如果 master 因網絡分區短暫失聯,Sentinel 可能會選出新的 master,但原 master 仍在運行,導致出現兩個 master(腦裂)。
    • 解決方案:
      • 采用 min-slaves-to-writemin-slaves-max-lag 配置,確保 master 只有在足夠多 slave 連接時才允許寫入。
      • 使用 Redis Cluster,避免 Sentinel 方案中的潛在腦裂問題。

總結

問題關鍵點
Sentinel 作用監控 Redis 狀態,通知變更,執行故障轉移
主觀下線 vs 客觀下線SDOWN 由單個 Sentinel 認定,ODOWN 需要多個 Sentinel 認定
故障轉移流程發現 ODOWN → 選出新的 master → 更新配置并通知客戶端
Sentinel 集群優勢避免單點故障,提高可靠性,確保故障轉移準確性
新 master 選舉機制slave-priority、復制進度、運行時間長短等進行篩選
Sentinel Leader 選舉采用 Raft 類似算法,得票最多的 Sentinel 負責 failover
是否防止腦裂只能緩解,不能完全避免,推薦 Redis Cluster 方案

如果你的 Redis 需要高可用性,Sentinel 是一個不錯的選擇,但要謹慎處理腦裂問題網絡分區情況。

拓展閱讀

1. 什么是網絡分區(Network Partition)?

網絡分區(Network Partition) 指的是 由于網絡故障,導致集群中部分節點之間無法通信。網絡分區不會直接讓節點宕機,而是讓它們變成孤立的“孤島”,互相無法感知對方的狀態。

在 Redis Sentinel 方案中,網絡分區可能導致:

  • Sentinel 誤判 master 失聯,觸發故障轉移(但原 master 仍然運行)。
  • 多個 Sentinel 彼此之間無法溝通,導致 split-brain(腦裂)問題。

2. 什么是腦裂(Split-Brain)?

腦裂(Split-Brain) 指的是由于網絡分區,導致多個 master 節點并存,這會引發數據不一致、數據丟失等嚴重問題。

場景示例:

  1. 網絡分區發生
    • Redis 主節點(master)與大部分 Sentinel 失去聯系(但仍然存活)。
    • 這時,Sentinel 誤認為 master 已宕機,觸發故障轉移,選舉新的 master。
  2. 原 master 繼續提供服務
    • 由于原 master 仍然存活,客戶端可能仍然在寫入它的數據,而新的 master 也在接受寫入。
    • 這樣,就會產生兩個 master,各自接受不同的數據。
  3. 網絡恢復后
    • 原 master 重新連接 Sentinel,但 Sentinel 發現新的 master 已經存在。
    • 由于兩個 master 的數據不同,Redis 無法自動合并數據,可能導致部分數據丟失。

3. 腦裂發生后如何解決?

腦裂發生后,通常需要手動干預來恢復一致性。常見的解決方案包括:

方法 1:配置 slave 強制下線(min-slaves-to-write & min-slaves-max-lag)

在 Redis 主從架構中,可以通過 min-slaves-to-writemin-slaves-max-lag 參數確保 master 只在有足夠 slave 存活時才允許寫入:

min-slaves-to-write 1
min-slaves-max-lag 10
  • 作用:如果 master 發現自己沒有足夠的 slave,或者 slave 的同步滯后超過 10 秒,它就會拒絕寫入。
  • 效果:如果 master 因網絡分區變成孤立節點,它將自動進入只讀模式,避免腦裂。

方法 2:手動干預

如果腦裂已經發生,可以執行以下步驟:

  1. 檢測當前集群狀態

    • 運行 INFO replication 查看 master 和 slave 角色。
    • 運行 SENTINEL master <master-name> 檢查 Sentinel 認為的 master 是誰。
  2. 強制廢棄舊 master

    • 如果原 master 變成了孤立的 master(split-brain 發生),可以執行:

      redis-cli -h old-master -p 6379 SLAVEOF new-master-host new-master-port
      
    • 這樣,原 master 重新作為 slave,從新 master 同步數據。


方法 3:使用 Redis Cluster

Redis Sentinel 主要解決的是“高可用性”問題,但無法徹底解決腦裂問題
Redis Cluster 采用了Gossip 協議數據分片機制,能夠更好地防止腦裂:

  • 多數派寫入(Quorum Writes):只有當大多數節點存活時,Redis Cluster 才允許寫入。
  • 自動數據遷移:當某個 master 失聯后,集群會選舉新的 master,并重新分配數據。

因此,對于分布式環境(多數據中心),Redis Cluster 比 Sentinel 更能避免腦裂問題


4. 總結

問題解決方案
網絡分區導致的誤判通過 down-after-milliseconds 設置合理的 Sentinel 宕機超時時間
防止腦裂通過 min-slaves-to-write & min-slaves-max-lag 限制 master 行為
腦裂已發生重新配置舊 master 為新 master 的 slave,并讓它重新同步數據
最佳方案采用 Redis Cluster,利用多數派選舉防止 split-brain

Redis Sentinel 適用于小型架構,但如果要保證高可用性和一致性,Redis Cluster 更可靠。

Redis Sentinel 使用場景?

Redis Sentinel 僅適用于主從(Master-Slave)模式,不能用于 Redis Cluster。它的主要目的是監控主從架構中的 master 和 slave,自動進行故障轉移(failover),保證高可用性。


Sentinel 適用的 Redis 部署模式

? 主從(Master-Slave)模式

  • 主節點(master)負責讀寫,多個從節點(slave)負責讀取并復制主節點數據。
  • Sentinel 負責監控 master 是否存活,并在故障時將某個 slave 選舉為新的 master

? 哨兵模式(Sentinel Cluster)

  • 多個 Sentinel 組成哨兵集群,監控 Redis 主從實例,通過投票決定故障轉移。

Sentinel 不能用于哪些場景?

? Redis Cluster(分片集群模式)

  • Redis Cluster 本身已經支持高可用,采用數據分片和 Gossip 協議,不需要 Sentinel。
  • 在 Redis Cluster 中,節點間通過投票機制進行主節點選舉,而 Sentinel 不能管理 Cluster。

? 單機 Redis

  • 沒有 slave 的情況下,Sentinel 無法執行故障轉移,它的主要作用是監控主從結構。
  • 如果只有一個 Redis 實例(單點),可以考慮使用 Keepalived + VIP 來做高可用

如何選擇 Sentinel 還是 Redis Cluster?
特性Redis Sentinel(主從模式)Redis Cluster(分片模式)
數據分片? 不支持? 支持
自動故障轉移? 由 Sentinel 負責? 由 Cluster 本身負責
客戶端連接方式需通過 Sentinel 獲取 master直接連接 Redis Cluster
適用于場景讀多寫少,單機難以承受壓力高并發、大數據量、分片存儲
數據一致性只保證主從一致性,不防止腦裂采用多數派選舉,防止腦裂

結論
  • 如果你使用 Redis 主從模式 并希望實現高可用性,那么 Sentinel 是一個不錯的選擇
  • 如果你希望數據分片、擴展性更強,并且 不想依賴外部高可用組件,應該選擇 Redis Cluster

簡單理解
? 小型業務,主從讀多寫少 → 用 Sentinel
? 高并發、大規模數據 → 用 Redis Cluster

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

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

相關文章

AI日報 - 2025年3月25日

&#x1f31f; 今日概覽&#xff08;60秒速覽&#xff09; ▎&#x1f916; AGI突破 | Nebula&#xff08;Google Gemini 2.0 Pro&#xff09;破解復雜數學謎題 編碼與推理能力再上新臺階 ▎&#x1f4bc; 商業動向 | Sesame AI開源10億參數語音模型CSM-1B 語音AI進入普惠時代 …

AI醫療革命:英偉達GTC 2025醫療健康與生命科學會議全分析

AI醫療革命:英偉達GTC 2025醫療健康與生命科學會議全分析 一、GTC 2025:AI 醫療的算力與生態雙突破 1.1 黃仁勛演講核心:從訓練到推理的代際跨越 在科技界矚目的英偉達 GTC 2025 大會上,英偉達 CEO 黃仁勛的主題演講成為全場焦點,為 AI 醫療領域帶來了極具變革性的消息。…

【機器學習/大模型/八股文 面經 (一)】

1. PPO算法中使用GAE的好處以及參數γ和λ的作用是什么? 參考答案: GAE(Generalized Advantage Estimation) 的優勢在于通過指數加權多步TD誤差,平衡優勢估計的偏差與方差,提升策略優化的穩定性。γ(折扣因子):控制未來獎勵的衰減程度,值越大表示更關注長期收益。λ…

03 Python 基礎:數據類型、運算符與流程控制解析

文章目錄 一、數據類型 內置的六大類數字類型整數類型 int浮點數 float布爾 bool字符串 str 變量命名 二、數字類型的相互轉換顯式類型的轉換整數&#xff0c;浮點數&#xff0c;復數 之間的顯式轉換 隱式類型的轉換 三、標識符算術運算符比較運算符邏輯運算符位運算符賦值運算…

視頻知識庫初步設想

將視頻字幕提取出來作為知識庫來源定位,下一步設想:把視頻上的圖片信息也精簡出來作為定位。 下面是測試例子: 入參: {"model":"deepseek-ai/DeepSeek-R1-Distill-Llama-8B","messages":[{"role":"system","cont…

數據庫原理13

1.關系模式設計不當引起的問題&#xff1a;數據冗余&#xff1b;更新異常&#xff1b;插入異常&#xff1b;刪除異常 2.外碼可以是單個屬性&#xff0c;也可以是屬性組 3.動態SQL是SQL標準提供的一種語句運行機制 4.若一個模式分解保持函數依賴&#xff0c;則該分解一定具有…

初級:異常處理面試題深度解析

一、引言 在Java開發中&#xff0c;異常處理是確保程序健壯性和穩定性的重要機制。面試官通過相關問題考察候選人對異常處理的理解和運用能力&#xff0c;以及在實際開發中處理異常的經驗。本文將深入剖析常見的異常處理面試題&#xff0c;結合實際開發場景&#xff0c;幫助讀…

Apache Spark - 用于大規模數據分析的統一引擎

Apache Spark - 用于大規模數據分析的統一引擎 下載運行示例和 Shell使用 Spark Connect 在 Anywhere 上運行 Spark 客戶端應用程序 在集群上啟動從這里去哪里使用 Spark Shell 進行交互式分析基本有關數據集作的更多信息緩存 自包含應用程序從這里去哪里 Apache Spark 是用于大…

餐飲管理系統的設計與實現(代碼+數據庫+LW)

摘 要 互聯網發展至今&#xff0c;無論是其理論還是技術都已經成熟&#xff0c;而且它廣泛參與在社會中的方方面面。它讓信息都可以通過網絡傳播&#xff0c;搭配信息管理工具可以很好地為人們提供服務。針對信息管理混亂&#xff0c;出錯率高&#xff0c;信息安全性差&#…

【C#】Winform調用NModbus實現Modbus TCP 主站通訊

一、前言 Modbus是一種串行通信協議&#xff0c;是工業領域全球最流行的協議之一。 1.1 環境 系統&#xff1a;Win11 工具&#xff1a;Visual Studio 2022 .Net 版本&#xff1a;.Net Framework4.6.0 依賴庫&#xff1a;NModbus 3.0.81 1.2 協議類型 Modbus RTU&#xff1a;一…

【leetcode題解】貪心算法

目錄 貪心算法 檸檬水找零 將數組和減半的最少操作次數 最大數 擺動序列 最長遞增子序列 遞增的三元子序列 最長連續遞增序列 買賣股票的最佳時機 買賣股票的最佳時機 II K 次取反后最大化的數組和 按身高排序 優勢洗牌 最長回文串 增減字符串匹配 分發餅干 最…

Langchain4J框架相關面試題

以下是關于Langchain4J框架的面試題目及答案 ### Langchain4J基礎概念類 1. **Langchain4J框架是什么&#xff1f;它的核心功能有哪些&#xff1f;** Langchain4J是一個用于構建語言模型應用的Java框架&#xff0c;它為開發者提供了一套簡潔高效的API&#xff0c;使得在Jav…

Apache Doris

Apache Doris介紹 Apache Doris 是一個基于 MPP 架構的高性能、實時的分析型數據庫&#xff0c;以極速易用的特點被人們所熟知&#xff0c;僅需亞秒級響應時間即可返回海量數據下的查詢結果&#xff0c;不僅可以支持高并發的點查詢場景&#xff0c;也能支持高吞吐的復雜分析場…

VLAN間通信

目錄 第一步&#xff1a;配vlan 第二步&#xff1a;配置核心vlanif,MAC地址信息。 第三步&#xff1a;ospf協議 三層交換機&#xff08;匯聚層&#xff09;: 對于交換機、路由器、防火墻等網絡設備而言&#xff0c;接口類型一般存在兩種&#xff1a;二層接口&#xff0c;三…

LeetCode熱題100精講——Top2:字母異位詞分組【哈希】

你好&#xff0c;我是安然無虞。 文章目錄 題目背景字母異位詞分組C解法Python解法 題目背景 如果大家對于 哈希 類型的概念并不熟悉, 可以先看我之前為此專門寫的算法詳解: 藍橋杯算法競賽系列第九章巧解哈希題&#xff0c;用這3種數據類型足矣 字母異位詞分組 題目鏈接&am…

基于python+django的圖書借閱網站-圖書借閱管理系統源碼+運行步驟

該系統是基于pythondjango開發的在線圖書借閱管理系統。系統適合場景&#xff1a;大學生、課程作業、系統設計、畢業設計。 演示地址 前臺地址&#xff1a; http://book.gitapp.cn 后臺地址&#xff1a;http://book.gitapp.cn/#/admin 后臺管理帳號&#xff1a; 用戶名&…

uni-app集成保利威直播、點播SDK經驗FQ(二)|小程序直播/APP直播開發適用

通過uniapp集成保利威直播、點播SDK來開發小程序/APP的視頻直播能力&#xff0c;在實際開發中可能會遇到的疑問和解決方案&#xff0c;下篇。更多疑問請咨詢19924784795。 1.ios不能后臺掛起uniapp插件 ios端使用后臺音頻播放和畫中畫功能&#xff0c;沒有在 manifest.json 進…

數據庫三級填空+應用題(1)

填空 35【答案】TOP 3 WITH TIES 【解析】希望選出商品數量最多的前3類商品&#xff0c;并獲得相應的商品類別和數量。with ties一般是和Top 、 order by相結合使用,表示包括與最后一行order by后面的參數取值并列的結果。 36在SQL Server 2008中&#xff0c;每個數據頁可存儲8…

前端(vue)學習筆記(CLASS 5):自定義指令插槽路由

1、自定義指令 內置指令&#xff1a;內部提供的&#xff0c;每個指令都有自己各自獨立的功能 自定義指令&#xff1a;自己定義的指令&#xff0c;可以封裝一些dom操作&#xff0c;擴展額外功能 全局注冊-語法 例如&#xff0c;當頁面加載時&#xff0c;讓元素獲得焦點 Vue.…

【redis】事務詳解,相關命令multi、exec、discard 與 watch 的原理

文章目錄 什么是事務原子性一致性持久性隔離性 優勢與 MySQL 對比用處 事務相關命令開啟事務——MULTI執行事務——EXEC放棄當前事務——DISCARD監控某個 key——WATCH作用場景使用方法實現原理 事務總結 什么是事務 MySQL 事務&#xff1a; 原子性&#xff1a;把多個操作&am…