首頁 >後端開發 >php教程 >Redis哨兵機制的原理介紹(圖文)

Redis哨兵機制的原理介紹(圖文)

青灯夜游
青灯夜游轉載
2019-02-26 09:57:264903瀏覽

這篇文章帶給大家的內容是介紹Redis的哨兵機制,讓大家了解哨兵機制的原理和如何實現。有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

Redis哨兵機制的原理介紹(圖文)

概述

#Redis的複製有一個缺點,當主機Master 宕機以後,我們需要人工解決切換,例如使用slaveof no one 。實際上主從複製並沒有實現,高可用,  高可用側重備份機器, 利用集群中系統的冗餘,當系統中某台機器發生損壞的時候,其他後備的機器可以迅速的接替它來啟動服務。

主從複製的問題

Redis哨兵機制的原理介紹(圖文)

#一旦主節點宕機,寫入服務無法使用,就需要手動去切換,重新選取主節點,手動設定主從關係。

那麼要如何解決呢?如果我們有一個監控程序能夠監控各個機器的狀態及時調整,將手動的操作變成自動的。 Sentinel的出現就是為了解決這個問題。

哨兵機制的原則及實作

#Redis Sentinel

## Redis Sentinel 是分散式架構,其中包含若干個Sentinel 節點和Redis 資料節點,每個Sentinel 節點會對資料節點和其餘Sentinel 節點進行監控,當它發現節點不可達時,會對節點做下線標識。如果被識別的是主節點,它也會和其他Sentinel 節點進行“協商”,當大多數Sentinel 節點都認為主節點不可達時,它們會選出一個Sentinel 節點來完成自動故障轉移的工作,同時會將這個變化即時通知給Redis 應用方。整個過程完全是自動的,不需要人工來介入,所以這套方案有效地解決了 Redis 的高可用問題。

如圖所示:


Redis哨兵機制的原理介紹(圖文)

#基本的故障轉移流程

1)主節點發生故障,此時兩個從節點與主節點失去連接,主從複製失敗。

Redis哨兵機制的原理介紹(圖文)

2)每個Sentinel 節點透過定期監控發現主節點出現了故障

Redis哨兵機制的原理介紹(圖文)

3)多個Sentinel節點對主節點的故障達成協議會選出其中一個節點作為領導者負責故障轉移。

Redis哨兵機制的原理介紹(圖文)

4)Sentinel 領導者節點執行了故障轉移,整個過程基本上是跟我們手動調整一致的,只不過是自動化完成的。


Redis哨兵機制的原理介紹(圖文)

5)故障轉移後整個 Redis Sentinel 的結構,重新選舉了新的主節點。

Redis哨兵機制的原理介紹(圖文)

實例

#使用docker建立如下redis容器
redis-sentinel1    172.10.0.9    22530 -> 22530    sentinel
redis-sentinel2    172.10.0.10    22531 -> 6379    sentinel
redis-sentinel3    172.10.0.11    22532 -> 6379    sentinel
redis-master2    172.10.0.5    6383  -> 6379    Master
redis-slave2    172.10.0.6    6384  -> 6379    Slave
redis-slave3    172.10.0.7    6385  -> 6379    Slave

配置

Sentinel 的核心配置

sentinel monitor mymaster 127.0.0.1 7000 2
#監控的主節點的名字、IP 和端口,最後一個2的意思是有幾台Sentinel 發現有問題,就會發生故障轉移,例如配置為2,代表至少有2個Sentinel 節點認為主節點不可達,那麼這個不可達的判定才是客觀的。對於設定的越小,那麼達到下線的條件就越寬鬆,反之越嚴格。一般建議將其設定為 Sentinel 節點的一半加1。

sentinel down-after-millseconds mymaster 30000
這個是超時的時間(單位為毫秒)。打個比方,當你去 ping 一台機器的時候,多久後仍 ping 不通,那麼就認為它是有問題。

sentinel parallel-syncs mymaster 1

当 Sentinel 节点集合对主节点故障判定达成一致时,Sentinel 领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,parallel-syncs 就是用来限制在一次故障转移之后,每次向新的主节点发起复制操作的从节点个数,指出 Sentinel 属于并发还是串行。1代表每次只能复制一个,可以减轻 Master 的压力。

Redis哨兵機制的原理介紹(圖文)

sentinel auth-pass <master-name> <password></password></master-name>

如果 Sentinel 监控的主节点配置了密码,sentinel auth-pass 配置通过添加主节点的密码,防止 Sentinel 节点对主节点无法监控。

sentinel failover-timeout mymaster 180000

表示故障转移的时间。

技巧

1)Sentinel 节点不应该部署在一台物理“机器”上。

这里特意强调物理机是因为一台物理机做成了若干虚拟机或者现今比较流行的容器,它们虽然有不同的 IP 地址,但实际上它们都是同一台物理机,同一台物理机意味着如果这台机器有什么硬件故障,所有的虚拟机都会受到影响,为了实现 Sentinel 节点集合真正的高可用,请勿将 Sentinel 节点部署在同一台物理机器上。

2)部署至少三个且奇数个的 Sentinel 节点。

3个以上是通过增加 Sentinel 节点的个数提高对于故障判定的准确性,因为领导者选举需要至少一半加1个节点,奇数个节点可以在满足该条件的基础上节省一个节点。

【相关文章】

Redis主从复制的原理介绍(图文)

以上就是本篇文章的全部内容,希望能对大家的学习有所帮助。更多精彩内容大家可以关注php中文网相关教程栏目!!!

以上是Redis哨兵機制的原理介紹(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:思否 segmentfault。如有侵權,請聯絡admin@php.cn刪除