1. 程式人生 > >Redis Sentinel基本實現原理

Redis Sentinel基本實現原理

一.出現的背景: Redis 主從複製模式下一旦主節點由於故障不能提供服務,需要人工將從節點晉升為主節點,同時還要通知應用方更新主節點地址,對於很多應用這種場景的這種故障處理方式是非常浪費人力的。為了提供Redis主從的高可用性,Redis從2.8版本開始提供Redis Sential(哨兵)架構來解決問題。   二.架構圖:   三.Redis Sentinel的高可用方案主要介紹: 由上圖可以看到Redis Sentinel是一個分散式架構,包含若干個Sentinel節點和Redis資料節點,每個Sentinel節點會對資料節點和其餘Sentinel節點進行監控,當它發現節點不可達時,會對節點做下線標識,如果被標識的是主節點,它還會和其他Sentinel節點進行“協商”,當大多數Sentinel節點都認為主節點不可達時他們會選舉出一個Sentinel節點來完成自動故障轉移的工作,選舉出新的主節點,將老的主節點降級為從節點,同時會將這個變化實時通知給Redis應用方。   四.基本實現原理: 1.執行三個定時任務用於獲取及同步各端(主節點、從節點、Sentinel節點)資訊:    A.每隔10秒獲得主從節點資訊;(通過info命令)    B.每隔2秒同步主節點及當前sentinel節點資訊; (通過redis的訂閱功能)    C.每隔1秒各個Sentinel節點實現同其他端之間的心跳檢測;(通過ping命令)   2.下線有問題的節點:    主觀下線:每個Sentinel節點會每隔1秒對主從節點及其他Sentinel節點發送ping命令做心跳檢測,當這些節點超過down-after-milliseconds沒有進行有效回覆時Sentinel節點會對該節點做失敗判定,這個行為即主觀下線。(該主觀下線的判定是當前一個Sentinel的判定所以也存在誤判的可能,比如剛好那時的網路問題)     客觀下線:當Sentinel接待主觀下線的是主節點時,該Sentinel會通過sentinel is-master-down-by-addr命令其他Sentinel節點詢問對主節點的判斷,當超過quorum(判定主節點最終不可達所需的票數)個數時,Sentinel節點會認為該主節點確實有問題,這時Sentinel節點會做出客觀下線的決定。   3.領導者Sentinel節點選舉(Raft演算法)用於去做故障轉移的leader(即選誰去領導這次故障轉移,現實中一般是誰先發現了這個故障誰就成為leader的可能性最大,而且這個選舉的過程很快)。    該選舉過程主要包含:     (1)每個線上的Sentinel節點都有資格成為領導者,當它確認主觀下線時會向其他Sentinel節點發送sentinel is-master-down-by-addr命令,要求將自己設定為領導著。     (2)收到命令的Sentinel節點如果沒同意過其他Sentinel節點的sentinel is-master-down-by-addr命令,則將統一改請求,否則拒絕。     (3)如果該Sentinel節點發現自己的票數已經大於等於max(quorum,num(sentinels)/2+1),那麼它將成為領導者。(現實中一旦一個Sentinel節點獲得了max(quorum,num(sentinels)/2+1) 的票數,其他Sentinel節點再去確認已經沒有意義因為每個Sentinel節點只有一票)     (4)如果此過程沒有選舉出領導者,則將進入下一次類似這樣的選舉。   4.故障轉移:    (1).Sentine領導者節點從從節點列表中選出一個節點作為新的主節點,選擇過程如下圖:            

相關推薦

Redis Sentinel基本實現原理

一.出現的背景: Redis 主從複製模式下一旦主節點由於故障不能提供服務,需要人工將從節點晉升為主節點,同時還要通知應用方更新主節點地址,對於很多應用這種場景的這種故障處理方式是非常浪費人力的。為了提供Redis主從的高可用性,Redis從2.8版本開始提供Redis Sential(哨兵)架構來解決

Redis 通信協議-了解 Redis 客戶端實現原理

dubbo redis java 簡介幾乎所有的主流編程語言都有Redis的客戶端(http://redis.io/clients),不考慮Redis非常流行的原因,如果站在技術的角度看原因還有兩個:客戶端與服務端之間的通信協議是在 TCP 協議之上構建的。客戶端和服務器通過 TCP 連接來進行數

Java web server 基本實現原理

tro 主線程 inpu 請求報文 永遠 原理 args ket io阻塞 public class WebServer { //服務端Socket只要一個,所以定義成static, 同一時間只能一個線程訪問(主線程) private static Se

MySQL DISTINCT 的基本實現原理

DISTINCT 實際上和 GROUP BY 操作的實現非常相似,只不過是在 GROUP BY 之後的每組中只取出一條記錄而已。所以,DISTINCT 的實現和 GROUP BY 的實現也基本差不多,沒有太大的區別。同樣可以通過鬆散索引掃描或者是緊湊索引掃描來實

Redis資料庫的實現原理

知道了Redis的各種資料結構,物件結構,那麼Redis是如何儲存資料的,又是如何操作資料的呢,Redis裡面的命令是怎麼實現的呢?這一系列問題值得我們思考 一.Redis維護多個數據庫 Redis內部維護一個db陣列,每個db都是一個數據庫,預設情況下Redis會建立16

Redis釋出訂閱實現原理

釋出訂閱中使用到的命令就只有三個:PUBLISH,SUBSCRIBE,PSUBSCRIBE PUBLISH 用於釋出訊息 SUBSCRIBE 也叫頻道訂閱,用於訂閱某一特定的頻道 PSUBSCRIBE 也叫模式訂閱,用於訂閱某一組頻道,使用glob的方式,比如xxx-*可以匹配xxx-a,和xxx-b,xx

Redis Sentinel基本介紹(翻譯以及總結)

目錄 Redis Sentinel翻譯文件(2015.12.25) Redis Sentinel介紹 Redis Sentinel 為Redis提供了高可用的實現。通俗來說就是你可以部署一套無需人為干預即可防災的Redis環境。 RS同時為客戶端提供了其他諸如監控,通知的功能。 從全域性來說RS的功能如下:

Redis過期策略 實現原理

我們在使用redis時,一般會設定一個過期時間,當然也有不設定過期時間的,也就是永久不過期。 當我們設定了過期時間,redis是如何判斷是否過期,以及根據什麼策略來進行刪除的。 1.redis設定過期時間:expire 只針對頂級key有效,即雜湊結構不支援過期  

通過Servlet理解MVC框架的基本實現原理

一.概述 B/S與C/S最主要的區別在於分發方面。 二.通過Servlet講解MVC框架的基本實現原理 servlet裡需要引數,轉換型別,處理業務邏輯和寫死跳轉頁面,而且取得引數都是字串。 這裡採用框架自動轉換引數型別,配置頁面,使得開發更靈活

集下拉重新整理、自動載入和側滑選單的RecyclerView基本實現原理

目錄 目錄 前言 結尾 前言   現在這個功能的框架也挺多的了。之所以要寫是因為這個框架是自己親手實現的。說起來有點小激動,這是我正經寫出來的第一個框架。對於”不要重複造輪子”這句話,我一直不是太認同,得從不同的維度看。如果從使用上

利用redis-sentinel+keepalived實現redis高可用

目標、需求: 為上層應用提供高可靠、低延遲、低(無限接近0)資料損失的Redis快取服務 方案概述: 採用同一網路內的三臺主機(可以是物理主機、虛擬機器或docker容器),要求三臺主機之間都能相互訪問,每一臺主機上都安裝redis-server、redis-sen

Redis】map實現原理

雜湊表是一個很常用的資料結構,不同的平臺對它有不同的實現。下面是redis的實現。 首先是redis中與雜湊表有關的資料結構定義。 節點定義: 這裡有next指標的存在說明這是一個採用拉鍊法構建的雜湊表。key是鍵,值是一個union,可以是以下的任意一種型別:指標,ui

Redis分散式鎖實現原理 java版

/** * 鎖在給定的等待時間內空閒,則獲取鎖成功 返回true, 否則返回false * @param subKey * @param timeout 如果timeout=0,取不到鎖時,不等待,直接返回. * @param unit * @return */ public bo

記憶體動態分配函式malloc的基本實現原理

    malloc是C語言最常用的標準庫函式之一,用於在程式執行中動態地申請記憶體空間。我們都會使用它,其函式原型為: extern void *malloc(unsigned int num_by

Redis復制實現原理

www long 封裝 amp col 核心 做什麽 數據 slave 摘要 我的前一篇文章《Redis 復制原理及特性》已經介紹了Redis復制相關特性,這篇文章主要在理解Redis復制相關源碼的基礎之上介紹Redis復制的實現原理。 Redis復制實現原理 應用場

分散式鏈路追蹤框架的基本實現原理

[TOC] 本系列共有三篇: .NET Core 中的日誌與分散式鏈路追蹤 分散式鏈路追蹤框架的基本實現原理(當前) 開源一個簡單的相容 Jaeger 的框架 檸檬([Lemon丶](https://www.cnblogs.com/liuhaoyang/))大佬在一月份開業了檸檬研究院,研究院指導

Redis Sentinel實現的機制與原理詳解

過程 正則 發送 進行 還需 生產環境 根據 stat 時間 原文:Redis Sentinel實現的機制與原理詳解序言 Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案。實際上這意味著你可以使用Sentinel模式創建一個可以不用人為幹預而應對

Redis Sentinel(哨兵) 和 Master+Slave(主從)的實現原理分析

最近需要將專案的的Redis的快取介入CacheCloundpingt來管理Redis的,所以找了下相關資料來更好的鞏固下Redis的相關知識; 原文地址(https://blog.csdn.net/qq_26334813/article/details/78298025?locationNum=

Redis Sentinel的使用(基本原理、一主兩從三Sentinel部署、客戶端程式碼使用)

Redis Sentinel 1. 基本概念 1.1 背景:主從複製的問題 Redis 的主從複製模式可以將主節點的資料改變同步給從節點,這樣從節點就可以起到兩個用: 第一,作為主節點的一個備份,一旦主節點出了故障不可達的情況,從節點可以作為後備“頂” 上來

Sentinel 哨兵-實現Redis高可用

客戶端連接 信息 客戶 redis 分布 nds 的確 mic sof 概述Redis哨兵為Redis提供了高可用性。實際上這意味著你可以使用哨兵模式創建一個可以不用人為幹預而應對各種故障的Redis部署。哨兵模式還提供了其他的附加功能,如監控,通知,為客戶端提供配置。下面