Redis 高可用分片集群:主從模式與哨兵機制詳解

一、為何需要分片集群?

在討論具體方案之前,我們先明確分片集群要解決的問題:

  1. 單節點瓶頸:無論是內存容量還是處理能力(QPS),單個 Redis 實例都有物理上限。
  2. 高可用性需求:單點故障會導致整個服務中斷,這在生產環境中是不可接受的。
  3. 數據安全:需要備份機制防止數據丟失。

傳統的單機 Redis 或簡單的主從復制,雖然能解決部分問題(如讀擴展、數據備份),但無法突破單節點容量限制,也無法在主節點故障時實現完全自動的無感知切換。因此,分片集群應運而生。

二、Redis 分片集群:數據分攤與擴展基石

分片(Sharding)?是將數據集分割成多個部分,并將這些部分分布到集群中的多個節點上存儲的技術。Redis 的分片集群方案(如 Redis Cluster)正是基于此理念。

核心思想:

  1. 數據分片:將整個 Redis 鍵空間劃分為多個邏輯分區(在 Redis Cluster 中稱為哈希槽,共 16384 個)。每個哈希槽負責一部分鍵值對。
  2. 節點分布:將不同的哈希槽分配給集群中的不同 Redis 節點(主節點)負責。
  3. 數據路由:客戶端(或代理)根據鍵計算出它屬于哪個哈希槽,然后將請求發送給負責該哈希槽的節點。

工作方式:

  • 哈希算法:通常使用 CRC16 等哈希算法計算鍵的哈希值,然后對哈希槽數量取模,確定鍵屬于哪個槽。
    slot = CRC16(key) % 16384
  • 請求路由:客戶端(需要使用支持 Redis Cluster 協議的客戶端庫)根據計算出的槽位,將命令發送給對應的節點。
  • 自動遷移:當需要擴容或縮容時,Redis Cluster 可以自動在節點間遷移哈希槽,盡量減少對客戶端的影響。

分片集群的優勢:

  • 水平擴展:通過增加節點數量,可以線性提升集群的總存儲容量和處理能力。
  • 高可用基礎:為每個分片(主節點)配置從節點,構成了高可用的基礎。

三、主從模式:數據冗余與讀寫分離

主從模式(Master-Slave Replication)?是 Redis 實現數據冗余和高可用性的基礎機制。它本身不直接解決分片問題,但常與分片集群結合使用。

工作原理:

  1. 主節點(Master):負責處理寫請求,并將數據變更通過**復制(Replication)**機制同步到從節點。
  2. 從節點(Slave / Replica):從主節點同步數據,可以處理讀請求。一個主節點可以擁有多個從節點。

復制過程:

  • 全量復制:從節點向主節點發送復制請求,主節點將當前所有數據(RDB 快照)發送給從節點。
  • 增量復制:全量復制完成后,主節點將后續產生的所有寫操作(通過命令流)持續發送給從節點,從節點執行這些命令以保持數據同步。

主從模式的作用:

  1. 數據冗余與備份:從節點是主節點數據的副本,提供數據備份,防止主節點數據丟失。
  2. 讀寫分離:可以將讀請求分散到多個從節點,減輕主節點的壓力,提升整體吞吐量。寫操作仍需訪問主節點。
  3. 高可用基礎:當主節點故障時,可以從從節點中選舉一個作為新的主節點,實現服務的快速恢復(但這通常需要 Sentinel 或 Cluster 的介入來完成自動化切換)。

限制:

  • 不具備自動故障轉移能力:雖然從節點有數據,但默認情況下無法自動接管主節點的工作。需要人工干預或借助 Sentinel/Cluster。
  • 無法解決單節點容量瓶頸:所有寫操作都集中到主節點,主節點仍然是性能和容量的瓶頸。

四、哨兵機制:自動化主從切換與監控

哨兵(Sentinel)?機制在主從模式的基礎上,提供了自動化的監控、通知和故障轉移能力,是實現 Redis 高可用的關鍵組件。

核心功能:

  1. 監控(Monitoring):哨兵會持續監控主節點和從節點的健康狀態。
  2. 通知(Notification):當它發現某個節點故障或狀態變化時,可以通知配置的客戶端(如通過消息隊列、HTTP API 等)。
  3. 自動故障轉移(Automatic Failover):當主節點被判定為下線(客觀下線)時,哨兵會自動選擇一個從節點,將其提升為新的主節點,并讓其他從節點指向新的主節點。
  4. 配置提供者(Configuration Provider):在故障轉移完成后,哨兵可以為客戶端提供新的主節點地址,使客戶端能夠自動切換連接。

工作流程(以主節點故障為例):

  1. 主觀下線(SDOWN):單個哨兵發現主節點在指定時間內沒有響應,認為其主觀下線。
  2. 客觀下線(ODOWN):多個哨兵通過投票機制確認主節點確實下線(達到配置的 quorum 數)。
  3. 領導者選舉:在客觀下線的狀態下,哨兵集群會選舉出一個領導者哨兵,負責執行故障轉移。
  4. 故障轉移執行
    • 選擇一個從節點作為新的主節點(通常選擇優先級高、數據新、延遲低的從節點)。
    • 將選中的從節點提升為主節點(執行?SLAVEOF NO ONE)。
    • 通知其他從節點將?slaveof?指向新的主節點。
    • 通知客戶端新的主節點信息。

哨兵模式的優勢:

  • 自動化:大大減少了人工干預,實現了故障的快速自動恢復。
  • 高可用:確保了主從架構下的服務連續性。
  • 可擴展性:可以通過增加哨兵實例來提高監控的冗余度和可靠性。

哨兵模式的局限:

  • 不解決分片問題:哨兵本身不進行數據分片,它管理的仍然是一個邏輯上的整體 Redis 服務(盡管可能由多個主從節點組成)。
  • 寫性能瓶頸:所有寫操作仍然集中在一個主節點上。

五、分片集群 + 哨兵:完整的高可用方案

為了同時實現水平擴展高可用,最佳實踐是將 Redis 分片集群與哨兵機制結合使用。

架構示意:

復制

       +-----------------+       +-----------------+       +-----------------+|  Redis Node 1   |       |  Redis Node 2   |       |  Redis Node 3   ||  (Master)       |       |  (Master)       |       |  (Master)       |+-------+---------+       +-------+---------+       +-------+---------+|                      |                      ||                      |                      |+-------v---------+       +-------v---------+       +-------v---------+|  Redis Node 1a  |       |  Redis Node 2a  |       |  Redis Node 3a  ||  (Replica)      |       |  (Replica)      |       |  (Replica)      |+-----------------+       +-----------------+       +-----------------+|                      ||                      |+--------v--------+       +-------v---------+|  Redis Sentinel 1 |       |  Redis Sentinel 2 |+-------+--------+       +-------+--------+|                      ||                      |+-------v--------+       +-------v---------+|  Redis Sentinel 3 |       |  Redis Sentinel 4 |+-------------------+       +-----------------+

引用

工作方式:

  1. 分片:數據被分片到多個主節點(Node 1, Node 2, Node 3)上。
  2. 主從復制:每個主節點都配置一個或多個從節點(Node 1a, Node 2a, Node 3a),實現數據冗余和讀寫分離。
  3. 哨兵監控:哨兵集群監控所有主節點和從節點的健康狀態。
  4. 自動故障轉移:如果某個主節點(例如 Node 1)故障,哨兵會自動將它的一個從節點(Node 1a)提升為新的主節點,并更新其他從節點和客戶端的配置。這個過程對應用是透明的。

優勢:

  • 水平擴展:通過增加新的主從節點對,可以輕松擴展集群的容量和性能。
  • 高可用:每個分片都有哨兵監控,故障時能自動切換,確保整體服務不中斷。
  • 讀寫分離:可以在每個分片的主從節點上實現讀寫分離,提升性能。

六、總結

Redis 的高可用分片集群方案是現代分布式系統中處理大規模數據和高并發訪問的關鍵技術。理解其核心組件至關重要:

  • 分片集群:解決了單節點容量和性能瓶頸,實現了水平擴展。
  • 主從模式:提供了數據冗余和基礎的讀寫分離能力,是高可用架構的基礎。
  • 哨兵機制:在主從模式上增加了自動化監控和故障轉移能力,是實現高可用的關鍵保障。

將分片集群與哨兵機制結合,可以構建出既具備強大擴展能力,又能提供高可靠服務的 Redis 數據存儲解決方案,滿足日益增長的業務需求。在選擇和部署時,需要根據具體的業務場景、數據量、性能要求和對可用性的期望來綜合考慮。

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

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

相關文章

Qt readyRead信號避坑:不產生readyRead信號的解決方法

Qt readyRead信號避坑:不產生readyRead信號的解決方法 引言一、QSerialport的readyRead1.1 版本問題1.2 緩存問題1.3 阻塞問題 二、Q(Tcp)Socket的readyRead2.1 阻塞問題2.2 運行一段時間,突然不發信號2.3 和具體數據有關? 引言 目前沒遇到相…

大事件項目記錄10-文章分類接口開發-更新文章分類

四、更新文章分類。 CategoryController.java: PutMappingpublic Result update(RequestBody Validated Category category){categoryService.update(category);return Result.success();} CategoryService: //更新分類void update(Category category); …

AI接口使用–阿里云百煉

原文地址:AI接口使用–阿里云百煉 – 無敵牛 歡迎參觀我的個人博客:無敵牛 – 技術/著作/典籍/分享等 最近開發了一個抖音AI起名小程序,已經在抖音上線了,歡迎大家來使用。其中用到了 AI文本生成 功能,我用的是 阿里云…

大模型之提示詞工程入門——解鎖與AI高效溝通的“鑰匙”

一、什么是提示詞工程? 提示詞工程(Prompt Engineering) 是一門通過設計、優化輸入文本(Prompt)來引導大語言模型(LLM)生成高質量輸出的技術。它不僅是AI應用的核心環節,也是連接人…

智慧城市云計算大數據中心項目設計方案

第1章 總體方案設計 1.1 概述 1.2 建設目標 1.3 建設內容 1.3.1 標準規范體系編制 1.3.2 基礎設施平臺建設 1.3.3 數據資源平臺建設 1.3.4 應用支撐平臺建設 1.3.5 云管平臺運維建設 1.3.6 應用上云遷移實施 1.3.7 信息安全保障建設 1.3.8 容災備份系統建設 1.4 設…

OpenMP并行加速學習筆記2025.6.27

在OpenMP并行加速中,線程數(如32、16、8)的選擇需結合硬件核心數、任務類型(計算密集型或I/O密集型)、負載均衡策略及線程開銷綜合判斷。以下為具體差異分析與性能提升對比: 一、核心影響因素分析 1. 硬件…

對象回調和函數回調

1.對象回調: 對象回調原始寫法,A調B B又回頭調A package com.ldj.demo.controller;/*** User: ldj* Date: 2025/6/28* Time: 12:22* Description: 回調函數的理解 對象回調*/ public class Tr {public static void main(String[] args) {A a new A();…

Python實例題:Web 爬蟲與數據可視化

目錄 Python實例題 題目 要求: 解題思路: 代碼實現: Python實例題 題目 Web 爬蟲與數據可視化 要求: 編寫一個爬蟲,從豆瓣電影 Top250 頁面(豆瓣電影 Top 250)抓取電影名稱、評分、導演…

關于ubuntu 20.04系統安裝分區和重復登錄無法加載桌面的問題解決

1. 想要安裝Ubuntu 20.04版本,有兩塊硬盤,所以在分區列表設置的格式為如下: 其中各個/boot 、/home的格式為如下(Ubuntu20.04分區方案_ubuntu20.04手動分區-CSDN博客) 2.安裝完死活輸完密碼進不去主界面 必須禁用Nou…

26考研|數學分析:隱函數定理及其應用

前言 本章主要圍繞隱函數、隱含數組的計算展開,本章的核心還是在于計算的運用,在理論層面要掌握隱函數(隱函數組)存在性定理,在計算方面,要掌握隱函數、隱函數組的計算方法,此外,本…

PyQtNode Editor 第三篇創建節點(節點的定義)

在 PyQtNode Editor 的開發之旅中,經過前兩篇博客對基礎環境搭建和核心類結構的探索,我們已經邁出了堅實的步伐。今天,我們將聚焦于node_scene文件,深入解析其中的代碼邏輯。這段代碼構建了Scene類,它如同整個節點編輯器的 “管理中樞”,承擔著組織和協調節點、邊等關鍵元…

通過docker安裝nginx服務

nginx配置文件 https://gitee.com/Cairo-SR8/nginx-configuration.git一、安裝nginx 1.1 拉去ARM鏡像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_nginx:latest1.2 拉去x86鏡像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/…

盲法在臨床試驗中的應用與挑戰

一、盲法分級與科學價值 1.1 開放標簽 1.1.1 受盲對象 無隱藏。 1.1.2 適用場景 外科手術、器械試驗等無法偽裝的操作。 1.1.3 偏倚控制目標 僅客觀終點(生存率、實驗室指標)。 1.2 單盲 1.2.1 受盲對象 患者。 1.2.2 適用場景 患者報告結局(PRO)為主的試驗(如…

VNware啟動虛擬機報錯:虛擬化性能計數器需要版本為 3 或以上的架構性能監控。

Vmware版本:17.5 結論: 【編輯虛擬機設置-硬件-處理器-虛化計數器】沒勾就勾上,勾了就不勾保存,然后重新打勾 備注:不知道是不是顯示問題,之前勾著的時候報錯。取消報錯,再勾上報錯能正常啟動虛…

微機系統 - 第7章 -可編程接口芯片

可編程并行輸入/輸出接口芯片 8255A -1:結構 8255A為40引腳、雙列直插封裝。 內部結構由數據端口、組控制電路、數據總線緩沖器、讀/寫控制邏輯四部分組成。 數據總線緩沖器:三態8位雙向緩沖器,D7-D0同系統數據總線相連。CPU通過執行輸入/輸出指令來實…

解析云計算虛擬化基石:KVM、QEMU與Libvirt的協同

在云計算和容器化大行其道的今天,傳統虛擬化技術仍是企業IT架構的核心支柱。理解KVM、QEMU和Libvirt的關系,是掌握現代虛擬化技術的關鍵一步。 一、虛擬化技術演進:從軟件模擬到硬件加速的進化之路 虛擬化技術通過在單臺物理服務器上創建多個…

Mac mini 跑 DeepSeek R1 及 QwQ-32B模型實測報告

測試對象:2025 款 Mac mini(M4 / M4 Pro 芯片) 測試模型:DeepSeek-R1(14B/32B)、QwQ-32B(原版/量化版) 測試目標:硬件性能適配性、推理速度、內存占用及優化方案 一、Mac…

github常用插件

一,文檔輔助閱讀系列:自動化wiki處理 1,deepwiki https://deepwiki.com/ 將我們看不懂的官方code文檔轉換為wiki,更加便于理解。 其實能夠翻閱的倉庫很有限,比如說: 但是有很多倉庫并沒有index&#xff…

洛谷P11963 [GESP202503 六級] 環線-普及/提高-

題目描述 小 A 喜歡坐地鐵。地鐵環線有 n n n 個車站&#xff0c;依次以 1 , 2 , ? , n 1,2,\cdots,n 1,2,?,n 標號。車站 i ( 1 ≤ i < n ) i\ (1\leq i<n) i (1≤i<n) 的下一個車站是車站 i 1 i1 i1。特殊地&#xff0c;車站 n n n 的下一個車站是車站 1 …

大網絡辦公區的二層生成樹優化問題

辦公區有華為和思科交換機&#xff0c;此次改造&#xff0c;在辦公火墻上、下聯&#xff0c;做3層IP地址互聯&#xff0c;可以讓大核心不參與辦公區的STP網絡收斂&#xff0c;就不會因為下面辦公區的交換機stp收斂問題導致&#xff0c;核心連接的其他區域網絡出現動蕩&#xff…