Redis集群方案——哨兵機制

Redis Sentinel(哨兵)是Redis官方提供的高可用性(HA)解決方案,用于管理Redis主從架構并實現自動故障轉移

一、集群結構和作用

哨兵是一個分布式系統,由多個哨兵節點組成:

哨兵的作用如下:

  • 監控:Sentinel 會不斷檢查您的master和slave是否按預期工作

  • 自動故障恢復:如果master故障,Sentinel會將一個slave提升為master。當故障實例恢復后也以新的master為主

  • 通知:Sentinel充當Redis客戶端的服務發現來源,當集群發生故障轉移時,會將最新信息推送給Redis的客戶端

二、哨兵工作原理

Sentinel基于心跳機制監測服務狀態,每隔1秒向集群的每個實例發送ping命令:

  • 主觀下線:如果某sentinel節點發現某實例未在規定時間響應,則認為該實例主觀下線
  • 客觀下線:若超過指定數量(quorum)的sentinel都認為該實例主觀下線,則該實例客觀下線。quorum值最好超過Sentinel實例數量的一半。

三、集群故障恢復原理

1.哨兵選主規則

一旦發現master故障,sentinel需要在salve中選擇一個作為新的master,選擇依據是這樣的:

  • 首先會判斷slave節點與master節點斷開時間長短,如果超過指定值(down-after-milliseconds * 10)則會排除該slave節點

  • 然后判斷slave節點的slave-priority值,越小優先級越高,如果是0則永不參與選舉

  • 如果slave-prority一樣,則判斷slave節點的offset值,越大說明數據越新,優先級越高

  • 最后是判斷slave節點的運行id大小,越小優先級越高。

2.故障轉移流程

當選出一個新的master后,該如何實現切換呢?

流程如下:

  • sentinel給備選的slave1節點發送slaveof no one命令,讓該節點成為master

  • sentinel給所有其它slave發送slaveof 192.168.206.180?7002 命令,讓這些slave成為新master的從節點,開始從新的master上同步數據。

  • 最后,sentinel將故障節點標記為slave,當故障節點恢復后會自動成為新的master的slave節點

四、Docker搭建Redis哨兵集群

五、相關面試問題

1.怎么保證redis的高并發高可用?

? ? ? ? redis提供了主從同步+哨兵模式保證了redis的高并發和高可用性。

? ? ? ? 首先,主從同步保證了redis的高并發性:單節點redis的并發能力是有上線的,我們可以搭建主從同步集群實現redis的讀寫分離:master負責寫數據,slave只負責讀數據。

? ? ? ? 然后,哨兵機制保證了redis的高可用性:哨兵機制可以實現主從集群的自動故障恢復,里面就包含了對主從服務的檢測、自動故障恢復和通知;如果master故障,sentinel會重新選取一個slave作為新的master,當master恢復會自動下降為slave。同時當redis實現故障轉移,sentinel會向redis客戶端通知信息變化。

2.如何解決redis的集群腦裂問題

? ? ? ? redis的哨兵模式一般會因為網絡等原因出現腦裂問題。也就是,master、slave和sentinel處于不同的網絡分區,sentinel心跳機制檢測不到master,會重新選舉一個slave作為新的master,但是舊的master并未下線,仍在寫入數據,新的master無法同步,當網絡恢復,舊的master下降為slave,就會導致丟失大量數據。

? ? ? ? 我知道的有以下幾種方法可以避免和減輕腦裂問題:

? ? ? ? 第一,設置合適的哨兵quonum,一般為N/2+1(其中N為哨兵節點數)。

? ? ? ? 第二,啟用主節點寫入保護,在redis.conf中添加:至少要有1個從節點連接(min-slaves-to-write 1)和從節點復制延遲不超過10秒(min-slaves-max-lag 10)才能同步數據。

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

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

相關文章

1.2.3_2 TCP/IP模型

在這個視頻中,我們要探討TCP/IP模型。對于TCP/IP模型考試的要求是這樣的,首先我們需要記住它各個層次的名稱和順序,以及我們需要了解TCP/IP 模型和OSI參考模型,它們在設計理念上有哪些區別,設計理念的區別又導致了TCP/…

EVOLVEpro安裝使用教程-蛋白質語言模型驅動的快速定向進化

寫在前面:蛋白質是生命活動的基石,其功能和序列之間的復雜關系長期以來吸引著科學家們的關注。盡管深度突變掃描等實驗方法可以解析蛋白質突變的功能影響,但這些技術的應用范圍局限于序列空間的一小部分。近年來,基于蛋白質語言模…

【Linux】Rocky Linux 清華鏡像源安裝 GitLab

使用清華鏡像源安裝 GitLab 地址:清華鏡像源 1. 搜索 gitlab,我們選擇 gitlab-ce 社區版進行安裝 2. 新建 /etc/yum.repos.d/gitlab-ce.repo,內容為 注意:el$releasever 是清華鏡像源內的文件夾版本 [gitlab-ce] nameGitlab C…

【龍澤科技】新能源汽車維護與動力蓄電池檢測仿真教學軟件【吉利幾何G6】

產品簡介新能源汽車維護與動力蓄電池檢測仿真教學軟件是依托《全國職業院校技能大賽》“新能源汽車維修”賽項中“新能源汽車維護與動力蓄電池檢測” 競賽模塊,自主開發的一款仿真教學軟件。軟件采用仿真技術對車輛進行指定維護作業,并對動力蓄電池總成進…

UE5多人MOBA+GAS 18、用對象池來設置小兵的隊伍的生成,為小兵設置一個目標從己方出生點攻打對方出生點,優化小兵的血條UI

文章目錄根據小兵隊伍更換小兵的皮膚管理小兵的生成使用對象池來管理小兵的生成為小兵設置一個目標小兵生成完整代碼調整一下小兵的UI根據小兵隊伍更換小兵的皮膚 懶得開UE了,增加一個Minion類繼承基類角色CCharacter // 幻雨喜歡小貓咪#pragma once#include &qu…

Clojure持久化數據結構的底層實現

文章目錄一、Clojure的持久化數據結構二、向量(Vector)/Map的底層結構?1. HAMT 哈希數組映射字典樹(1)簡介(2)HAMT 的核心思想(3)HAMT 的結構?a. 基本組成?b. 樹的分支因子?(4)H…

面試150 二叉樹展開為鏈表

思路 思路:使用列表存儲先序遍歷的相關節點。然后遍歷列表,分別獲取前驅節點和當前節點,將前驅節點的左指針指向空,前驅節點的右指針指向當前節點。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, …

代碼隨想錄算法訓練營第十七天

目錄 LeetCode.654 最大二叉樹 題目鏈接 最大二叉樹 題解 解題思路 LeetCode.617 合并二叉樹 題目鏈接 合并二叉樹 題解 解題思路 LeetCode.700 二叉搜索樹中的搜索 題目鏈接 二叉搜索樹中的搜索 題解 解題思路 解題思路 LeetCode.98 驗證二叉搜索樹 題目鏈接 驗…

pycharm無法識別pip安裝的包

在使用conda創建一個新的環境后,有些包通過pip的方式安裝更方便有效,若在pip安裝后,遇到該環境沒有此包,或pycharm監測不到此包,通常是pip的環境指向有問題。 解決措施: # 首先檢查當前pip的指向 which pip…

Elasticsearch 的 `modules` 目錄

Elasticsearch 的 modules 目錄是存放**核心功能模塊**的目錄,這些模塊是 Elasticsearch 運行所必需的基礎組件,**隨官方發行版一起提供**,但設計上允許通過移除或替換模塊來**定制化部署**(比如構建一個最小化的 Elasticsearch 實…

https——TCP+TLS

https——TCPTLS主題:基于mbedtls-2.16.0,驗證TLS會話復用功能驗證環境:1.TLS服務端2.TLS客戶端2.1 基于Sesssion ID2.1.1mbedtls-2.16.0庫的宏配置2.1.2 初始化配置2.1.3 TCP連接2.1.4 首次TLS連接2.1.4.1 發送加密算法列表2.1.4.2 選擇加密…

uni-app uni-push 2.0推送圖標不展示問題

問題現象:我在uni-app的配置文件,配置了推送的大圖標小圖標發現在真機測試無法展示配置的推送圖標問題 官網文檔:開通 | uni-app官網 解決方法: 在uni-app官網中說的并不是很清楚只給了一個簡單的示例,配置并沒有告訴我…

scp:上傳大型數據集到實驗室服務器

我通過百度網盤下載了大概200GB的LUNA-2016的肺結節CT數據。實驗是在實驗室服務器上進行的,我現在需要將本地的數據集傳輸到實驗室的服務器上。我已經通過remote-ssh連接上了實驗室的服務器,但是如果通過這個插件上傳數據的話,一方面不支持上…

量子計算突破:8比特擴散模型實現指數級加速

目錄 一、量子擴散模型(Quantum Diffusion) 二、DNA存儲生成(Biological-GAN) 三、光子計算加速 四、神經形態生成 五、引力場渲染 六、分子級生成 七、星際生成網絡 八、元生成系統 極限挑戰方向 一、量子擴散模型&…

Flask3.1打造極簡CMS系統

基于Flask 3.1和Python 3.13的簡易CMS以下是一個基于Flask 3.1和Python 3.13的簡易CMS管理系統實現方案,包含核心功能和可運行代碼示例。環境準備安裝Flask和其他依賴庫:pip install flask3.1.0 flask-sqlalchemy flask-login配置數據庫在config.py中設置…

用 Node.js 構建模塊化的 CLI 腳手架工具,從 GitHub 下載遠程模板

本文將手把手帶你構建一個支持遠程模板下載、自定義項目名稱,并完成模塊化拆分的 CLI 腳手架工具,適用于初創項目、團隊內部工具或者開源項目快速初始化。🧩 為什么要自己造一個 CLI 腳手架? 在日常開發中,我們常用腳手…

08.如何正確關閉文件

如何正確關閉文件(File Handling Best Practices) 文件操作是日常開發中非常常見的任務,正確關閉文件對于避免資源泄漏尤為關鍵。錯誤的文件關閉方式可能導致文件未保存、鎖定或其他異常。 1. 常見的錯誤方式:手動 close() 許多初學者會手動調用 close() 關閉文件,這在異…

算法入門--動態規劃(C++)

深入淺出掌握動態規劃核心思想,圖文并茂實戰代碼 什么是動態規劃? 動態規劃(Dynamic Programming, DP) 是一種高效解決多階段決策問題的方法。它通過將復雜問題分解為重疊子問題,并存儲子問題的解(避免重…

[2025CVPR]GNN-ViTCap:用于病理圖像分類與描述模型

論文結構解析? 本文采用經典學術論文結構: ?引言?:闡述病理圖像分析的挑戰與現有方法局限性?相關工作?:系統梳理MIL、視覺語言預訓練和生物醫學語言模型三大領域?方法?:詳細闡述GNN-ViTCap四階段架構?實驗?:在BreakHis和PatchGastric數據集驗證性能?討論?:通…

Java SE--圖書管理系統模擬實現

一.設計思路首先這個系統可以由倆種用戶使用,分別為管理者用戶和普通者用戶,根據不同的用戶有不同的界面,每個界面有不同的功能。二.代碼實現創建三個包和一個類book包:包括Book類和Booklist類Book類:package book; pu…