Redis教程——哨兵

在上篇文章我們學習了Redis教程——主從復制,這篇文章我們學習Redis教程——哨兵監控。

在主從復制中如果主機發生宕機,從機Redis會一直等到主機的恢復,這樣會導致只能進行讀操作,不能進行寫操作,這大大降低了系統的高可用性。為了解決這個問題,Redis提供了哨兵監控。

哨兵監控

哨兵監控是吹哨人巡查監控后臺主機Redis是否故障,如果故障了根據投票數自動將某個從機Redis轉換為新主機Redis,繼續對外服務。

如下圖所示:

這樣大大提高了Redis的高可用性。

通過哨兵監控,我們可以實現:

  • 主從監控:監控主從Redis運行是否正常;

  • 消息通知:哨兵可以將故障轉移的結果發送給客戶端;

  • 故障轉移:如果主機Redis異常,則會進行主從切換,將其中一個從機Redis作為新主機Redis;

  • 配置中心:客戶端通過連接哨兵來獲取當前Redis服務的主節點地址。

注意:哨兵一般是有多個,負責自動監控和維護集群,不存放數據。

配置文件

哨兵的默認配置文件為sentinel.conf,大家可以在Redis的安裝路徑中找到,在哨兵配置,通過如下圖配置項監聽主機Redis,

其配置項語法格式如下:

sentinel?monitor?<master-name>?<ip>?<redis-port>?<quorum>??#?設置監控的主機Redis服務器
sentinel?auth-pass?<master-name>?<password>?????????#?設置連接主機Redis服務的密碼

由于網絡是不可靠的,哨兵可能會因為網絡阻塞誤認為一個主機Redis發生宕機,所以一般情況下是有多個哨兵來監控Redis,互相溝通某個Redis是否真的發生宕機。

配置代碼中的quorum表示有多少個哨兵認為主機Redis發生宕機就進行從機Redis選舉新的主機Redis。

除了上面的兩條配置項,哨兵還有如下配置項,

sentinel?down-after-milliseconds?<master-name>?<milliseconds>??#?指定多少毫秒后,主機節點沒有應答哨兵,此時哨兵主觀上認為主節點下線
sentinel?parallel-syncs?<master-name>?<nums>??#?表示允許并行同步從機Redis個數,當主機Redis掛后,哨兵會選出新的主機Redis,此時,剩余的從機Redis會向新主機Redis發起同步數據
sentinel?failover-timeout?<master-name>?<milliseconds>??#?故障轉移超時時間,進行故障轉移時,如果超過設置的毫秒,表示故障轉移失敗
sentinel?notification-script?<master-name>?<script-path>??#?配置當某一個事件發生時所需要執行的腳步
sentinel?client-reconfig-script?<master-name>?<script-path>??#?客戶端重新配置主節點參數腳步

示例

配置

為了方便演示,我們準備了三臺服務器、三個哨兵,沒服務器的可以使用VMware虛擬機,如下圖所示:

這里我們已經配置好了主從關系,大家不懂怎么配置可以參考之前的文章:Redis教程——主從復制。

主機Redis有可能會變為從機,需要訪問新主機Redis的密碼,所以主機Redis配置也要添加masterauth配置項。

因為缺少足夠的服務器,我們把三個哨兵都配置在主機Redis的服務器中。

為了更直觀地查看哨兵的配置項,我們這里整理了目前所需的配置項,如下所示:

bind?0.0.0.0???#?服務監聽地址,用于客戶端連接
daemonize?yes???#?開啟哨兵
protected-mode?no??#?允許外界連接
port?26379????#?哨兵端口
logfile?"/myRedis/sentinel26379.log"??#?哨兵日志文件路徑
pidfile?/var/run/redis-sentinel26379.pid??#?哨兵pid文件
dir?/myRedis???????#?工作目錄
sentinel?monitor?mymaster?47.119.21.164?6379?2??#?設置監控的主機Redis服務器
sentinel?auth-pass?mymaster?123456???#?配置主機Redis的登錄密碼

由于三個哨兵都配置在同一個服務器中,所以不同哨兵的配置文件中端口號有所不同,所以上面的配置項中,port參數,哨兵日志、pid文件都需要稍微作調整。

最終我們在myRedis文件夾創建了三個哨兵配置文件,如下圖所示:

啟動哨兵

啟動哨兵有兩種方式:

redis-sentinel?哨兵配置文件路徑?--sentinel
redis-server?哨兵配置文件路徑?--sentinel

如下圖所示:

成功啟動哨兵后,會在你設置的哨兵日志文件路徑下生成日志文件,其中一個日志文件如下圖所示:

同時之前的哨兵配置文件也會發生變化,如下圖所示:

該新增的內容簡單來說就是哨兵已經知道了Redis主從關系并正在監聽Redis。

模擬主機宕機

通過關閉主機Redis的方式,模擬主機Redis發生宕機,發生宕機后,哨兵會在后臺進行一系列操作,所以這次的shutdown操作會延遲一下,如下圖所示:

主機Redis發生宕機后,從機Redis需要重新讀取網絡的規劃,所以從機Redis執行操作命令時,可能會報如下錯誤:

Error:?Server?closed?the?connection

我們只需稍微等待一下,錯誤就會自動消失。

接下來我們看哨兵日志文件,如下圖所示:

簡單來說,當主機Redis發生宕機后,一個哨兵主觀認為主機Redis宕機,多個哨兵進行投票后,客觀認為Redis已經宕機,接著選舉新主機Redis并確定主從關系。

在這個過程中,哨兵通過Raft算法選出一個哨兵為領導,推動新主機Redis的選舉、所有Redis配置文件、哨兵配置文件的修改。

Raft算法的基本思路是先到先得。

其中:

Redis配置文件將原來的replicaof配置項刪除或修改了,并在配置文件末尾添加了如下代碼:

#?Generated?by?CONFIG?REWRITE
latency-tracking-info-percentiles?50?99?99.9
save?3600?1
save?300?100
save?60?10000
user?default?on?#8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92?~*?&*?+@all

該代碼主要是用于RDB持久化的配置。

原主機Redis末尾添加了如下代碼:

#?Generated?by?CONFIG?REWRITE
latency-tracking-info-percentiles?50?99?99.9
replicaof?111.230.32.139?6379
user?default?on?#8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92?~*?&*?+@all

該代碼主要是用于配置主從關系,所以當原主機Redis恢復后,會變成新主機Redis的從機。

在哨兵配置文件中,主要對監聽的主機Redis服務器IP,主從關系做了修改,如下圖所示:

選舉原理

通過上面的內容,我們可以知道當一個主從配置中主機Redis失效后,哨兵會選舉出一個新的主機Redis來接替原主機Redis的工作。

選舉原理如下圖所示:

首先Redis配置文件中的slave-priority或replica-priority權限最高的Redis(數字越小優先級越高),如下圖所示:

優先級一樣高就對比復制數據的偏移量offset最大的從機Redis,偏移量一樣大就對比ID號,ID號最小的就成為新主機Redis。

選舉結束后,哨兵領導者會對選舉出來的新主機執行slaveof no one操作,將其提升為主機Redis,再向從機發送命令,讓剩余的從機成為新主機的從機,再讓原主機降級為從機并恢復正常工作。

好了,Redis教程——哨兵監控就講到這里。

公眾號:白巧克力LIN

該公眾號發布Python、數據庫、Linux、Flask、Django、自動化測試、Git、算法、前端、服務器等相關文章!

- END -

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

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

相關文章

資料同化 | 搭建docker環境-1

Community Gridpoint Statistical Interpolation (GSI) system DTC 是一個分布式設施&#xff0c;NWP 社區可以在這里測試和評估用于研究和操作的新模型和技術。 DTC的目標包括&#xff1a; 鏈接研究和操作社區 研究成果轉化為實際操作的速度 加快改善天氣預報 開發和測試有…

Cocos Creator 3.8.x 透明帶滾動功能的容器

ScrollView 是一種帶滾動功能的容器 1、刪除ScrollView下Sprite組件的SpriteFrame 2、ScrollView下scrollBar的Sprite組件的Color設為&#xff1a;FFFFFF00 3、ScrollView下view的Graphics組件的FillColor設為&#xff1a;FFFFFF00

IP代理如何幫助SEO進行優化?

IP代理在SEO優化中扮演著重要的角色&#xff0c;它通過多種方式幫助提升網站的搜索排名和可見性。以下是IP代理如何幫助SEO進行優化的詳細闡述&#xff1a; 第一點&#xff0c;數據采集與分析&#xff1a;在SEO過程中&#xff0c;大量的數據是必不可少的。通過使用IP代理&…

如何區分os.walk()與os.scandir()

os.walk() import os for dirpath, dirname, files in os.walk(./):# dirpath 當前——路徑# dirname 當前——路徑——下——文件夾名——列表# files 當前——路徑——下——文件——列表dirpath 當前路徑 ./ dirname 當前路徑下面文件夾名稱組成的列表&#xff0c;共3個文…

c++ std::shared_ptr學習

背景 c中智能指針shared_ptr用于自動管理資源&#xff0c;通過引用計數來記錄資源被多少出地方使用。在不使用資源時&#xff0c;減少引用計數&#xff0c;如果引用計數為0&#xff0c;表示資源不會再被使用&#xff0c;此時會釋放資源。本文記錄對c中std::shared_ptr的源碼學習…

攻防世界PHP2

1、打開靶機鏈接http://61.147.171.105:49513/&#xff0c;沒有發現任何線索 2、嘗試訪問http://61.147.171.105:49513/index.php&#xff0c;頁面沒有發生跳轉 3、嘗試將訪問 嘗試訪問http://61.147.171.105:49513/index.phps index.php 和 index.phps 文件之間的主要區別在于…

GNU Radio創建時間戳 C++ OOT塊

文章目錄 前言一、創建自定義的 C OOT 塊1、創建 timestamp_sender C OOT 模塊①、創建 timestamp_sender OOT 塊②、修改 C 代碼 2、創建 timestamp_receiver C OOT 模塊①、創建 timestamp_receiver OOT 塊②、修改 C 代碼 3、創建 delayMicroSec C OOT 模塊①、創建 delayMi…

Vue3實戰筆記(20)—封裝頭部導航組件

文章目錄 前言一、封裝頭部導航欄二、使用步驟總結 前言 Vue 3 封裝頭部導航欄有助于提高代碼復用性、統一風格、降低維護成本、提高可配置性和模塊化程度&#xff0c;同時還可以實現動態渲染等功能&#xff0c;有利于項目開發和維護。 一、封裝頭部導航欄 封裝頭部導航欄&am…

HFSS學習-day4-建模操作

通過昨天的學習&#xff0c;我們已經熟悉了HFSS的工作環境&#xff1b;今天我們來講解HFSS中創建物體模型的縣體步驟和相關操作。物體建模是HFSS仿真設計工作的第一步&#xff0c;HFSS中提供了諸如矩形、圓面、長方體圓柱體和球體等多種基本模型(Primitive)&#xff0c;這些基本…

新書速覽|MATLAB科技繪圖與數據分析

提升你的數據洞察力&#xff0c;用于精確繪圖和分析的高級MATLAB技術。 本書內容 《MATLAB科技繪圖與數據分析》結合作者多年的數據分析與科研繪圖經驗&#xff0c;詳細講解MATLAB在科技圖表制作與數據分析中的使用方法與技巧。全書分為3部分&#xff0c;共12章&#xff0c;第1…

tp8 設置空控制器和空方法

1、空控制器 單應用模式下&#xff0c;我們可以給項目定義一個Error控制器類 <?phpnamespace app\controller;class Error {/*** 空控制器中重寫魔術方法__call可以實現自定義錯誤提示&#xff0c;在這里可以提示找不到控制器* 注意&#xff1a;在基礎控制器BaseControll…

精英都是時間控!職場精英的完美一天~~~谷歌FB都在用的時間管理術!

如何超高效使用24小時 每個人的一天都只有24小時&#xff0c;使用時間的方法將決定整個人生。時間管理術并不提倡把自己忙死榨干&#xff0c;而是通過在合適的時間做合適的事情&#xff0c;把大腦機能發揮到極致&#xff0c;從而提高效率&#xff0c;節省下更多時間用于生活與…

(項目)-KDE巡檢報告(模板

金山云于12月26日對建行共計【30】個KDE集群,合計【198】臺服務器進行了巡檢服務。共發現系統風險【135】條,服務風險【1912】條,服務配置風險【368】條。 一、系統風險 1、風險分析(圖片+描述) (1)磁盤使用率高 問題描述多個集群的多臺服務器磁盤使用率較高,遠超過…

答辯PPT模版如何選擇?aippt快速生成

這些網站我愿稱之為制作答辯PPT的神&#xff01; 很多快要畢業的同學在做答辯PPT的時候總是感覺毫無思路&#xff0c;一竅不通。但這并不是你們的錯&#xff0c;對于平時沒接觸過相關方面&#xff0c;第一次搞答辯PPT的人來說&#xff0c;這是很正常的一件事。一個好的答辯PPT…

右鍵使用VSCode打開文件/文件夾目錄

右鍵使用VSCode打開文件/文件夾目錄 使用新電腦或清空了注冊列表之后&#xff0c;點擊右鍵“使用vscode”打開文件夾消失了&#xff0c;可以通過更改注冊列表增加回來。 實現&#xff1a; 右鍵在目錄空白處使用vscode打開目錄右鍵-用vscode(當前窗口)打開文件或目錄 右鍵-用vs…

簡述RocketMQ系統架構及其相關概念

一、概述 RocketMQ是一款高性能、高吞吐量的分布式消息隊列系統&#xff0c;它采用了分布式架構&#xff0c;支持多生產者和消費者并發讀寫&#xff0c;具有高可用性、高吞吐量、低延遲等特點。本文將對RocketMQ的系統架構進行詳細解析。 二、架構設計 RocketMQ采用了分布式架…

入門物聯網就是這么簡單——青創智通

工業物聯網解決方案-工業IOT-青創智通 MQTT&#xff0c;全稱為Message Queuing Telemetry Transport&#xff0c;是一種輕量級的發布/訂閱消息傳輸協議&#xff0c;廣泛應用于物聯網領域。 MQTT協議以其高效、可靠、靈活的特性&#xff0c;成為物聯網設備間通信的理想選擇。本…

升級版ComfyUI InstantID 換臉:FaceDetailer + InstantID + IP-Adapter

在使用ComfyUI的InstantID進行人臉替換時&#xff0c;一個常見問題是該工具傾向于保留原始參考圖的構圖&#xff0c;即使用戶的提示詞與之不符。 例如&#xff0c;即使用戶提供的是大頭照并請求生成全身照&#xff0c;結果仍是大頭照&#xff0c;沒有顯示出用戶所期望的構圖。…

MySQL_DDL語句

1.Data類臨時數據的弊端 我們之前在將ServletJSP配合處理請求的過程中 數據庫起到一個存取數據的作用 但是我們之前的案例中 數據是在Data類中臨時定義的 并不是從數據庫中獲取的 這樣做是不好的 因為每一次服務器關閉之后 那么部署在其上的類也會隨著卸載 緊接著和類相掛鉤的靜…

基于C#開發web網頁管理系統模板流程-登錄界面

前言&#xff0c;首先介紹一下本項目將要實現的功能 &#xff08;一&#xff09;登錄界面 實現一個不算特別美觀的登錄窗口&#xff0c;當然這一步跟開發者本身的設計美學相關&#xff0c;像蒟蒻博主就沒啥藝術細胞&#xff0c;勉強能用能看就行…… &#xff08;二&#xff09…