redis主從複製的做用中有這麼一句話「主從複製是高可用的基石」,那什麼是高可用呢!高可用就是減小系統不能提供的時間,也就是常聽到的以6個9爲基準。實現高可用必不可少的就是哨兵和集羣。本文主要介紹哨兵機制。redis
先簡單說幾句咱們在配置主從複製時有一種狀況就是主節點宕機了,誰來提供服務呢!centos
當主節點宕機後主從複製就沒有存在的意義了,數據爲王的時代沒有了數據何談什麼高可用。服務器
這個時候就橫空出世了一位老大哥名叫哨兵
,老大哥說這個問題我來幫大家處理。
既然主節點master做爲老大不領大家玩了。我就從大家四個中間再挑選出來一位老大,而後大家跟着他玩。微信
等不帶大家玩的那個老大回來後他的身份就失效了,就不在是大家的老大了。他只能跟着我挑選出來的老大玩。網絡
上邊這段對話過程就是咱們配置哨兵的意義到底在哪,跟誰玩就是誰給誰數據,知道了哨兵的做用咱們就在繼續。分佈式
最後咱們用專業術語來解釋一下什麼是哨兵。學習
哨兵,英文名sentinel,是一個分佈式系統,用於對主從結構中的每一臺服務器進行監控
,當主節點出現故障後經過投票機制來挑選新的主節點,而且將全部的從節點鏈接到新的主節點上。測試
上文中咱們談到的對話過程就是哨兵的做用之一自動故障轉移。centos7
談到做用確定就是這個哨兵到底在工做中到底幹了什麼事情。咱們先用比較乾巴的概念描述一下,而後在下文的工做原理會一一談到。3d
哨兵的三個做用監控、通知、自動轉移故障
這裏有一個注意點,哨兵也是一臺redis服務器,只是不對外提供任何服務。
配置哨兵時配置爲單數。那麼爲何配置哨兵服務器的數量爲單數呢?帶着這個疑問你會在下文看到你想要的答案。
這一章咱們就開始配置哨兵,前期工做準備。下圖就是咔咔的準備工做。開啓8個客戶端,三個哨兵、一個主節點、倆個從節點、一個主節點客戶端、一個從節點客戶端。
哨兵使用的配置文件是sentinel.conf
cat sentinel.conf | grep -v '#' | grep -v '^$'
使用命令cat sentinel.conf | grep -v '#' | grep -v '^$' > ./conf/sentinel-26379.conf
把sentinel.conf過濾後的信息移到/usr/local/redis/conf
下
sentinel-26379.conf
修改信息存放目錄
而後快速的複製倆個哨兵配置文件,端口爲26380和26381。
sed 's/26379/26381/g' sentinel-26379.conf > sentinel-26381.conf
測試主從複製處於正常工做狀態,啓動三臺redis服務器,端口分別爲637九、6380、6381
這裏有一個小小的點就是lag怎麼一個是1一個是0呢!lag是延遲時間,我這裏是本地測試因此會出現0的狀況,使用雲服務器是不多出現的。lag的值爲0和1都屬於正常。
測試主節點添加一個hash值,hset kaka name kaka
分別從slave1和slave2獲取kaka的值,檢測主從複製是否正常運行。
通過測試咱們的主從結構是正常運行的。
啓動一個哨兵redis-sentinel 26379-sentinel.conf
鏈接26379哨兵,主要是最後一行,監控的主節點名爲mymaster,狀態正常,從節點有倆個,哨兵數量爲1個
在來查看一下26379的哨兵配置信息,這個時候已經改動了
在啓動一個
26380
的哨兵,
redis-sentinel 26380-sentinel.conf
,這裏注意一下最後一行多了一條信息,這個id就是咱們
26379
配置文件新增的id
而後咱們來到哨兵26379的客戶端,一樣也是新增的26380哨兵的id
這個時候咱們在查看一下26379哨兵的配置文件,第一次查看配置文件是沒有配置26380哨兵的,第二次查看時配置了26380哨兵後添加的信息。
最後咱們須要把哨兵客戶端3啓動起來,端口號爲26381。啓動起來以後,咱們的配置信息和服務端的信息也會改動,添加哨兵26380有的信息,哨兵26381也會有。
直到這裏咱們對哨兵的配置就結束了,接下來咱們把主節點master給宕掉
等待30秒後咱們來到26379哨兵的客戶端,這裏新增了一些信息,那麼這些信息都作了什麼呢!讓咱們細細道來。 這裏邊的信息咱們先須要知道幾個當咱們在從新把6379的redis服務器上線後,就能夠看到哨兵服務端響應了倆句。一句是去除6379的下線。最後一句就是重連6379到新的主節點上。
這個時候主節點就是6380了,在6380的redis客戶端設置值,檢測主從複製是否正常工做。在新的主節點6380添加list類型
在6379和6381獲取這個值,至此呢!咱們的哨兵模式就配置完成了。配置完哨兵後,就須要對其工做原理進行解析了,只有知道其工做流程,才能對哨兵有更好的理解。
本文講解原理沒有那麼幹巴!讓你能夠把一篇技術文章當故事去看。
進入正題,哨兵做用是監控、通知、故障轉移。那麼工做原理也是圍繞這三點來說的。
Sentinel會給主從的全部節點發送命令獲取其狀態,而且會把信息發佈到哨兵的訂閱裏。
sentinel is-master-down-by-address-port
sentinel is-master-down-by-address-port
到本身的內網,確認一下第一個發送sentinel is-master-down-by-address-port
的哨兵說你說的對,這個傢伙確實掛了。當全部人都認爲主節點掛了後就會修改其狀態爲odown
。當一個哨兵認爲主節點掛了標記的是sdown
,當半數哨兵都認爲掛了其標記的狀態是odown
。這也就是配置哨兵爲何配置單數的緣由。這時哨兵已經檢測到問題所在了,那麼究竟是那個哨兵去負責推選新的主節點呢!不能是張三也去,李四也去,王五也去,這樣就亂套了、因而就須要在全部的哨兵裏選出領頭的,那麼是如何選的呢!請看下圖。
這個時候呢!五個sentinel就在一塊兒開會了,全部的哨兵都在一個內網中,而後他們會作一件事情就是五個sentinel會同時發送指令sentinel is-master-down-by-address-port
而且攜帶上本身競選次數和runid。
先把不在線的幹掉
響應慢的幹掉,sentinel會給全部的redis發送信息,響應速度慢的就會被幹掉 與原主節點斷開時間最久的幹掉,這裏因爲演示不夠用了,全部新增了一個slave5,沒有任何意義哈! 以上三個點都判斷結束後還有salve4和slave5,就會根據優先原則來進行篩選。關於哨兵的全部知識點就已經說完了,本文最重要的就是哨兵的工做原理了。咱們在簡單的梳理一下其工做原理。
首先進行監控,而且全部的哨兵同步信息
哨兵向訂閱裏邊發佈信息
故障轉移
以上就是咔咔對哨兵的理解,若是錯誤能夠提出,咔咔及時改正。
咔咔,男,17年入行,從業已經有三年。從搬磚同樣的生活方式換成了如今有「單」而居的日子。固然這個單不是單身的單!雖然極盡苛刻的技術學習但也遠不及客戶千奇百怪的要求。進入了朝九晚六,雖然躲過了風吹日曬,可是仍然很享受那些熬得只剩下黑眼圈的日子。堅持學習、堅持寫博、堅持分享是咔咔從業以來一直所秉持的信念。但願在諾大互聯網的中咔咔的文章能帶給你一絲絲的幫助。