Redis的部署模式

前言

今天開會講到我們使用的是Redis的Cluster模式,發現對redis的部署模式還不是非常清晰。Redis有很多種部署模式,如:master/slave(主從)模式、sentinel(哨兵)模式、cluster(集羣)模式等,這裏一一搞清楚。

1、單節點模式

主要用於平時自己試玩,如寫個小demo。

2、master/slave模式

向master節點寫入數據,然後同步到slave節點。
一個master可以有多個slave,但一個slave只能有一個master。

2.1、主從模式的作用:

  • 通過在從節點上冗餘一份數據來保證主節點故障時數據高可用
  • 讀寫分離:在從節點讀;主節點寫

2.2、關於容災:

  • slave節點掛了:不影響其他slave節點的讀,也不影響master節點的寫和讀。
  • master節點掛了:不影響slave的讀;只是master不再提供寫服務,也不會在slave裏進行選主,直到master節點恢復後纔再次提供寫服務。

master掛了,redis集羣寫操作就停了,這就是master/slave模式的致命缺點。

3、sentinel模式

sentinel模式,即哨兵。就是說主從模式中主掛了後,slave不能選主,那麼我就安排一個或多個sentinel來做,sentinel發現master節點掛了後,sentinel就會從slave中重新選舉一個master。

sentinel模式是建立在主從模式的基礎上的,如果只有一個redis節點,那麼sentinel就沒有任何意義。
當master節點掛了後,sentinel會在slave中選一個作爲master,並修改他們的配置文件,其他slave的配置文件也會被修改,比如slaveof屬性會指向新的master。當Master節點重新啓動後,它將不再是Master而是作爲slave來接收新的master節點的同步數據。

sentinel因爲是一個進程,也有掛掉的可能,所以sentinel也會啓動多個,形成一個sentinel集羣。
一個sentinel或sentinel集羣可以管理多個主從redis。sentinel最好不要和redis部署在同一個機器,不如redis服務器掛了,sentinel也掛了。

當使用sentinel模式時,客戶端不是直接連redis,而是連sentinel的IP和Port,由sentinel來提供具體的可提供服務的redis, 這樣當master節點掛掉後,sentinel就會感知,並將新的master節點提供給使用者。

semtinel模式基本可以滿足一般生產的需求,具備高可用性。但當數據量過大到一臺服務器存放不下的時候,主從模式或sentinel模式就不能滿足需求了,這個時候需要對存儲的數據進行分片,將數據存儲到多個Redis實例中,這時需要用到cluster模式。

4、cluster模式

隨着業務的增加,使用sentinel模式,不可避免的要對redis進行擴容。redis sentinel模式的水平擴容一致都是程序員心中的痛點,因爲水平擴容牽涉到數據的遷移。遷移過程一方面要保證自己業務是可用的,一方面要儘量不丟失數據,所以數據能不遷移就不遷移,這時redis cluster模式應運而生了。

redis cluster模式是redis的分佈式解決方案,當遇到單機內存、併發、流量等瓶頸時,可以採用cluster模式,達到負載均衡的目的。分佈式集羣,首先要解決吧整個數據集按照分區規則映射到多個節點的問題,即把數據集花費到多個節點,每個節點負責整個數據的一個子集。redis cluster採用哈希分區規則中的虛擬槽分區。虛擬槽分區巧妙地使用了分區空間,使用分段度良好的哈希函數,把所有的數據映射到一個固定範圍內的整數集合,整數定義爲槽(slot)。redis cluter的slot的範圍是0~16383。槽是集羣內數據管理和遷移的基本單位。採用大範圍的槽的目的是爲了方便數據的拆分和集羣的擴展,每個節點負責一定數量的槽。redis cluster的所有key根據hash函數映射到0~16383,計算公式:lost = CRC16(key) & 16383。每個實節點負責維護一部分槽以及槽所映射的key/value數據。

下圖真心了一個五個節點構成的集羣,每個節點評價大約負責3276個槽,以及通過計算公式映射到對應節點的對應槽的過程。
在這裏插入圖片描述
cluster模式總結:
cluster可以說是sentinel模式和主從模式的結合體,通過cluster可以實現主從和master重選功能,所以如果配置兩個副本和三個分片的話,就需要6個redis實例。因爲redis的數據是根據一定規則分片到cluster不同機器的,當數據量過大時,可以新增機器進行擴容。

cluster模式適合數據量巨大的緩存需求,當數據量不是很大使用sentinel模式即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章