Redis 主從複製可將主節點數據同步給從節點,從節點此時有兩個做用:程序員
主從複製同時存在如下幾個問題:redis
Redis的哨兵機制就是解決咱們以上主從複製存在缺陷(選舉問題),保證咱們的Redis高可用,實現自動化故障發現與故障轉移。服務器
該系統執行如下三個任務:架構
Redis 源碼中包含了一個名爲 sentinel.conf 的文件, 這個文件是一個帶有詳細註釋的 Sentinel 配置文件示例。spa
運行一個 Sentinel 所需的最少配置以下所示:.net
1)sentinel monitor mymaster 192.168.10.202 6379 2 Sentine監聽的maste地址,第一個參數是給master起的名字,第二個參數爲master IP,第三個爲master端口,第四個爲當該master掛了的時候,若想將該master判爲失效, 在Sentine集羣中必須至少2個Sentine贊成才行,只要該數量不達標,則就不會發生故障遷移。 2)sentinel down-after-milliseconds mymaster 30000 表示master被當前sentinel實例認定爲失效的間隔時間,在這段時間內一直沒有給Sentine返回有效信息,則認定該master主觀下線。 只有在足夠數量的 Sentinel 都將一個服務器標記爲主觀下線以後, 服務器纔會被標記爲客觀下線,將服務器標記爲客觀下線所需的 Sentinel 數量由對主服務器的配置決定。 3)sentinel parallel-syncs mymaster 2 當在執行故障轉移時,設置幾個slave同時進行切換master,該值越大,則可能就有越多的slave在切換master時不可用,能夠將該值設置爲1,即一個一個來,這樣在某個 slave進行切換master同步數據時,其他的slave還能正常工做,以此保證每次只有一個從服務器處於不能處理命令請求的狀態。 4)sentinel can-failover mymaster yes 在sentinel檢測到O_DOWN後,是否對這臺redis啓動failover機制 5)sentinel auth-pass mymaster 20180408 設置sentinel鏈接的master和slave的密碼,這個須要和redis.conf文件中設置的密碼同樣 6)sentinel failover-timeout mymaster 180000 failover過時時間,當failover開始後,在此時間內仍然沒有觸發任何failover操做,當前sentinel將會認爲這次failoer失敗。 執行故障遷移超時時間,即在指定時間內沒有大多數的sentinel 反饋master下線,該故障遷移計劃則失效 7)sentinel config-epoch mymaster 0 選項指定了在執行故障轉移時, 最多能夠有多少個從服務器同時對新的主服務器進行同步。這個數字越小, 完成故障轉移所需的時間就越長。 8)sentinel notification-script mymaster /var/redis/notify.sh 當failover時,能夠指定一個"通知"腳本用來告知當前集羣的狀況。 腳本被容許執行的最大時間爲60秒,若是超時,腳本將會被終止(KILL) 9)sentinel leader-epoch mymaster 0 同時一時間最多0個slave可同時更新配置,建議數字不要太大,以避免影響正常對外提供服務。
1.每一個 Sentinel 以每秒一次的頻率向它所知的主服務器、從服務器以及其餘 Sentinel 實例發送一個 PING 命令。3d
2.若是一個實例距離最後一次有效回覆 PING 命令的時間超過指定的值, 那麼這個實例會被 Sentinel 標記爲主觀下線。code
3.正在監視這個主服務器的全部 Sentinel 要以每秒一次的頻率確認主服務器的確進入了主觀下線狀態。blog
4.有足夠數量的 Sentinel 在指定的時間範圍內贊成這一判斷, 那麼這個主服務器被標記爲客觀下線。圖片
5.每一個 Sentinel 會以每 10 秒一次的頻率向它已知的全部主服務器和從服務器發送 INFO 命令。當一個主服務器被 Sentinel 標記爲客觀下線時, Sentinel 向下線主服務器的全部從服務器發送 INFO 命令的頻率會從 10 秒一次改成每秒一次。在民工哥技術之路公衆號後臺回覆關鍵字 Redis手冊 免費獲取一份redis最佳實踐與實戰指南電子書。
6.Sentinel 和其餘 Sentinel 協商主節點的狀態,若是主節點處於 SDOWN 狀態,則投票自動選出新的主節點。將剩餘的從節點指向新的主節點進行數據複製。
7.當沒有足夠數量的 Sentinel 贊成主服務器 下線時, 主服務器的客觀下線狀態就會被移除。當主服務器從新向 Sentinel 的 PING 命令返回有效回覆時,主服務器的主觀下線狀態就會被移除。
一個 Sentinel 能夠與其餘多個 Sentinel 進行鏈接, 各個 Sentinel 之間能夠互相檢查對方的可用性,並進行信息交換。
你無須爲運行的每一個 Sentinel 分別設置其餘 Sentinel 的地址,由於 Sentinel 能夠經過發佈與訂閱功能來自動發現正在監視相同主服務器的其餘 Sentinel。
一次故障轉移操做由如下步驟組成:
做者:須臾之餘
https://my.oschina.net/u/3995...