redis的三種集羣方式

redis有三種集羣方式:主從複製,哨兵模式和集羣。html

1.主從複製前端

主從複製原理:redis

  • 從服務器鏈接主服務器,發送SYNC命令; 
  • 主服務器接收到SYNC命名後,開始執行BGSAVE命令生成RDB文件並使用緩衝區記錄此後執行的全部寫命令; 
  • 主服務器BGSAVE執行完後,向全部從服務器發送快照文件,並在發送期間繼續記錄被執行的寫命令; 
  • 從服務器收到快照文件後丟棄全部舊數據,載入收到的快照; 
  • 主服務器快照發送完畢後開始向從服務器發送緩衝區中的寫命令; 
  • 從服務器完成對快照的載入,開始接收命令請求,並執行來自主服務器緩衝區的寫命令;(從服務器初始化完成
  • 主服務器每執行一個寫命令就會向從服務器發送相同的寫命令,從服務器接收並執行收到的寫命令(從服務器初始化完成後的操做

主從複製優缺點:算法

優勢:數據庫

  • 支持主從複製,主機會自動將數據同步到從機,能夠進行讀寫分離
  • 爲了分載Master的讀操做壓力,Slave服務器能夠爲客戶端提供只讀操做的服務,寫服務仍然必須由Master來完成
  • Slave一樣能夠接受其它Slaves的鏈接和同步請求,這樣能夠有效的分載Master的同步壓力。
  • Master Server是以非阻塞的方式爲Slaves提供服務。因此在Master-Slave同步期間,客戶端仍然能夠提交查詢或修改請求。
  • Slave Server一樣是以非阻塞的方式完成數據同步。在同步期間,若是有客戶端提交查詢請求,Redis則返回同步以前的數據

缺點:服務器

  • Redis不具有自動容錯和恢復功能,主機從機的宕機都會致使前端部分讀寫請求失敗,須要等待機器重啓或者手動切換前端的IP才能恢復。
  • 主機宕機,宕機前有部分數據未能及時同步到從機,切換IP後還會引入數據不一致的問題,下降了系統的可用性。
  • Redis較難支持在線擴容,在集羣容量達到上限時在線擴容會變得很複雜。

2.哨兵模式併發

當主服務器中斷服務後,能夠將一個從服務器升級爲主服務器,以便繼續提供服務,可是這個過程須要人工手動來操做。 爲此,Redis 2.8中提供了哨兵工具來實現自動化的系統監控和故障恢復功能。分佈式

哨兵的做用就是監控Redis系統的運行情況。它的功能包括如下兩個。高併發

    (1)監控主服務器和從服務器是否正常運行。 
    (2)主服務器出現故障時自動將從服務器轉換爲主服務器。工具

哨兵的工做方式:

  • 每一個Sentinel(哨兵)進程以每秒鐘一次的頻率向整個集羣中的Master主服務器,Slave從服務器以及其餘Sentinel(哨兵)進程發送一個 PING 命令。
  • 若是一個實例(instance)距離最後一次有效回覆 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被 Sentinel(哨兵)進程標記爲主觀下線(SDOWN)
  • 若是一個Master主服務器被標記爲主觀下線(SDOWN),則正在監視這個Master主服務器的全部 Sentinel(哨兵)進程要以每秒一次的頻率確認Master主服務器的確進入了主觀下線狀態
  • 當有足夠數量的 Sentinel(哨兵)進程(大於等於配置文件指定的值)在指定的時間範圍內確認Master主服務器進入了主觀下線狀態(SDOWN), 則Master主服務器會被標記爲客觀下線(ODOWN)
  • 在通常狀況下, 每一個 Sentinel(哨兵)進程會以每 10 秒一次的頻率向集羣中的全部Master主服務器、Slave從服務器發送 INFO 命令。
  • 當Master主服務器被 Sentinel(哨兵)進程標記爲客觀下線(ODOWN)時,Sentinel(哨兵)進程向下線的 Master主服務器的全部 Slave從服務器發送 INFO 命令的頻率會從 10 秒一次改成每秒一次。
  • 若沒有足夠數量的 Sentinel(哨兵)進程贊成 Master主服務器下線, Master主服務器的客觀下線狀態就會被移除。若 Master主服務器從新向 Sentinel(哨兵)進程發送 PING 命令返回有效回覆,Master主服務器的主觀下線狀態就會被移除。

 哨兵模式的優缺點

優勢:

  • 哨兵模式是基於主從模式的,全部主從的優勢,哨兵模式都具備。
  • 主從能夠自動切換,系統更健壯,可用性更高。

缺點:

  • Redis較難支持在線擴容,在集羣容量達到上限時在線擴容會變得很複雜。

3.Redis-Cluster集羣

redis的哨兵模式基本已經能夠實現高可用,讀寫分離 ,可是在這種模式下每臺redis服務器都存儲相同的數據,很浪費內存,因此在redis3.0上加入了cluster模式,實現的redis的分佈式存儲,也就是說每臺redis節點上存儲不一樣的內容。

 Redis-Cluster採用無中心結構,它的特色以下:

  • 全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬。

  • 節點的fail是經過集羣中超過半數的節點檢測失效時才生效。

  • 客戶端與redis節點直連,不須要中間代理層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可。

工做方式:

在redis的每個節點上,都有這麼兩個東西,一個是插槽(slot),它的的取值範圍是:0-16383。還有一個就是cluster,能夠理解爲是一個集羣管理的插件。當咱們的存取的key到達的時候,redis會根據crc16的算法得出一個結果,而後把結果對 16384 求餘數,這樣每一個 key 都會對應一個編號在 0-16383 之間的哈希槽,經過這個值,去找到對應的插槽所對應的節點,而後直接自動跳轉到這個對應的節點上進行存取操做。

爲了保證高可用,redis-cluster集羣引入了主從模式,一個主節點對應一個或者多個從節點,當主節點宕機的時候,就會啓用從節點。當其它主節點ping一個主節點A時,若是半數以上的主節點與A通訊超時,那麼認爲主節點A宕機了。若是主節點A和它的從節點A1都宕機了,那麼該集羣就沒法再提供服務了。

 

Redis集羣設計包括2部分:哈希Slot和節點主從,本篇博文經過3張圖來搞明白Redis的集羣設計。

 

節點主從:

主從設計不算什麼新鮮玩意,在數據庫中咱們也常常用主歷來作讀寫分離,直接上圖:

 

 


圖上能看獲得的信息:

1, 只有1個Master,能夠有N個slaver,並且Slaver也能夠有本身的Slaver,因爲這種主從的關係決定他們是在配置階段就要指定他們的上下級關係,而不是Zookeeper那種平行關係是自主推優出來的。

2, 讀寫分離,Master只負責寫和同步數據給Slaver,Slaver承擔了被讀的任務,因此Slaver的擴容只能提升讀效率不能提升寫效率。

3, Slaver先將Master那邊獲取到的信息壓入磁盤,再load進內存,client端是從內存中讀取信息的,因此Redis是內存數據庫。

當一個新的Slaver加入到這個集羣時,會主動找Master來拜碼頭,Master發現新的小弟後將全量數據發送給新的Slaver,數據量越大性能消耗也就越大,因此儘可能避免在運行時作Slaver的擴容。

簡單總結下主從模式的設計:

優勢:讀寫分離,經過增長Slaver能夠提升併發讀的能力。

缺點:Master寫能力是瓶頸。

          雖然理論上對Slaver沒有限制可是維護Slaver開銷總將會變成瓶頸。

          Master的Disk大小也將會成爲整個Redis集羣存儲容量的瓶頸。

 

 

哈希Slot:

這個藝名看起來很文藝,但也不是什麼新技術,他的真名就叫分表分庫,再上一個圖:

 

 


圖上能看到的信息:

1, 對象保存到Redis以前先通過CRC16哈希到一個指定的Node上,例如Object4最終Hash到了Node1上。

2, 每一個Node被平均分配了一個Slot段,對應着0-16384,Slot不能重複也不能缺失,不然會致使對象重複存儲或沒法存儲。

3, Node之間也互相監聽,一旦有Node退出或者加入,會按照Slot爲單位作數據的遷移。例如Node1若是掉線了,0-5640這些Slot將會平均分攤到Node2和Node3上,因爲Node2和Node3自己維護的Slot還會在本身身上不會被從新分配,因此遷移過程當中不會影響到5641-16384Slot段的使用。

簡單總結下哈希Slot的優缺點:

缺點:每一個Node承擔着互相監聽、高併發數據寫入、高併發數據讀出,工做任務繁重

優勢:將Redis的寫操做分攤到了多個節點上,提升寫的併發能力,擴容簡單。

 

雙劍合併:

看到這裏你們也就發現了,主從和哈希的設計優缺點正好是相互彌補的,將圖一每一套主從對應到圖二中的每個Node,就是Redis集羣的終極形態,先Hash分邏輯節點,而後每一個邏輯節點內部是主從,如圖:

 

 


想擴展併發讀就添加Slaver,想擴展併發寫就添加Master,想擴容也就是添加Master,任何一個Slaver或者幾個Master掛了都不會是災難性的故障。
---------------------
版權聲明:本文爲CSDN博主「牛麥康納」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/yejingtao703/article/details/78484151

原文連接 http://www.javashuo.com/article/p-wscvvdqc-bk.html

相關文章
相關標籤/搜索