Redis哨兵原理是什么?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
先簡單說幾句我們在配置主從復制時有一種情況就是主節點宕機了,誰來提供服務呢!
當主節點宕機后主從復制就沒有存在的意義了,數據為王的時代沒有了數據何談什么高可用。
這個時候就橫空出世了一位老大哥名叫
哨兵
,老大哥說這個問題我來幫你們處理。
既然主節點master作為老大不領你們玩了。我就從你們四個中間再挑選出來一位老大,然后你們跟著他玩。
等不帶你們玩的那個老大回來后他的身份就失效了,就不在是你們的老大了。他只能跟著我挑選出來的老大玩。
上邊這段對話過程就是我們配置哨兵的意義到底在哪,跟誰玩就是誰給誰數據,知道了哨兵的作用我們就在繼續。
「最后我們用專業術語來解釋一下什么是哨兵?!?/strong>
哨兵,英文名sentinel,是一個分布式系統,用于對主從結構中的每一臺服務器進行監控
,當主節點出現故障后通過投票機制來挑選新的主節點,并且將所有的從節點連接到新的主節點上。
上文中我們談到的對話過程就是哨兵的作用之一自動故障轉移。
談到作用肯定就是這個哨兵到底在工作中到底干了什么事情。我們先用比較干巴的概念描述一下,然后在下文的工作原理會一一談到。
哨兵的三個作用監控、通知、自動轉移故障
這里有一個注意點,哨兵也是一臺redis服務器,只是不對外提供任何服務。
配置哨兵時配置為單數。那么為什么配置哨兵服務器的數量為單數呢?帶著這個疑問你會在下文看到你想要的答案。
這一章我們就開始配置哨兵,前期工作準備。下圖就是咔咔的準備工作。開啟8個客戶端,三個哨兵、一個主節點、倆個從節點、一個主節點客戶端、一個從節點客戶端。
哨兵使用的配置文件是sentinel.conf
我們來對sentinel.conf配置信息進行解讀
但是大多數都是注釋,這里咔咔給大家提供一個命令來過濾這些無用信息
cat sentinel.conf | grep -v '#' | grep -v '^$'
使用命令cat sentinel.conf | grep -v '#' | grep -v '^$' > ./data/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服務器,端口分別為6379、6380、6381
查看主節點信息,是有倆臺從節點在連接著,端口分別為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既是參選者也是投票者,每個sentinel都有一票,信封就代表自己的投票權。
當sentinel1和sentinel4同時把指令發送到群里準備競選時,sentinel2這個時候就說我先接到誰的指令就把票投給誰。假如sentinel1發的早,那么sentinel2的票就會投給sentinel1。
按照這樣的規則一直發起投票直到有一個sentinel的票數為總sentinel數量的一半之多。假設說是sentinel1的票數滿足總哨兵數量的一半之多后,sentinel1就會當選。這個時候就進行到了下一個階段。
在上邊哨兵已經選出了sentinel1為代表去所有的從節點找出一個作為主節點。這個挑選主節點不是隨便拿一個是有一定的規則的。
先把不在線的干掉
響應慢的干掉,sentinel會給所有的redis發送信息,響應速度慢的就會被干掉
與原主節點斷開時間最久的干掉,這里由于演示不夠用了,所有新增了一個slave5,沒有任何意義哈!
以上三個點都判斷結束后還有salve4和slave5,就會根據優先原則來進行篩選。
選出新的主節點后就要對所有的節點發送指令了。
關于哨兵的所有知識點就已經說完了,本文最重要的就是哨兵的工作原理了。我們在簡單的梳理一下其工作原理。
首先進行監控,并且所有的哨兵同步信息
哨兵向訂閱里邊發布信息
故障轉移
感謝各位的閱讀!看完上述內容,你們對Redis哨兵原理是什么大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。