恢復內容開始 Redis集群設計包括2部分:哈希Slot和節點主從,本篇博文通過3張圖來搞明白Redis的集群設計。 節點主從: 主從設計不算什麼新鮮玩意,在資料庫中我們也經常用主從來做讀寫分離,直接上圖: 圖上能看得到的信息: 1, 只有1個Master,可以有N個slaver,而且Slaver也 ...
---恢復內容開始---
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掛了都不會是災難性的故障。
---恢復內容結束---