天天看點

Redis高可用叢集-哨兵模式(Redis-Sentinel)

 前言

Redis哨兵模式,用現在流行的話可以說就是一個“哨兵機器人”,給“哨兵機器人”進行相應的配置之後,這個"機器人"可以7*24小時工作,它能能夠自動幫助你做一些事情,如監控,提醒,自動處理故障等。

Redis-sentinel簡介

Redis-sentinel是Redis的作者antirez,因為Redis叢集的被各大公司使用,每個公司要寫自己的叢集管理工具,于是antirez花了幾個星期寫出了Redis-sentinel。

Redis 的 Sentinel 系統用于管理多個 Redis 伺服器(instance),Redis 的 Sentinel 為Redis提供了高可用性。使用哨兵模式建立一個可以不用人為幹預而應對各種故障的Redis部署。

該系統執行以下三個任務:

監控(Monitoring):Sentinel會不斷地檢查你的主伺服器和從伺服器是否允許正常。

提醒(Notification):當被監控的某個Redis伺服器出現問題時,Sentinel可以通過API向管理者或者其他應用程式發送通知。

自動故障遷移(Automatic failover):

(1)當一個主伺服器不能正常工作時,Sentinel會開始一次自動故障遷移操作,他會将失效主伺服器的其中一個從伺服器更新為新的主伺服器,并讓失效主伺服器的其他從伺服器改為複制新的主伺服器;

(2)用戶端試圖連接配接失敗的主伺服器時,叢集也會向客服端傳回新主伺服器的位址,是的叢集可以使用新主伺服器代替失效伺服器。

sentinel的分布式特性

Redis Sentinel 是一個分布式系統, 你可以在一個架構中運作多個 Sentinel 程序(progress), 這些程序使用流言協定(gossip protocols)來接收關于主伺服器是否下線的資訊, 并使用投票協定(agreement protocols)來決定是否執行自動故障遷移, 以及選擇哪個從伺服器作為新的主伺服器。

單個sentinel程序來監控redis叢集是不可靠的,當sentinel程序宕掉後(sentinel本身也有單點問題,single-point-of-failure)整個叢集系統将無法按照預期的方式運作。是以有必要将sentinel叢集,這樣有幾個好處:

有一些sentinel程序宕掉了,依然可以進行redis叢集的主備切換;

如果隻有一個sentinel程序,如果這個程序運作出錯,或者是網絡堵塞,那麼将無法實作redis叢集的主備切換(單點問題);

如果有多個sentinel,redis的用戶端可以随意地連接配接任意一個sentinel來獲得關于redis叢集中的資訊

一個健壯的部署至少需要三個哨兵執行個體。

三個哨兵執行個體應該放置在客戶使用獨立方式确認故障的計算機或虛拟機中。例如不同的實體機或不同可用區域的虛拟機。

Redis-Sentinel高可用場景示範

場景1:主伺服器master當機

當主伺服器master當機,那麼Sentinel會通過選舉(算法)機制,從Salve中選出一個作為新Master。

大概原理是當選出一個Slave要作為Master的時候,會發送指令slaveofno one來取消選中的這個slave,使其成為Master。哨兵會發送給其他從伺服器Slave配置選中的這個為新主伺服器Master,并删除監聽清單中出現故障的Master伺服器。

(1)關閉掉 6379主伺服器

(2)檢視觀察選舉新的master的過程和顯示了failover的過程,整個日志資訊還是比較完整的。最後選舉了6381為主伺服器! 

(3)檢視6381伺服器資訊,角色為主,從伺服器6380!

場景2:之前故障的6379 master重新啟動

(1)啟動6379服務,發現6379成為6381的從伺服器!

(2)檢視6381伺服器狀态資訊:原來的master自動切換成slave,不會自動恢複成master。

場景3:從伺服器Slave當機和重新開機

(1)關閉6380從伺服器

(2)Sentinel日志

(3)檢視住伺服器6381狀态資訊

(4)啟動從伺服器6380

(5)檢視住伺服器6381狀态資訊:6380又回來了!

總結

Redis-Sentinel是Redis官方推薦的高可用性(HA) 解決方案,Redis-sentinel本身也是一個獨立運作的程序,它能監控多個master-slave叢集,發現master當機後能進行自動切換。Sentinel可以監視任意多個主伺服器(複用),以及主伺服器屬下的從伺服器,并在被監視的主伺服器下線時,自動執行故障轉移操作。

為了防止sentinel的單點故障,可以對sentinel進行叢集化,建立多個sentinel。

有需要交流的小夥伴可以點選這裡加本人QQ:luke

最好的貴人

就是拼命努力的自己。

繼續閱讀