Redis - 高可用實現方案解析:主從復制與哨兵監控

文章目錄

  • Pre
  • 概述
  • Redis 高可用實現方案
  • 一、主從復制機制
    • 1.1 全量同步流程
    • 1.2 增量同步(PSYNC)流程
  • 二、哨兵監控機制
    • 2.1 故障轉移時序流程
  • 三、方案對比與選型建議
  • 四、生產環境實踐建議

在這里插入圖片描述


Pre

Redis-入門到精通

Redis進階系列

Redis進階 - Redis主從工作原理詳解

Redis-18Redis主從同步

Redis-19Redis哨兵Sentinel模式-Centos6.5上3臺主機1主2從3哨兵的配置及通過代碼訪問哨兵


概述

為了提升對高并發實時數據訪問的性能,數據緩存組件應運而生,其中比較常見的就是Memcache和Redis。

Memcache是經典的內存緩存技術,對相關領域的支持比較豐富,各種框架都支持使用該技術。應用系統中經常用到的會話信息可以非常方便地保存到Memcache中,每個鍵保存的數據量最大為1 MB,支持的數據類型比較單一,僅支持字符串類型(string),不支持持久化操作。

Redis支持比較多的數據類型(string、list、set、sortset、hash),也支持集合計算(set類型),每個鍵的最大數據量為1 GB,支持持久化操作。Redis一般配合后端數據庫使用,其存放的一般是用戶當前頻繁使用的數據。

組件優點缺點
Memcache1. 支持客戶端式分布式集群
2. 一致性哈希多核結構
3. 多線程讀寫性能高
4. 內存分配效率高
1. 不支持持久化
2. 僅支持字符串類型
3. 節點故障可能引發緩存穿透
4. 分布式需客戶端實現
5. 單鍵最大1MB
6. 擴容復雜度高
Redis1. 支持5種數據類型(String/List/Set/ZSet/Hash)
2. 支持持久化(RDB/AOF)
3. 高可用架構(主從+哨兵)
4. 支持分布式分片集群
5. 單線程無鎖高性能
6. 單鍵最大1GB
1. 多線程并發讀寫性能低于Memcache
2. 內存碎片問題需定期清理
3. 集群模式下部分命令受限(如跨節點事務)
4. 持久化可能影響瞬時性能

Redis 高可用實現方案

Redis 實現高可用主要依靠兩大機制:主從復制哨兵監控


一、主從復制機制

Redis通過主從復制實現數據冗余與讀寫分離,支持全量同步增量同步兩種模式。

1.1 全量同步流程

當從服務器首次連接主服務器或數據差異過大時觸發全量同步:

從服務器 主服務器 SYNC命令 執行BGSAVE生成RDB 記錄后續命令到緩沖區 發送RDB文件 加載RDB文件 發送緩沖區增量命令 執行增量命令 從服務器 主服務器

全量同步流程:

  1. 從服務器發送 SYNC 命令:從服務器請求與主服務器建立復制關系。
  2. 主服務器生成 RDB 快照:接收到 SYNC 命令后,主服務器調用 BGSAVE 命令生成 RDB 文件,同時啟動緩沖區記錄后續所有的增量命令。
  3. 傳輸 RDB 文件:主服務器將 RDB 快照發送給從服務器。
  4. 從服務器加載 RDB 文件:從服務器加載快照文件,完成數據初步同步。
  5. 增量命令同步:主服務器從緩沖區讀取斷線期間的命令,發送給從服務器,從服務器執行后續寫入操作。

1.2 增量同步(PSYNC)流程

在理解增量同步之前需要了解下面幾個概念

  • 復制偏移量:執行復制的主從服務器會以字節為單位維護一個復制的偏移量(offset)。
  • 復制緩沖區:一個先進先出(first in first out,FIFO)的隊列,用于存儲服務器執行過的命令,每次執行命令時主服務器都會將命令記錄下來,并存儲在復制緩沖區。命令存儲的僅僅是數據變更的操作,復制緩沖區的大小是1 MB。
  • 服務器運行ID:每個Redis服務器會在啟動時生成自己的服務器運行ID(runid),主服務器會將自己的運行ID發送給從服務器,從服務器將其保存起來,當主從服務器斷線重連之后就可依據這一ID來判斷當前主服務器是否是之前的主服務器,如果是,則啟動增量同步,否則啟動全量同步。

Redis 2.8+版本引入PSYNC命令優化斷線重連場景:

從服務器 主服務器 PSYNC runid offset FULLRESYNC runid offset 發送RDB文件 CONTINUE 發送缺失的增量命令 FULLRESYNC runid offset 全量同步 alt [runid匹配且offset在緩沖區內- ] [數據差異過大] alt [初次復制] [斷線重連] 從服務器 主服務器

核心邏輯

  • 通過runid驗證主服務器身份
  • 通過offset判斷數據差異是否超出緩沖區容量(默認1MB)
  • 增量同步僅傳輸丟失的命令,避免全量復制

PSYNC命令的執行流程。

  • (1)客戶端向服務器發送SLAVEOF命令,讓當前服務器成為從服務器。
  • (2)從服務器根據自己是否保存主服務器的運行ID來判斷是否是第一次復制,如果是第一次復制,則繼續執行第3步,否則跳轉到第4步。
  • (3)從服務器向主服務器發送PSYNC ? -1命令進行全量同步。
  • (4)從服務器向主服務器發送PSYNC runid offset命令進行增量同步。
  • (5)主服務器接收到PSYNC 命令后,先判斷runid是否與本機ID一致,如果一致,則會再次判斷offset和本機的偏移量差距有沒有超過復制緩沖區大小,如果沒有,就給從服務器發送CONTINUE命令,此時從服務器只需要等待主服務器傳回失去連接期間丟失的命令。
  • (6)如果runid和本機ID不一致或者雙方偏移量差距超過復制緩沖區大小,就會發送FULLRESYNC runid offset命令,從服務器將runid保存起來,并進行全量同步。

二、哨兵監控機制

主從復制雖然實現了數據同步,但主服務器宕機后寫操作將無法進行。為解決此問題,Redis 提供了哨兵(Sentinel)機制,主要功能包括:

  • 監控(Monitoring):持續檢查主從服務器的運行狀態。
  • 通知(Notification):在檢測到故障時,通過 API 向管理員或其他應用程序發送通知。
  • 自動故障遷移(Automatic Failover):當主服務器失效時,從剩余從服務器中選舉出一個新主服務器,并指示其他從服務器切換復制目標,同時向客戶端返回新主服務器的地址。

2.1 故障轉移時序流程

哨兵 主服務器 從服務器 客戶端 其他從服務器 定期檢查主服務器狀態 持續監控 選舉新主服務器 接受升級為新主 通知切換到新主 返回新主服務器地址 alt [主服務器正常] [主服務器故障] 哨兵 主服務器 從服務器 客戶端 其他從服務器

核心功能

  1. 監控:多哨兵節點協同檢測主服務器狀態
  2. 選舉:基于Raft算法選舉領頭哨兵
  3. 故障轉移
    • 提升從服務器為新主節點
    • 修改其他從服務器復制目標
    • 更新客戶端連接地址

三、方案對比與選型建議

方案適用場景限制條件
主從復制數據冷備份、讀寫分離主節點故障需手動切換
哨兵模式自動故障轉移的高可用場景需要至少3個哨兵節點保障決策

推薦組合:主從復制+哨兵模式,兼顧數據冗余與自動容災。


四、生產環境實踐建議

  1. 網絡優化:主從節點盡量部署在同機房
  2. 內存配置:主節點內存建議為最大數據量的1.5倍
  3. 監控指標
    • 主從復制延遲(master_repl_offset
    • 哨兵節點的ping響應時間
  4. 避免使用KEYS *等阻塞命令影響同步性能

通過合理配置主從復制與哨兵監控,可構建秒級故障恢復的高可用Redis集群。

在這里插入圖片描述

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

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

相關文章

2025年滲透測試面試題總結-02(題目+回答)

網絡安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 阿里云安全實習 一、代碼審計經驗與思路 二、越權漏洞原理與審計要點 三、SSRF漏洞解析與防御 四、教…

水滴tabbar canvas實現思路

廢話不多說之間看效果圖,只要解決了這個效果水滴tabbar就能做出來了 源碼地址 一、核心實現步驟分解 布局結構搭建 使用 作為繪制容器 設置 width=600, height=200 基礎尺寸 通過 JS 動態計算實際尺寸(適配高清屏) function initCanvas() {// 獲取設備像素比(解決 Re…

解決各大瀏覽器中http地址無權限調用麥克風攝像頭問題(包括谷歌,Edge,360,火狐)后續會陸續補充

項目場景: 在各大瀏覽器中http地址調用電腦麥克風攝像頭會沒有權限,http協議無法使用多媒體設備 原因分析: 為了用戶的隱私安全,http協議無法使用多媒體設備。因為像攝像頭和麥克風屬于可能涉及重大隱私問題的API,ge…

網絡安全蜜罐產品研究現狀

🍅 點擊文末小卡片 ,免費獲取網絡安全全套資料,資料在手,漲薪更快 一、知識點總結 1、蜜罐(Honeypot):誘捕攻擊者的一個陷阱。 2、蜜網(Honeynet):采用了技術…

el-card 結合 el-descriptions 作為信息展示

記錄下el-card 組合 el-descriptions 實現動態展示信息 文章結構 實現效果1. el-descriptions 組件使用1.1 結合v-for實現列表渲染1.2 解析 2. 自定義 el-descriptions 樣式2.1 修改背景色、字體顏色2.2 調整字體大小2.3 解析 3. el-card 結合 el-descriptions 作為信息展示3.…

【Java---數據結構】鏈表 LinkedList

1. 鏈表的概念 鏈表用于存儲一系列元素,由一系列節點組成,每個節點包含兩部分:數據域和指針域。 數據域:用于存儲數據元素 指針域:用于指向下一個節點的地址,通過指針將各個節點連接在一起,形…

python-leetcode-不同的二叉搜索樹 II

95. 不同的二叉搜索樹 II - 力扣(LeetCode) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class S…

動態規劃/貪心算法

一、動態規劃 動態規劃 是一種用于解決優化問題的算法設計技術,尤其適用于具有重疊子問題和最優子結構性質的問題。它通過將復雜問題分解為更簡單的子問題,并保存這些子問題的解以避免重復計算,從而提高效率。 動態規劃的核心思想 最優子結…

2月28日,三極管測量,水利-51單片機

眾所周知,三極管(BJT)有三個管腳,基極(B)、集電極(C)、發射極(E),在實際應用中,不可避免地會遇到引腳辨別的問題。接下來就講下三極管…

Linux常見基本指令(二)

目錄 1、Linux基礎指令 文本查看 cat指令 more指令 less指令 head指令&tail指令 時間相關指令 查找、搜索相關指令 find指令 which指令 whereis指令 alias指令 grep指令 打包壓縮和解壓縮 zip指令(壓縮) unzip(解壓&…

Day 55 卡瑪筆記

這是基于代碼隨想錄的每日打卡 所有可達路徑 題目描述 ? 給定一個有 n 個節點的有向無環圖,節點編號從 1 到 n。請編寫一個函數,找出并返回所有從節點 1 到節點 n 的路徑。每條路徑應以節點編號的列表形式表示。 輸入描述 ? 第一行包含兩個整數…

2. 在后端代碼中加入日志記錄模塊

1. 說明 日志模塊基本上是每一個軟件系統開發中必不可少的,主要用于持久記錄一些代碼運行中的輸出信息,輔助編碼人員進行代碼調試,以及后期軟件上線運行報錯分析。在Python中加入日志模塊比較簡單,只需要借助logging和RotatingFi…

【Vue3】淺談setup語法糖

Vue3 的 setup 語法糖是通過 <script setup> 標簽啟用的特性&#xff0c;它是對 Composition API 的進一步封裝&#xff0c;旨在簡化組件的聲明式寫法&#xff0c;同時保留 Composition API 的邏輯組織能力。以下是其核心概念和原理分析&#xff1a; 一、<script setu…

物聯網小范圍高精度GPS使用

在園區內實現小范圍高精度GPS&#xff08;全球定位系統&#xff09;定位&#xff0c;通常需要結合多種技術來彌補傳統GPS在精度和覆蓋范圍上的不足。以下是實現小范圍高精度GPS定位的解決方案&#xff0c;包括技術選擇、系統設計和應用場景。 一、技術選擇 在園區內實現高精度…

【前端】前端設計中的響應式設計詳解

文章目錄 前言一、響應式設計的定義與作用二、響應式設計的原則三、響應式設計的實現四、響應式設計的最佳實踐總結 前言 在當今數字化時代&#xff0c;網站和應用程序需要適應各種設備&#xff0c;從桌面電腦到平板電腦和手機。響應式設計應運而生&#xff0c;成為一種可以適…

Rocky Linux 系統安裝 typecho 個人博客系統(Docker 方式)

typecho 博客系統安裝 官網: https://typecho.org/ 1. 安裝 Docker curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo && yum install docker-ce -y && docker -v && systemctl enable --now docker…

pytorch-gpu版本安裝(英偉達gpu驅動安裝)

一、安裝cuda 1?? 檢查是否有 GPU lspci | grep -i nvidia如果沒有輸出&#xff0c;可能你的服務器 沒有 GPU&#xff0c;或者 GPU 未正確識別。 2?? 檢查 NVIDIA 驅動是否安裝 dpkg -l | grep -i nvidia如果沒有相關輸出&#xff0c;說明驅動未安裝&#xff0c;建議安…

華為OD-2024年E卷-分批薩[100分]

文章目錄 題目描述輸入描述輸出描述用例1解題思路Python3源碼 題目描述 吃貨"和"饞嘴"兩人到披薩店點了一份鐵盤&#xff08;圓形&#xff09;披薩&#xff0c;并囑咐店員將披薩按放射狀切成大小相同的偶數個小塊。但是粗心的服務員將披薩切成了每塊大小都完全不…

【計算機網絡入門】初學計算機網絡(六)

目錄 1.回憶數據鏈路層作用 2. 組幀 2.1 四種組幀方法 2.1.1 字符計數法 2.1.2 字節填充法 2.1.3 零比特填充法 2.1.4 違規編碼法 3. 差錯控制 3.1 檢錯編碼 3.1.1 奇偶校驗碼 3.1.2 CRC&#xff08;循環冗余校驗&#xff09;校驗碼 3.2 糾錯編碼 3.2.1 海明校驗碼…

yolo位姿估計實驗

目錄 介紹實驗過程 2.1 數據集下載 2.2 模型和數據配置文件修改 2.3 模型訓練參考鏈接 1. 介紹 1.1 簡介 YOLOv8-Pose是基于YOLOv4算法的姿勢估計模型&#xff0c;旨在實現實時高效的人體姿勢估計。姿勢估計在計算機視覺領域具有重要意義&#xff0c;可廣泛應用于視頻監控、…