跟我一起學Redis之加個哨兵讓主從複製更加高可用

2022-01-10 04:51:57 字數 3546 閱讀 4516

找個哨兵站崗,專門用來監控主伺服器,一旦有變故,哨兵自動處理,這樣故障恢復及時且更加智慧型;接下來就來玩玩。

redis哨兵(sentinel)其實本質就是乙個redisserver節點,通過設定執行模式來開啟哨兵的功能;主要功能如下:

老規矩,還是先不說那麼多理論,先來實操一把,然後再來總結:

哨兵模式搭建

先來個最基礎的:乙個哨兵監控一主二從的環境;後面小夥伴就知道如何擴充套件啦,如下圖所示(這裡通過一台機器演示,所以通過埠進行區分各個redis節點):

搭建主從複製環境,如上圖所示,6377作為主伺服器,6388和6399作為從伺服器,這裡是通過配置檔案的形式修改,最終效果如下:

主從複製環境搭建完畢之後,接下來需要有乙個哨兵對其進行監控;之前有說過,redis的功能通過配置檔案就能快速實現,針對哨兵有乙個單獨的配置檔案,這裡就起名為:sentinel.conf,內容如下:

sentinel monitor mymaster 127.0.0.1 6377 1

大概意思就是哨兵要監控對應的主伺服器,其他啥都不用配置;

這裡對於配置檔案內容先不解釋這麼多,接下來會專門進行介紹,先把環境搭建起來,玩一把再說;

啟動哨兵,兩種方式:

redis-sentinel啟動,redis-sentinel其實是用redis的乙個**分支分離出來的,安裝完redis就有,命令如下:

./redis-sentinel zoeconfig/sentinel.conf

redis-server啟動,指定為哨兵模式即可,命令如下:

./redis-server zoeconfig/sentinel.conf --sentinel

啟動效果如下:

如上圖所示,redis哨兵其實本質還是乙個redis節點,只是執行模式不一樣而已;

哨兵模式執行起來,模擬主伺服器宕機,這裡直接將6377伺服器shutdown, 注意看哨兵列印的日誌:

先將主伺服器6377關掉,如下:

由於哨兵定時對主伺服器進行監控,如果在30秒內(預設30秒)發現主伺服器無法正常通訊時,就開始進行投票選舉原主伺服器下的從伺服器作為新主伺服器,哨兵列印日誌如下:

大概流程如下圖:

哨兵最後的狀態會持久化到指定的配置檔案中,之前只是簡單配置了一條監控語句,現在如下:

驗證故障轉移結果;

光說6388變成了主伺服器沒證據,連上6388看看,同時再看看6399有沒有換新主人,如下圖:

6388主從資訊

對應的配置檔案中將之前的主從關係配置已經去掉了。

6399主從資訊

對應的配置檔案也已經改了,如下:

以上就完成了哨兵模式搭建的演示啦,是不是很簡單,只要稍微改改配置檔案即可完成自動化故障恢復。 到這小夥伴可能會問,原來故障的主伺服器恢復了會怎麼樣? 乙個哨兵誤判主伺服器下線或高併發抗不住怎麼辦?嘿嘿嘿,接著來搞,接下來邊操作邊總結;

原故障的主伺服器恢復之後只能當小兵

原有通訊異常的主伺服器如果恢復正常,那它還能恢復原來的地位嗎?,還是另有安排呢?這個很好演示,直接將之前shutdown的主伺服器重新起來即可;6377啟動後檢視主從關係資訊如下圖:

如上圖實操驗證,原來異常的主伺服器(6377)恢復之後就變成新主伺服器(6388)的從伺服器了(原來再屌,現在也只是小弟,重新再混等機會)。

哨兵集群高可用

以上演示就乙個哨兵,這樣有很明顯的兩個缺點,如下:

配置哨兵集群超級簡單,就是增加節點即可,哨兵節點會通過發布與訂閱功能來自動發現正在監視相同主伺服器的其他哨兵 , 這一功能是通過向頻道sentinel:hello 傳送資訊來實現的。如下圖再新增乙個哨兵節點,同時增加乙個配置檔案,由於預設埠為26379,上乙個哨兵已經占用,這裡在新增的配置檔案中指定新哨兵的埠為:26388;

配置檔案名為sentinel26388.conf,內容如下:

sentinel monitor mymaster 127.0.0.1 6388 1

port 26388

指定配置檔案啟動第二個哨兵,啟動命令為./redis-sentinel zoeconfig/sentinel26388.conf,效果如下:

哨兵如何做到互相交流和監控從伺服器的

到這應該有小夥伴會有疑問:在配置哨兵的時候,只配置監控主伺服器,從伺服器是怎麼知道的?哨兵之間的交流是通過什麼形式實現的?

關於從伺服器:哨兵會自動詢問主伺服器獲得對應從伺服器的資訊,因為從伺服器會在連線主伺服器的時候把相關資訊給主伺服器,所以哨兵能通過主伺服器拿到從伺服器的資訊;

關於哨兵之間:哨兵節點會通過發布與訂閱功能來自動發現正在監視相同主伺服器的其他哨兵 , 這一功能是通過向頻道sentinel:hello 傳送資訊來實現的;

注:乙個哨兵可以同時監控多個主伺服器;

哨兵配置檔案介紹

以上配置只是為了快速實現演示,其實關於哨兵還有其他很多配置,接下來都過一遍:

連線哨兵常用的命令主從複製加個哨兵看似很完美啦,但仔細想想,雖然讀寫分離分開了,但寫還是單節點,如果寫的併發量特別大怎麼辦,那肯定扛不住,所以這下集群該出山了,下一次聊聊redis集群;

乙個被程式搞醜的帥小伙,關注"code綜藝圈",跟我一起學~~~

跟我一起學Redis之Redis概述

背景 技術的更新迭代,是程式設計師最最最頭大的事,總是在每個網路角落中有感慨聲 學不動啦 其實新技術並不是憑空而出,而是隨著業務推進 資料驅動 技術積累促使開發者的不斷探索和實踐,最終橫空出世 新技術 對於專案而言,並不是一開始就能把所有的需求 架構和效能都做到極致,而是通過一次次的迭代 最經典的的...

跟我一起學攝影

咦 好巧!我也是攝影愛好者。咱們一起學習吧。或許你也有這樣的體驗,並茂的文章更能讓人快速進入學習狀態,更何況是攝影,必須有圖。下面是我彙總的資料,必須深入淺出,拒絕一切晦澀難懂。學習課本 1.佳能官網 能系統學習攝影知識,從入門 初級 中級 高階 高階。每個頁面講解乙個知識點,結合實際的拍攝效果,深...

跟我一起學python 跟我一起學人工智慧(一)

跟我一起學人工智慧 一 文 小步 系列第一講正式開課啦,課程全都是可以實操的乾貨,到後面ai演算法 python 可以結合做出乙個簡單的人工智慧應用 因本人也對ai領域涉足不久,如文章有不妥之處還請各位大神與我多多交流,此系列文章也屬於我學習ai過程中的總結,我也會做到盡量寫出只要是高中畢業就能看懂...