詳解Redis的集群模式(主從復制、哨兵與Cluster)

一、主從復制 (Master-Slave Replication)

1. 基本概念

主從復制是Redis最簡單的集群模式,由一個主節點(Master)和一個或多個從節點(Slave)組成。

2. 工作原理

  • 數據同步:從節點啟動時會向主節點發送SYNC命令,主節點執行BGSAVE生成RDB文件并發送給從節點

  • 命令傳播:主節點將寫命令持續發送給從節點,保持數據同步

  • 全量/增量同步:初次連接為全量同步,斷線重連后可能使用增量同步(PSYNC)

3. 優缺點

  • 優點

    • 讀寫分離,提高讀性能

    • 數據冗余,提高數據安全性

    • 故障恢復相對簡單

  • 缺點

    • 主節點故障需要手動切換

    • 寫操作仍然集中在主節點

    • 全量同步時網絡開銷大

二、哨兵模式 (Sentinel)

1. 基本概念

哨兵是Redis的高可用解決方案,由一個或多個哨兵節點監控主從集群,實現自動故障轉移。

2. 核心功能

  • 監控:持續檢查主從節點是否正常運行

  • 通知:當被監控節點出現問題時,向管理員發送警報

  • 自動故障轉移:主節點故障時,自動將一個從節點升級為主節點

  • 配置提供者:為客戶端提供最新的主節點地址

3. 工作原理

3.1. 監控機制

每個哨兵節點會:

  • 每秒一次向所有主從節點和其他哨兵節點發送PING命令

  • 如果實例在配置的down-after-milliseconds時間內沒有有效回復,該實例會被標記為"主觀下線"(SDOWN)

  • 當足夠數量的哨兵(通常需要quorum數量)都將主節點標記為"主觀下線"時,主節點會被標記為"客觀下線"(ODOWN)

3.2. 故障轉移流程
  • 選舉領頭哨兵: 當主節點被判定為客觀下線時,哨兵節點會通過Raft算法選舉出一個領頭哨兵(leader)來負責故障轉移

  • 選擇新主節點: 領頭哨兵會根據以下規則從從節點中選擇新的主節點:

    • 優先級高的(由slave-priority配置)

    • 復制偏移量大的

    • 運行ID小的

  • 提升新主節點: 將選中的從節點提升為主節點

  • 重新配置從節點: 讓其他從節點改為復制新的主節點

  • 通知客戶端: 通知客戶端主節點已變更

  • 舊主節點處理: 如果舊主節點重新上線,會被配置為新主節點的從節點

4. 優缺點

  • 優點

    • 自動故障轉移,提高可用性

    • 監控功能完善

    • 配置管理自動化

  • 缺點

    • 寫操作仍然單點

    • 故障轉移期間可能出現數據丟失

    • 集群規模較大時管理復雜

三、Cluster集群模式

1. 基本概念

Redis Cluster是Redis的分布式解決方案,通過數據分片(Sharding)實現水平擴展。

2. 核心特性

  • 數據分片:使用哈希槽(16384個slot)分配數據

  • 高可用:每個分片有主從復制

  • 去中心化:節點間通過Gossip協議通信

3. 工作原理

3.1. 哈希槽分配
  • 當集群啟動時,所有哈希槽(0-16383)需要被分配到各個節點上。每個節點負責存儲分配給它的哈希槽中的鍵值對。

  • 例如,一個包含6個節點的集群,可以將哈希槽分配如下:

    • 節點1:0-5460

    • 節點2:5461-10922

    • 節點3:10923-16383

    • 節點4、5、6作為從節點,分別復制節點1、2、3的數據。

3.2. 數據訪問
  • 客戶端在訪問集群時,需要通過哈希槽來定位數據所在的節點。客戶端會根據鍵的哈希值計算出對應的哈希槽,然后根據哈希槽的分配情況找到對應的節點。

  • 如果客戶端訪問的鍵所在的節點發生故障,客戶端會自動重試,直到找到新的主節點。

3.2. 故障轉移
  • Gossip協議

    • 節點間通過TCP端口(默認集群端口=客戶端端口+10000)通信

    • 每秒隨機選擇幾個節點進行PING/PONG消息交換

    • 包含的集群元數據:

      • 節點列表和角色

      • 槽位分配信息

      • 節點狀態(正常/疑似下線/已下線)

  • 故障檢測

    • 節點A標記節點B為"疑似下線"(PFAIL)

    • 通過Gossip協議傳播狀態

    • 當多數主節點確認B下線,標記為"已下線"(FAIL)

    • 觸發故障轉移

3.2. 數據遷移
  • 在集群運行過程中,如果需要對哈希槽進行重新分配(例如添加或移除節點),Redis集群支持在線遷移

  • 數據遷移過程是逐步進行的,不會阻塞集群的正常運行。遷移完成后,哈希槽的分配會更新,客戶端會根據新的分配情況訪問數據。

4. 優缺點?

  • 優點

    • 真正的分布式,支持水平擴展

    • 部分節點故障不影響整體服務

    • 自動故障轉移

  • 缺點

    • 不支持多數據庫(只能使用db0)

    • 批量操作受限(需所有key在同一slot)

    • 事務限制(所有key必須在同一節點)

    • 遷移大key可能影響性能

四、三種模式對比

特性主從復制哨兵模式Cluster集群
數據分布全量復制全量復制分片(16384 slots)
寫擴展性單點寫入單點寫入多主節點寫入
讀擴展性支持支持支持
故障轉移手動自動自動
客戶端復雜度簡單中等復雜
適用場景讀多寫少需要高可用大規模數據

五、選擇建議

  1. 主從復制:適合讀多寫少,對可用性要求不高的場景

  2. 哨兵模式:需要高可用且數據量不大的場景

  3. Cluster集群:數據量大、需要水平擴展和高可用的場景

實際生產中,Redis Cluster是當前最推薦的集群方案,特別是對于大規模部署。

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

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

相關文章

如何使用 Airtest 對 Flutter 和 Unity 應用進行UI自動化測試

使用 Airtest 進行 Flutter/Unity UI 自動化測試終極指南 一、 核心原理:為什么 Airtest 能行? 要理解如何用,先要明白其原理。Airtest 采取了“兩條腿走路”的策略,這正是它能通吃各種UI技術的關鍵。 第一條腿:基于…

河馬劇場多部自制劇霸榜,短劇精品化戰略持續推進

臨近暑期,短劇市場熱度逐漸攀升。近期,DataEye發布6月9日—6月15日微短劇熱力榜顯示河馬劇場以8部作品占據TOP30近三分之一席位,前三名中更是占據2個席位,以題材多元化、用戶覆蓋廣、數據爆發力強的特點引領行業風向。其中&#x…

冪級數 (0,R); R ;(R,+oo)

很好,我們現在來回答你問的這個問題: 🟠 冪級數在收斂半徑 R R R 以外會發生什么? 我們考慮一個一般形式的冪級數: ∑ n 0 ∞ a n ( x ? x 0 ) n \sum_{n0}^{\infty} a_n (x - x_0)^n n0∑∞?an?(x?x0?)n 它的…

C#學習13——正則表達式

一、正則表達式 是一種匹配輸入文本的模式,是由特殊字符組成,用于匹配字符串中的字符組合。 二、正則表達式有哪些? 1.Regex 類(引入System.Text.RegularExpressions;) Regex 類用于表示一個正則表達式。 1&#…

【Redis】持久化機制:RDB / AOF 的應用與場景

文章目錄 Redis 持久化一、RDB1.1 說明1.2 觸發機制手動觸發自動觸發 1.3 流程說明1.4 文件處理1.5 優缺點 & 適用場景 二、AOF2.1 說明2.2 使用 AOF2.3 命令寫入2.4 文件同步2.5 重寫機制2.6 啟動時數據恢復2.7 優缺點 & 適用場景 三、不使用 AOF / RDB 的情況3.1 場景…

Python 企業級開發與DevOps實踐

https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 大型項目結構與設計模式 項目結構規范 text 復制 下載 enterprise_app/ ├── docs/ # 項目文檔 ├── tests/ # 測試代碼 │ ├── unit/ …

E結構體基礎.go

前言:結構體是一種用戶自定義的數據類型,它可以將多個不同類型的數據整合在一起,形成一個有機的整體。這就好比在現實生活中,我們有各種各樣的物品,它們各自有不同的屬性和用途,而結構體就像是一個收納箱&a…

Spring @Autowired 依賴注入全解析

Autowired 是 Spring 框架中實現依賴注入的核心注解,其自動裝配過程可分為以下步驟,結合了類型匹配、名稱解析和容器協作機制: 1. 組件掃描與 Bean 定義注冊 掃描階段:Spring 容器啟動時,通過 ComponentScan 或 XML 配…

將git的普通目錄用idea初始化為maven項目

在 IntelliJ IDEA 中將一個已存在的 Git 目錄初始化為 Maven 項目,可以通過以下步驟完成。這些步驟假設你已經有一個包含代碼的 Git 倉庫,并希望將其轉換為 Maven 項目結構,以便更好地管理依賴和構建。 步驟 1:打開或導入 Git 倉庫…

Vue 中 key 屬性的深入解析:改變 key 導致組件銷毀與重建

一、key 屬性的核心作用 在 Vue 中,key是一個特殊的屬性,主要用于協助 Vue 的虛擬 DOM(Virtual DOM)算法高效地更新實際 DOM。它的核心作用可以概括為: 唯一標識節點:為每個節點提供一個唯一的身份標識優化 Diff 算法:幫助 Vue 準確判斷兩個節點是否為同一節點(如for循…

【音視頻】PJSIP庫——示例簡介、C++類說明

1、簡介 pjsip庫的源碼中有很多示例,是入門pjsip的第一手資料,下面將各個示例所演示的功能列舉出來,以便下一步學習; 最后總結下C++接口主要類及成員函數說明。 2、示例介紹 2.1 音視頻處理 aectest 音頻回聲消除測試工具,用于演示音頻處理模塊中的回聲消除(AEC)功能…

網站用CDN可以防DDoS和CC攻擊嗎?

現在市面上常見有兩種CDN,加速CDN與高防CDN,這兩種的區別還是很大的。 加速CDN: 加速CDN基本上都是共享、無防節點,主要做的是加速,所以價格也會相對較低,大陸地區的CDN都需要備案域名接入使用。 高防CD…

【圖片識別改名】批量識別圖片中的文字對圖片進行改名,識別文字對圖片重新命名的操作步驟和注意事項

一、應用場景 快遞單號識別與管理:在快遞業務中,每天會產生大量的快遞面單圖片。通過咕嘎OCR批量識別面單上的快遞單號等關鍵信息,并以此對圖片進行重命名,方便工作人員快速查詢和管理快遞包裹的物流信息,提高快遞處理…

先理解軟件工程,再談AI輔助研發

摘要: 近期行業內對“AI賦能軟件工程”的討論,大多聚焦于代碼生成等局部提效,這是一種危險的短視。本文旨在糾正將“軟件開發”等同于“編碼”的普遍誤解,深入探討軟件工程的系統性本質。我們將論證,若缺乏堅實的工程體…

Android軟件適配遙控器需求-案例經驗分享

不分大屏產品需要有遙控器功能,這里分享部分實戰經驗 文章目錄 前言一、案例部分效果圖二、項目基礎架構三、焦點基礎知識適配遙控器基礎-焦點問題焦點管理明確焦點狀態布局實現硬編碼實現引入第三方自定義組件實現 焦點順序作用 初始焦點 requestFocus 按鍵處理獲取…

《HTTP權威指南》 第3章 HTTP報文

報文是如何流動的 HTTP報文是在HTTP程序之間發送的數據塊。數據塊以一些文本形式的元信息開頭。 報文方向有:流入、流出、上游、下游。 流入和流出描述事務處理的方向,流入和流出是基于服務器的描述。 流入:客戶端發往服務器的請求報文 流…

Kafka 集群架構與高可用方案設計(二)

Kafka 集群架構與高可用方案的優化策略 合理配置參數 在 Kafka 集群的配置中,參數的合理設置對于系統的高可用性和性能表現起著關鍵作用。例如,min.insync.replicas參數定義了 ISR(In-Sync Replicas,同步副本)集合中…

47-Oracle ASH報告解讀

上一期生成了ASH報告后,就需要解讀報告關鍵信息。ASH的使用可以快速定位瞬時性能問題。生產環境的場景時間緊、任務重,但是必須要結合具體業務分析,同時借助其他工具做報告做趨勢分析。 一、ASH 技術原理? ?1. 核心機制? ?采樣原理?&a…

“本地化思維+模塊化體驗”:一款輕量數據中心監控系統的真實測評

“本地化思維模塊化體驗”:一款輕量數據中心監控系統的真實測評 在數據中心運維逐步精細化的今天,一款真正貼合本地用戶習慣、設計有溫度的系統并不多見。近期體驗了一款功能全面、邏輯清晰的監控平臺,給人留下了深刻印象。并不是廣。今天就從…

詞編碼模型有哪些

詞編碼模型有哪些 詞編碼模型在高維向量空間的關系解析與實例說明 如Word2Vec、BERT、Qwen等 一、高維向量空間的基礎概念 詞編碼模型(如Word2Vec、BERT、Qwen等)的核心是將自然語言符號映射為稠密的高維向量,使語義相近的詞匯在向量空間中位置接近。以Qwen模型為例,其…