Redis高可用集群-哨兵模式(Redis-Sentinel)

来源:https://www.cnblogs.com/starluke/archive/2019/10/24/11735081.html
-Advertisement-
Play Games

前言 Redis哨兵模式,用現在流行的話可以說就是一個“哨兵機器人”,給“哨兵機器人”進行相應的配置之後,這個"機器人"可以7*24小時工作,它能能夠自動幫助你做一些事情,如監控,提醒,自動處理故障等。 Redis-sentinel簡介 Redis-sentinel是Redis的作者antirez, ...


 前言 Redis哨兵模式,用現在流行的話可以說就是一個“哨兵機器人”,給“哨兵機器人”進行相應的配置之後,這個"機器人"可以7*24小時工作,它能能夠自動幫助你做一些事情,如監控,提醒,自動處理故障等。   Redis-sentinel簡介 Redis-sentinel是Redis的作者antirez,因為Redis集群的被各大公司使用,每個公司要寫自己的集群管理工具,於是antirez花了幾個星期寫出了Redis-sentinel。   Redis 的 Sentinel 系統用於管理多個 Redis 伺服器(instance),Redis 的 Sentinel 為Redis提供了高可用性。使用哨兵模式創建一個可以不用人為干預而應對各種故障的Redis部署。   該系統執行以下三個任務:   監控(Monitoring):Sentinel會不斷地檢查你的主伺服器和從伺服器是否允許正常。 提醒(Notification):當被監控的某個Redis伺服器出現問題時,Sentinel可以通過API向管理員或者其他應用程式發送通知。 自動故障遷移(Automatic failover):
(1)當一個主伺服器不能正常工作時,Sentinel會開始一次自動故障遷移操作,他會將失效主伺服器的其中一個從伺服器升級為新的主伺服器,並讓失效主伺服器的其他從伺服器改為複製新的主伺服器; (2)客戶端試圖連接失敗的主伺服器時,集群也會向客服端返回新主伺服器的地址,是的集群可以使用新主伺服器代替失效伺服器。

sentinel的分散式特性 Redis Sentinel 是一個分散式系統, 你可以在一個架構中運行多個 Sentinel 進程(progress), 這些進程使用流言協議(gossip protocols)來接收關於主伺服器是否下線的信息, 並使用投票協議(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪個從伺服器作為新的主伺服器。   單個sentinel進程來監控redis集群是不可靠的,當sentinel進程宕掉後(sentinel本身也有單點問題,single-point-of-failure)整個集群系統將無法按照預期的方式運行。所以有必要將sentinel集群,這樣有幾個好處:   有一些sentinel進程宕掉了,依然可以進行redis集群的主備切換;   如果只有一個sentinel進程,如果這個進程運行出錯,或者是網路堵塞,那麼將無法實現redis集群的主備切換(單點問題);   如果有多個sentinel,redis的客戶端可以隨意地連接任意一個sentinel來獲得關於redis集群中的信息   一個健壯的部署至少需要三個哨兵實例。   三個哨兵實例應該放置在客戶使用獨立方式確認故障的電腦或虛擬機中。例如不同的物理機或不同可用區域的虛擬機。

Redis-Sentinel高可用場景演示 場景1:主伺服器master宕機 當主伺服器master宕機,那麼Sentinel會通過選舉(演算法)機制,從Salve中選出一個作為新Master。 大概原理是當選出一個Slave要作為Master的時候,會發送命令slaveofno one來取消選中的這個slave,使其成為Master。哨兵會發送給其他從伺服器Slave配置選中的這個為新主伺服器Master,並刪除監聽列表中出現故障的Master伺服器。 (1)關閉掉 6379主伺服器
(2)查看觀察選舉新的master的過程和顯示了failover的過程,整個日誌信息還是比較完整的。最後選舉了6381為主伺服器! 
(3)查看6381伺服器信息,角色為主,從伺服器6380!

場景2:之前故障的6379 master重新啟動

(1)啟動6379服務,發現6379成為6381的從伺服器!
(2)查看6381伺服器狀態信息:原來的master自動切換成slave,不會自動恢覆成master。

場景3:從伺服器Slave宕機和重啟

(1)關閉6380從伺服器
(2)Sentinel日誌
(3)查看住伺服器6381狀態信息
(4)啟動從伺服器6380
(5)查看住伺服器6381狀態信息:6380又回來了!

總結 Redis-Sentinel是Redis官方推薦的高可用性(HA) 解決方案,Redis-sentinel本身也是一個獨立運行的進程,它能監控多個master-slave集群,發現master宕機後能進行自動切換。Sentinel可以監視任意多個主伺服器(復用),以及主伺服器屬下的從伺服器,併在被監視的主伺服器下線時,自動執行故障轉移操作。 為了防止sentinel的單點故障,可以對sentinel進行集群化,創建多個sentinel。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、模板類型錯誤: 錯誤原因:在models中漏掉了return: 【這裡】加上return即可。 二、url相關錯誤 靜態文件無法訪問,如樣式出不來 css樣式總出不來,折騰了一個多小時,原來,urlpatterns 寫成這樣: 我把 [登錄註冊] url後面也寫成 = 而並非+= ,這就造成了u ...
  • spring註解之@Import 【1】@Import ​ 參數value接收一個Class數組,將你傳入的類以全類名作為id加入IOC容器中 ​ 比較簡單,此處不做詳細解釋 【2】ImportSelector ​ ImportSelector強調的是復用性,使用它需要創建一個類實現ImportSe ...
  • # Eureka錯誤解決方法 ## security.basic.enabled 配置過時或不可用預設情況下:用戶名:user密碼:啟動應用在控制台會輸出,如下圖: 也可以通過如下屬性配置:spring.security.user.namespring.security.user.password如 ...
  • [TOC] Event事件 用來控制線程的執行 出現 ,就會把這個線程設置為False,就不能執行這個任務; 只要有一個線程出現 ,就會告訴Event對象,把有 的用戶全部改為True,剩餘的任務就會立馬去執行。由一些線程去控制另一些線程,中間通過Event。 進程池與線程池 1. 進程池與線程池是 ...
  • Go語言基礎之數組 本文主要介紹Go語言中數組(array)及它的基本使用。 Array ( 數組 ) 數組是同一種數據類型元素的集合。 在Go語言中,數組從聲明時就確定,使用時可以修改數組成員,但是數組大小不可變化。 基本語法: 數組定義: 比如: , 數組的長度必須是常量,並且長度是數組類型的一 ...
  • [TOC]   c++是一種中級語言,是c的擴充,是一種面向對象的程式設計語言,可以運行到多個平臺。這裡直接講語法。   基礎c++模板: javascript 函數類型 函數名(參數表);例如: int max(int x,int y,int z); int ...
  • 恢復內容開始 需要安裝三個庫(requests,BeautifulSoup4,lxml) pip install requests BeautifulSoup4 lxml 彈幕消息會滾動在終端上 且會在當前目錄下生成以主播名字命名的文件 恢復內容結束 ...
  • 1 背景 像我們去面試一些大公司的時候,就會遇到一些關於緩存的問題。可能很多同學都是接觸過,多多少少瞭解一些,但是如果沒有好好記錄這些內容,不熟練精通的話,在真正面試的時候,就很難答出來了。 在我們的平常的項目中多多少少都會使用到緩存,因為一些數據我們沒有必要每次查詢的時候都去查詢到資料庫。 特別是 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...