這是twemproxy的架構,客戶端直接鏈接最上面的lvs(LB),第二層是同構的twemproxy節點,下面的redis master節點以及熱備的slave節點,另外還有獨立的sentinel集羣和切換控制程序,twemproxy先介紹到這裏。 node
在這種機制下,沒有中心節點(和代理模式的重要不一樣之處)。Redis Cluster將全部Key映射到16384個Slot中,集羣中每一個Redis實例負責一部分,業務程序經過集成的Redis Cluster客戶端進行操做。客戶端能夠向任一實例發出請求,若是所需數據不在該實例中,則該實例引導客戶端自動去對應實例讀寫數據。 redis
cluster的架構以下: 算法
圖上只有master節點(slave略去),全部節點構成一個徹底圖,slave節點在集羣中與master只有角色和功能的區別。 緩存
Sentinel是一個管理多個redis實例的工具,它能夠實現對redis的監控、通知、自動故障轉移。sentinel不斷的檢測redis實例是否能夠正常工做,經過API向其餘程序報告redis的狀態,若是redis master不能工做,則會自動啓動故障轉移進程,將其中的一個slave提高爲master,其餘的slave從新設置新的master實例。也就是說,它提供了: 架構
監控(Monitoring): Sentinel 會不斷地檢查你的主實例和從實例是否正常。 app
通知(Notification): 當被監控的某個 Redis 實例出現問題時, Sentinel 進程能夠經過 API 向管理員或者其餘應用程序發送通知。 運維
自動故障遷移(Automatic failover): 當一個主redis實例失效時, Sentinel 會開始記性一次failover, 它會將失效主實例的其中一個從實例升級爲新的主實例, 並讓失效主實例的其餘從實例改成複製新的主實例; 而當客戶端試圖鏈接失效的主實例時, 集羣也會向客戶端返回新主實例的地址, 使得集羣可使用新主實例代替失效實例。 分佈式
Redis Sentinel自身也是一個分佈式系統, 你能夠在一個架構中運行多個 Sentinel 進程, 這些進程使用流言協議(gossip protocols)來接收關於主Redis實例是否失效的信息, 而後使用投票協議來決定是否執行自動failover,以及評選出從Redis實例做爲新的主Redis實例。 工具
Sentienl工具提供了redis主-從方式的實現,那麼藉助基於VRRP的keepalived,就能實如今redis主-從切換時外部可見的redis實例不變性。除了在切換過程當中,客戶端不會明顯的感知到redis的服務實例變化。 測試
可是redis也支持客戶端與sentinel直接交互來實現高可用性,可是與1.類似,一樣須要特定客戶端,由於客戶端須要監控sentinel的頻道信息,並自動鏈接新的主節點。通常來講這種方式幾乎無人使用。