Redis的高可用性與集群架構

Redis的高可用性與集群架構

  1. 引言:解釋高可用性的重要性及Redis如何實現
  2. 主從復制(Replication)
    • 原理:異步復制,主從數據同步
    • 配置方法
    • 優缺點分析
  3. 哨兵模式(Sentinel)
    • 功能:監控、通知、自動故障轉移、配置中心
    • 部署架構(多哨兵節點)
    • 故障轉移流程
  4. Redis集群(Cluster)
    • 數據分片(16384個槽)
    • 節點間通信(Gossip協議)
    • 請求重定向(MOVED/ASK)
    • 集群伸縮(添加/刪除節點)
  5. 多級高可用架構設計
    • 跨機房部署
    • 讀寫分離
    • 集群監控
  6. 常見問題及解決方案
    • 腦裂問題
    • 數據一致性
    • 性能瓶頸
  7. 總結與選型建議

一、為什么需要高可用?

單點故障風險
Redis單節點架構存在致命問題:

  • 服務器宕機導致服務不可用
  • 硬件故障造成數據永久丟失
  • 容量瓶頸無法水平擴展

高可用核心目標

  • 🚀 服務連續性:99.99%+ SLA保障
  • 💾 數據可靠性:多副本冗余存儲
  • ?? 負載均衡:分散請求壓力
  • 🔄 故障自愈:自動故障檢測與轉移

二、高可用演進三大階段

1. 主從復制(Replication)

基礎高可用方案:一主多從架構

異步復制
異步復制
異步復制
Master
Slave 1
Slave 2
Slave 3

核心特性:

  • 讀寫分離:寫主庫,讀從庫

  • 數據冗余:全量+增量復制

配置簡單:

# 在Slave節點配置
replicaof 192.168.1.100 6379
復制流程:
Slave發送PSYNC命令Master執行BGSAVE生成RDBMaster發送RDB文件給SlaveMaster持續發送緩沖區命令Slave加載RDB并執行命令

局限:

  • 主節點單點故障

  • 故障轉移需人工干預

  • 寫能力無法擴展

2. 哨兵模式(Sentinel)

故障自動轉移解決方案

監控
監控
監控
復制
復制
Sentinel
Master
Sentinel
Sentinel
Slave
Slave
S1 -->|投票| S2
S2 -->|投票| S3
S3 -->|選舉| S1

核心功能:

  • 監控:持續檢查節點健康狀態

  • 通知:通過API通知系統管理員

  • 自動故障轉移:主節點宕機時選舉新主

  • 配置中心:提供主節點發現服務

部署配置(sentinel.conf):
bash

sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

故障轉移流程:

  • 多個Sentinel檢測主節點失效(主觀下線)

  • Sentinel集群投票確認(客觀下線)

  • 選舉Leader Sentinel

  • Leader選擇最優Slave晉升新主

  • 通知其他Slave復制新主

優點:

  • 自動故障轉移

  • 配置自動更新

  • 客戶端透明切換

局限

  • 寫壓力仍集中在單主節點

  • 擴容復雜(需重新分片)

  • 集群規模受限(建議<200節點)

3. Redis Cluster(分布式集群)

終極解決方案:去中心化分片集群

哈希槽
哈希槽
哈希槽
哈希槽
主從
主從
主從
主從
請求
請求
節點1
節點2
節點3
節點4
副本1
副本2
副本3
副本4
Client

核心設計:
1.數據分片:

  • 16384個哈希槽(hash slot)

  • 槽分配公式:slot = CRC16(key) mod 16384

  • 每個節點負責部分槽范圍

2.節點通信:

  • Gossip協議(PING/PONG)

  • 每秒隨機通信5個節點

  • 元數據最終一致性

3.請求路由:

  • MOVED重定向:-MOVED 3999 192.168.1.101:6380

  • ASK臨時重定向

  • Smart Client緩存槽映射

集群搭建(6節點示例):

# 創建集群(3主3從)
redis-cli --cluster create \192.168.1.100:6379 192.168.1.101:6379 \192.168.1.102:6379 192.168.1.103:6379 \192.168.1.104:6379 192.168.1.105:6379 \--cluster-replicas 1

集群運維命令:

命令功能
CLUSTER NODES查看節點拓撲
CLUSTER INFO集群狀態信息
CLUSTER MEET添加新節點
CLUSTER ADDSLOTS分配槽位
CLUSTER FAILOVER手動故障轉移

三、企業級高可用架構設計

1. 多機房容災方案

主集群
從集群
跨機房同步
讀請求
讀請求
寫請求
機房A
Cluster
機房B
Cluster
全局負載均衡

關鍵技術:

  • Redis-Shake數據同步

  • Proxy層讀寫分離

  • DNS故障切換

2. 性能優化方案

1.熱點Key處理:

bash

# 使用Hash Tag強制同槽
SET user:{12345}.profile "data"
SET user:{12345}.orders "data"

2.集群分片優化:

  • 避免節點負載不均

  • 監控槽分布:redis-cli --cluster check

3.客戶端優化:

  • 連接池配置

  • Pipeline批處理

  • 本地緩存減少訪問

3. 監控指標體系

類別關鍵指標報警閾值
節點connected_clients> 5000
內存used_memory> 90%
網絡instantaneous_ops_per_sec> 8萬
集群cluster_size槽未分配
復制master_repl_offset差值>1萬

四、常見問題解決方案

Q1:腦裂問題(Split-Brain)

場景: 網絡分區導致多主節點
解決方案:

# 配置最少從節點數
min-replicas-to-write 2  # 主節點至少需2個從節點
min-replicas-max-lag 10  # 從節點延遲不超過10秒

Q2:數據一致性

最終一致性保障:

  • 異步復制(默認)

  • WAIT命令強一致:

SET key value
WAIT 2 5000  # 等待2個副本,超時5秒

Q3:集群擴容瓶頸

平滑擴容方案:

添加新節點:

redis-cli --cluster add-node new_host:port existing_host:port

遷移槽位:

redis-cli --cluster reshard existing_host:port

自動平衡:

redis-cli --cluster rebalance --use-empty-masters

五、架構選型決策樹

單機房
中小規模
大規模數據
高并發
多機房容災
讀寫分離
分片擴展
需求場景
哨兵模式
Redis Cluster
Cluster+跨機房同步
1主+3從+3哨兵
至少6節點

六、最佳實踐總結

1.生產必用集群:單節點僅限開發環境

2.規模建議:

  • 哨兵模式:數據量 < 100GB,QPS < 10萬

  • Redis Cluster:數據量 > 100GB,QPS > 10萬

3.容災設計:

  • 副本數 ≥ 2

  • 跨機架/機房部署

4.升級路徑:

主從復制
哨兵模式
Redis Cluster

官方推薦:Redis 7.0+ 的Redis Cluster已成為企業級首選方案,支持:

  • 多線程IO

  • ACL安全控制

  • 更穩定的故障轉移

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

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

相關文章

TCP的連接

TCP 三次握手過程是怎樣的&#xff1f;TCP 是面向連接的協議&#xff0c;所以使用 TCP 前必須先建立連接&#xff0c;而建立連接是通過三次握手來進行的。三次握手的過程如下圖&#xff1a;一開始&#xff0c;客戶端和服務端都處于 CLOSE 狀態。先是服務端主動監聽某個端口&…

Excel的學習

一、熟悉界面 1.功能區 點擊“視圖”,點擊凍結窗格,選擇目標行 2.表格區 3.自定義功能區 在上面的空白編輯欄處,右鍵選擇自定義功能區 4.數據輸入規范 (1)格式不統一(日期格式不規范,姓名亂加空格,亂合并單元格) 姓名對齊:右鍵選擇編輯單元格格式,選擇對齊,…

論文閱讀:HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking

論文地址:2501.01275v2 代碼地址:GitHub - leandro-svg/HybridTrack: [RA-L25/ICRA26] HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking 前言 多目標跟蹤旨在在幀間檢測和關聯所有所需的目標。大多數方法通過明確或隱式地利用強大的線索(即空間和外觀信…

EtherCAT開源主站 SOEM 2.0 最新源碼在嵌入式 Linux 下的移植與編譯

EtherCAT 作為工業自動化領域的主流現場總線協議&#xff0c;因其高實時性和高帶寬被廣泛應用。而 SOEM&#xff08;Simple Open EtherCAT Master&#xff09;則是開源社區中最受歡迎的 EtherCAT 主站協議棧之一。本文將以 SOEM 2.0 最新源碼為例&#xff0c;詳細介紹其在嵌入式…

面試150 填充每個節點的下一個右側節點指針Ⅱ

思路 采用層序遍歷的方式來連接二叉樹中同一層的節點。首先將根節點加入隊列&#xff0c;然后按層處理節點&#xff1a;每一層依次從隊列中取出節點&#xff0c;并將其 next 指針指向該層中的下一個節點&#xff08;即隊列中的下一個節點&#xff09;&#xff1b;若是該層最后一…

Windows 本地 使用mkcert 配置HTTPS 自簽名證書

&#x1f9e9; 場景假設 項目本地運行或通過本地 web 服務器&#xff08;如 Nginx、http-server、vite&#xff09;訪問 假設域名為 myadmin.local&#xff08;可以任意命名&#xff09; 步驟 1&#xff1a;安裝 mkcert 下載 mkcert&#xff1a; 訪問 https://github.com/Fil…

vue3 ref vs reactive值的修改

ref vs reactive reactive 定義的響應式對象不能直接整體修改(即obj1obj2),如果想要修改,可以使用 Object.assign(obj1,obj2) 上述賦值是淺拷貝,對象地址不變,屬性值被修改了淺拷貝:創建一個新對象&#xff0c;這個對象有著原始對象屬性值的一份精確拷貝。如果屬性值是基本類型…

【Datawhale AI 夏令營】 用AI做帶貨視頻評論分析(一)

引言 以訊飛「基于帶貨視頻評論的用戶洞察挑戰賽」的賽事項目為背景&#xff0c;將電商直播帶貨視頻的碎片化用戶評論轉化為可量化的商業洞察信息。其實本質上在于利用自然語言處理、機器學習或者大模型技術&#xff0c;從海量的文本數據中提取有價值的商業洞察。 主要涉及以下…

Vue中的render()函數

在 Vue 中&#xff0c;render() 是一個用于手動編寫組件渲染邏輯的方法&#xff0c;它直接返回虛擬節點&#xff08;VNode&#xff09;&#xff0c;替代模板語法&#xff08;<template>&#xff09;來描述組件的 UI 結構。以下是關于 render() 方法的詳細解析&#xff1a…

板凳-------Mysql cookbook學習 (十一--------9)

13.2 分組描述統計 mysql> select age, count(score) as n,-> sum(score) as sum,-> min(score) as minimum,-> max(score) as maximum,-> avg(score) as mean,-> stddev_samp(score) as std. dev.,-> var_samp(score) as variance-> from testscore-&…

編寫產品需求文檔:黃歷日歷小程序

整理產品需求文檔&#xff1a;黃歷日歷小程序版本&#xff1a;1.0 更新時間&#xff1a;2025-7-9一、文檔概述1.1 產品背景開發一款融合傳統黃歷文化的日歷工具&#xff0c;提供每日吉兇查詢、神煞展示和個人運勢分析功能。1.2 目標用戶關注傳統歷法的中老年群體婚嫁/搬家等需要…

Spring Boot + MyBatis 實現用戶登錄功能詳解(基礎)

一、項目概述做了幾個項目發現有人問到怎么使用springbootHTMLjsCSS開發一個項目呢所以本文將介紹如何使用Spring Boot和MyBatis實現一個完整的用戶登錄功能。系統包含前端登錄頁面、后端控制器、服務層、數據訪問層以及數據庫交互。二、技術棧Spring Boot 2.xMyBatis 持久層框…

adb 簡介與常用命令

1. adb 簡介adb 的全稱為 Android Debug Bridge&#xff0c;就是起到調試橋的作用。借助 adb 工具&#xff0c;我們可以管理設備或手機模擬器的狀態。還可以進行很多手機操作&#xff0c;如安裝軟件、系統升級、運行 shell 命令等等。其實簡而言說&#xff0c;adb 就是連接 And…

阿里云-跨賬號同步OSS Bucket

說明 阿里云A賬號的OSS BUCKET同步到B賬號的指定OSS BUCKET。 賬號Bucket NamesRAM角色A{源buctket}OSS-SYNCERB{目標buctket} 步驟 在阿里云A,B賬號分別建上表buckets, 最好是相同地域的在A號-RAM控制臺建立角色OSS-SYNCER&#xff0c;并賦權AliyunOSSFullAccess&#xff…

uniapp小程序無感刷新token

request.js // request.js import {getApptoken,getStoredApptoken } from ./tokenRequest // 從合并模塊導入// 全局配置 const MAX_RETRIES 1 // 最大重試次數 const baseURL https://your-api.com// 請求隊列和刷新狀態 let requestsQueue [] let isRefreshing false// …

MySQL優化高手筆記

語雀完整版&#xff1a;https://www.yuque.com/g/mingrun/embiys/dv3btw/collaborator/join?tokenzMBwPzSMfSGINLuv&sourcedoc_collaborator# 《MySQL優化高手筆記》MySQL優化高手一、MySQL架構01 天天寫CRUD,你知道你的系統是如何跟MySQL打交道的嗎通過驅動連接數據庫&am…

Git 詳解:從概念,常用命令,版本回退到工作流

本文將從 Git 的核心概念講起&#xff0c;詳細介紹常用命令、各階段版本回退、分支控制以及企業內常見的 Git 工作流。 Git 與 GitHub 簡介 Git 簡介 Git 是一個開源的分布式版本控制系統&#xff0c;由 Linus Torvalds 于 2005 年開發。它與集中式版本控制系統&#xff08;…

CMSIS(Cortex Microcontroller Software Interface Standard)ARM公司為 Cortex-M 系列處理器

CMSIS&#xff08;Cortex Microcontroller Software Interface Standard&#xff09;是ARM公司為 Cortex-M 系列處理器&#xff08;如 M0/M3/M4/M7/M23/M33 等&#xff09;定義的一套硬件抽象層標準&#xff0c;旨在簡化嵌入式開發&#xff0c;提高代碼的可移植性和復用性。 核…

[特殊字符] 掃描式處理:Python 自動提取 PDF 中關鍵詞相關表格并導出為 Excel

本文演示如何利用 pdfplumber 批量處理指定文件夾下 PDF 文檔&#xff1a;定位關鍵詞&#xff08;如“主要會計數據”&#xff09;出現的頁碼及下一頁&#xff0c;提取其中的表格并保存為獨立 Excel 文件。適用于財務報告、審計表格、統計報表等場景。 1?? 第一步&#xff1a…

python3的返回值能返回多個嗎?

在Python中&#xff0c;函數可以通過返回一個元組&#xff08;tuple&#xff09; 來間接實現返回多個值的效果。以下是具體說明&#xff1a; 實現方式&#xff1a;直接返回逗號分隔的值 Python會自動將這些值打包成一個元組&#xff1a; def multiple_return():a 1b "he…