1. 程式人生 > >redis實戰--redis cluster的原理分析

redis實戰--redis cluster的原理分析

why redis cluster

之前我們以前瞭解過主從複製,讀寫分離的架構,他就能夠支援一定資料量的場景;為什麼我們還需要搭建redis cluster的叢集呢?

如果我們的快取資料量只有幾個G ,那麼基於單master的主從架構是足夠滿足我的需求,可以搭建一主多從的架構,通過搭建sentianl叢集來保證redis主從架構的高可用性;後續可以通過增加從節點的數量來保證讀的效能。

但是如果我們是海量資料的場景,還需要支援高可用,高併發啊,那麼之前說的架構是有單機的瓶頸(即儲存的資料量不能超過master所在伺服器的實體記憶體)。所以說無法支援海量資料的高併發以及高可用的場景,這時候就需要redis cluster出馬。

什麼是redis cluster

概括來說就是通過hash slot演算法,將資料切割到每個master節點上;通過內建的高可用支援,部分master不可用的時候,整個叢集還可以繼續work。
在redis cluster架構中,每個redis需要開發2個埠,一個用來與客戶端通訊;另外一個就是用來與各個節點間通訊的,也就是cluster bus(叢集匯流排)

redis的hash slot演算法:
其實是一致性hash的加強版,將redis的key空間分割為16384個槽位,然後計算每個key的CRC16值,然後對16384取模,獲取到key對應的hash slot。

reids cluster中的每個master都持有部分slot;會將16384個槽位(slot)幾乎平均分配到幾個master中,如果新增一個master,那麼會將其他master的hash slot移動過去;如果是減少master,會將該master的hash slot移動到其他的master中。

總結:

redis cluster 支援master和slave主從複製,讀寫分離;另外他們也可以支援高可用和主備切換;多個master支援基於hash slot演算法的分散式資料儲存。