国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java開發(fā) - 深入理解Redis哨兵機制原理

這篇具有很好參考價值的文章主要介紹了Java開發(fā) - 深入理解Redis哨兵機制原理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

Redis的主從、哨兵模式、集群模式,在前文中都已經(jīng)有了詳細的搭建流程,可謂是手把手教程,也得到了很多朋友的喜歡。由于前文偏向于應(yīng)用方面,就導(dǎo)致了理論知識的匱乏,我們可能會用了,但卻不明所以,所以今天,博主就通過接下里的幾篇博客給大家分別講解Redis哨兵機制的原理和集群模式下的原理。

導(dǎo)讀

在開始講解之前,博主把前面幾篇博客的地址放在這里供大家去翻閱:

Java開發(fā) - 讓你少走彎路的Redis的主從復(fù)制

Java開發(fā) - 讓你少走彎路的Redis主從實現(xiàn)單節(jié)點哨兵模式

Java開發(fā) - 讓你少走彎路的Redis集群搭建

在這三篇Redis內(nèi)容中,已經(jīng)從主從到哨兵再到集群給大家一步步做了詳細的應(yīng)用講解,如果你對Redis的使用還存在一定的問題的話不妨去看看,興許會有一些新的收獲。

多哨兵模式的疑問

在?Redis集群搭建這篇博客的末尾,博主有這么一段話,見下方:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

?一個sentinel哨兵大家會了,但是多個sentinel哨兵怎么讓他們彼此之間也能監(jiān)聽到呢?誠如博主所說,多個哨兵和一個哨兵的使用方法是一樣的,只需要監(jiān)聽主節(jié)點,其他的,哨兵會自動完成。

不信?博主專門搭建了一個多哨兵的Redis,我們來看看。

這是我的Redis和Sentinel配置文件:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

Redis架構(gòu)如下:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

就是簡單的一主二從。

Sentinel的架構(gòu)如下:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

我們分別啟動三個Redis和三個Sentinel:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

至于配置,就和我博客里面的一摸一樣,大家可以照著自己做,這里是演示多個sentinel的工作情況。

如果你要是自己看了報文,你就會發(fā)現(xiàn)細節(jié):

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

這個26380的:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

這是26379的:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

唯一配置變的地方還真有一個,就是在sentinel的配置文件中:

sentinel monitor mymaster 127.0.0.1 6379 2

監(jiān)聽的主節(jié)點后面的數(shù)字變了,一個sentinel的時候?qū)?,三個sentinel的時候要過半的sentinel認為主節(jié)點掛掉才能故障轉(zhuǎn)移和切換,三個,那過半就寫2了,如果你有更多sentinel,這個數(shù)字也要改變。當然,你寫1也行,但可能出現(xiàn)誤判的情況。

測試關(guān)閉主節(jié)點:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

已關(guān)閉,此時看從節(jié)點:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

出現(xiàn)了短暫的連接被拒絕的情況,此時我們發(fā)現(xiàn)sentinel沒有任何變化,大概也就是幾秒鐘的樣子,變化產(chǎn)生了:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

此時去看其他的sentinel節(jié)點,會發(fā)現(xiàn)有明顯的選舉過程:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

此時如果把sentinel6379下線掉之后,會發(fā)生什么?我們試試;

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

大概在幾秒后,sentinel做出了反應(yīng),同時輸出26379離線的通知,但是Redis那邊沒有任何的反應(yīng),這個正常,畢竟不是redis監(jiān)控哨兵,是吧??

到這里,還需要博主繼續(xù)下去嗎?一切已經(jīng)說明了問題。?多哨兵的模式按照博主的方式放心用就行了。

到此,多sentinel使用也算是給大家做了演示,加油哦!

Redis哨兵工作原理

從上面的測試來看,當主節(jié)點發(fā)生故障掛掉之后,大概時間是18s,sentinel感知到故障,執(zhí)行自動的故障遷移,當然,這個時間是可以自己調(diào)整的。為了了解這種工作機制,我們有必要來了解下sentinel的三種定時監(jiān)控任務(wù)。

INFO指令獲得最新節(jié)點拓撲圖

每個sentinel每隔10s就會向主節(jié)點發(fā)送INFO命令,然后獲取整個Redis節(jié)點的拓撲圖,這也是為什么,當有節(jié)點退出,或有節(jié)點加入時,sentinel能極快的感知到拓撲圖變化的原因,也是我們只需要指定主節(jié)點而不需要指定從節(jié)點的原因。

此時還沒有完,sentinel通過INFO命令感知到拓撲圖后,就發(fā)現(xiàn)了主節(jié)點下的其他從節(jié)點,等到下個10s后,就會同時向主節(jié)點和從節(jié)點發(fā)送INFO命令,以達到監(jiān)聽所有redis節(jié)點的目的。

此處應(yīng)該有圖,但是我好懶,我覺得大家應(yīng)該明白了這個道理了吧?

通過發(fā)布訂閱獲得Master節(jié)點和其他Sentinel的信息

每個sentinel間隔2s會向指定頻道發(fā)送自己關(guān)于主節(jié)點是否正常的判斷,同時還包含當前sentinel節(jié)點的信息,其他sentinel通過訂閱這個頻道就可以達到信息共享的目的,此時就可以判斷master節(jié)點是不是活的,sentinel節(jié)點是不是活的。

解釋下關(guān)于訂閱頻道的理解,對于監(jiān)視同一個主節(jié)點的多個Sentinel來說,一個Sentinel發(fā)送的信息會被其他Sentinel接收到,這其他Sentinel會根據(jù)這些信息來做出對master和對應(yīng)sentinel的判斷。我們可以認為他們是通過主節(jié)點達到數(shù)據(jù)共享的。

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

我們暫時就理解到這里,不再做更多深層的源碼方面的理解。

但當博主打開了sentinel26379的配置文件,偶然在最末位發(fā)現(xiàn)了這幾段自動生成的配置,似乎打開了新世界的大門:

Java開發(fā) - 深入理解Redis哨兵機制原理,Java之微服務(wù)簡單上手系列,redis,sentinel原理,sentinel定時監(jiān)控任務(wù),原力計劃

known- sentinel就是知道另一個sentinel,這都是自動完成的,其原理博主不得,但猜測是通過Master節(jié)點完成的數(shù)據(jù)的共享,上圖似乎也是一個對我們假設(shè)的印證。

PING指令?跳檢測

每個Sentinel每隔1秒會向所有節(jié)點(?Sentinel?節(jié)點、?Master?節(jié)點、?Slave?節(jié)點)發(fā)送PING指令來進??跳檢測。

選舉過程

  • 在上面的案例中,當一個sentinel節(jié)點認為Master不可用時,會進行主觀下線,但并不會真的下線,而是繼續(xù)通過sentinel is-masterdown-by-addr指令來獲取其他sentinel對Master節(jié)點的判斷,如果最終判斷的值達到了我們設(shè)置的quorum值,Master節(jié)點就被判定為客觀下線;
  • Leader Sentinel(每個發(fā)現(xiàn)master服務(wù)器進入下線的sentinel都可以要求其他sentinel選自己為sentinel的leader,選舉是先到先得)會從原來的Master的Slave中選出一個做為新的主節(jié)點
    • 首先過濾所有主觀下線的節(jié)點;
    • 選擇slave-priority最高的節(jié)點,有的話返回,沒有的話繼續(xù);
    • 選擇復(fù)制偏移量offset最?的節(jié)點,有的話返回,沒有的話繼續(xù);
    • 選擇run_id(服務(wù)器運? ID)最?的節(jié)點,
  • 最終選出一個節(jié)點,Leader Sentinel節(jié)點會通過?SLAVEOF NO ONE命令,讓選擇出來的Slave變?yōu)樾碌腗aster,再通過SLAVEOF命令讓其他還活著的節(jié)點成為新的Master的Slave節(jié)點。

最后推薦一篇文章,我覺得講解通信的過程講的很詳細:一文讀懂Redis的哨兵機制 - 知乎

好東西當然是要一起分享了。

結(jié)語

寫到這里,Redis的哨兵模式基本是給大家講解清楚了,不知道你get到了多少?如果還有其他疑問,不放評論區(qū)留言和小伙伴們一起討論吧,最后,不要吝嗇你們的贊,動動小手,給博主一個大大的支持吧。文章來源地址http://www.zghlxwxcb.cn/news/detail-580606.html

到了這里,關(guān)于Java開發(fā) - 深入理解Redis哨兵機制原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • “深入探索JVM內(nèi)部機制:理解Java虛擬機的運行原理“

    標題:深入探索JVM內(nèi)部機制:理解Java虛擬機的運行原理 摘要:本篇博客將深入探索Java虛擬機(JVM)的內(nèi)部機制,幫助讀者理解JVM的運行原理。我們將介紹JVM的組成結(jié)構(gòu),包括類加載器、運行時數(shù)據(jù)區(qū)域和執(zhí)行引擎,并通過示例代碼解釋這些概念的具體應(yīng)用。 正文: 一、J

    2024年02月11日
    瀏覽(24)
  • “深入探究JVM內(nèi)部機制:理解Java虛擬機的工作原理“

    標題:深入探究JVM內(nèi)部機制:理解Java虛擬機的工作原理 摘要:本文將深入分析Java虛擬機(JVM)的工作原理,包括類加載、內(nèi)存管理、垃圾回收和即時編譯等方面。通過詳細解釋這些概念,并給出示例代碼,幫助讀者更好地理解JVM內(nèi)部的工作機制。 正文: 一、類加載 類加載

    2024年02月12日
    瀏覽(34)
  • Redis集群(分布式緩存):詳解持久化、主從同步原理、哨兵機制、Cluster分片集群,實現(xiàn)高并發(fā)高可用

    Redis集群(分布式緩存):詳解持久化、主從同步原理、哨兵機制、Cluster分片集群,實現(xiàn)高并發(fā)高可用

    ? ? ? ? 單機式Redis存在以下問題,因此需要Redis集群化來解決這些問題 ???????Redis數(shù)據(jù)快照,簡單來說就是 把內(nèi)存中的所有數(shù)據(jù)都記錄到磁盤中 。當Redis實例故障重啟后,從 磁盤讀取快照文件,恢復(fù)數(shù)據(jù) ??煺瘴募Q為RDB文件,默認是保存在當前運行目錄。 ?? ?(1)

    2024年02月08日
    瀏覽(26)
  • Java垃圾回收機制深入理解

    Java垃圾回收機制深入理解

    Java垃圾回收機制是Java虛擬機(JVM)的核心組件之一,對于內(nèi)存管理起到至關(guān)重要的作用。它能自動追蹤并管理應(yīng)用程序中創(chuàng)建的對象,當這些對象不再使用時,垃圾回收機制會自動回收其占用的內(nèi)存,使這部分內(nèi)存能夠被再次利用。此機制極大地減少了開發(fā)者需要手動管理

    2024年02月09日
    瀏覽(19)
  • 深入理解 Redis 高可用性方案及其原理

    深入理解 Redis 高可用性方案及其原理 在當今數(shù)據(jù)驅(qū)動的時代,Redis 作為一種高性能的鍵值存儲數(shù)據(jù)庫,在現(xiàn)代應(yīng)用架構(gòu)中扮演著舉足輕重的角色。無論是作為緩存系統(tǒng)、消息隊列還是輕量級數(shù)據(jù)庫,Redis 以其卓越的性能和靈活性贏得了廣泛的應(yīng)用。然而,隨著業(yè)務(wù)規(guī)模的不

    2024年03月25日
    瀏覽(38)
  • 深入理解Java中HashMap的modCount機制

    在Java編程領(lǐng)域中, HashMap 是一個廣泛使用的數(shù)據(jù)結(jié)構(gòu),它提供了鍵值對的存儲方式,允許我們根據(jù)鍵快速地檢索對應(yīng)的值。由于其高效的查找性能和靈活性, HashMap 在Java編程中扮演著至關(guān)重要的角色。它不僅被廣泛應(yīng)用于日常的開發(fā)工作,如緩存、數(shù)據(jù)存儲和數(shù)據(jù)檢索等,

    2024年04月27日
    瀏覽(29)
  • 深入理解java和dubbo的SPI機制

    本質(zhì):將接口實現(xiàn)類的全限定名配置在文件中,并由服務(wù)加載器讀取配置文件,加載實現(xiàn)類。這樣可以在運行時,動態(tài)為接口替換實現(xiàn)類。 java SPI:用來設(shè)計給服務(wù)提供商做插件使用的?;诓呗阅J絹韺崿F(xiàn)動態(tài)加載的機制。我們在程序只定義一個接口,具體的實現(xiàn)交個不同

    2024年02月08日
    瀏覽(24)
  • 【Redis】聊一下Redis的哨兵機制

    【Redis】聊一下Redis的哨兵機制

    在上一篇文章中,我們學(xué)習了數(shù)據(jù)庫的Redis的主從集群復(fù)制模式,如果從庫出現(xiàn)問題,那么其他主從庫還可以處理讀寫請求,但是如果主庫宕機,寫請求從庫處理不了,整個系統(tǒng)就不可用了,雖然只處理只讀請求,顯然是不符合業(yè)務(wù)需求。 如上圖中所示當主庫出現(xiàn)異常的,如

    2024年02月07日
    瀏覽(24)
  • 【Redis】哨兵機制

    【Redis】哨兵機制

    ? ? ? ? 哨兵模式時給予主從模式的,是為了解決主從模式單點(master)故障導(dǎo)致服務(wù)不可用的問題,但并未解決單節(jié)點存儲能力有限的問題。 主觀下線:主服務(wù)器master宕機后,哨兵1檢測到這個結(jié)果,系統(tǒng)并不會馬上進行failover,這僅僅是哨兵1認為主服務(wù)器不可用,這種現(xiàn)

    2024年02月09日
    瀏覽(26)
  • Redis之Sentinel(哨兵)機制

    Sentinel(哨崗、哨兵)是Redis的高可用性(high availability)解決方案:由一個或多個Sentinel實例(instance)組成的Sentinel系統(tǒng)(system)可以監(jiān)視任意多個主服務(wù)器,以及這些主服務(wù)器屬下的所有從服務(wù)器,并在被監(jiān)視的主服務(wù)器進入下線狀態(tài)時,自動將下線主服務(wù)器屬下的某個從

    2024年02月10日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包