Redis集羣個人筆記

Redis有三種集羣模式:

1、主從模式

2、Sentinel模式

3、Cluster模式

 

主從模式

主從模式是三種模式中最簡單的,分爲兩類:主數據庫(master)和從數據庫(slave)

讀寫分離策略:從節點可以擴展redis的讀能力,有效應對大併發量的讀操作

  • 一個master可以擁有多個slave,一個slave只能對應一個master
  • slave掛了不影響其他節點工作,重啓後會從master同步數據過來
  • master掛了,不會重新選一個master,但不影響slave的讀
  • master可以進行讀寫操作,當數據發生變化時會自動將數據同步給slave;
  • slave一般只負責讀,並且接收master同步過來的數據

缺點:

master節點在主從模式中是唯一,若master掛掉,redis無法提供寫的服務;

主從模式不具備高可用

 

Sentinel(哨兵)模式

它的作用就是監控redis集羣的運行狀況,當使用sentinel模式的時候,客戶端不要直接連接Redis,

而是連接sentinel的ip和端口,由sentinel來提供可用的redis服務。

  • sentinel模式是建立在主從模式的基礎上
  • 當master掛了,sentinel會在slave中選擇一個做爲master
  • master重啓後,會變成slave節點
  • sentinel可以啓動多個形成一個集羣,sentinel之間也會自動監控

缺點:

sentinel主要針對主節點的高可用切換,slave節點作爲備份節點不提供服務,不能解決讀寫分離問題;

Cluster模式

哨兵模式已經可以實現高可用,但是在這種模式下每臺redis服務都存儲相同的數據,很浪費內存,所以在

redis3.0加入了cluster模式,實現分佈式存儲,也就是說每個節點存儲不同的數據。

客戶端與redis節點直連,不需要中間代理層,客戶端連接集羣中任何一個節點即可。

cluster模式就是爲了解決單機redis容量有限的問題,將redis的數據根據一定規則分配到多臺機器。

Redis Cluster沒有使用一致性hash,而是使用數據分片引入 hash槽(hash slot)來實現,集羣預分好16384個桶,當往集羣中放置一個key-value時,redis先對key使用crc16算出一個結果,然後把結果對16384求餘,映射到對應的節點槽,一個hash槽中會有很多key-value。

Hash槽的好處在於方便的添加和移除節點:

當需要增加節點時,只需要把其他節點的某些槽移到新的節點;

當需要移除節點時,只需要把移除節點上的槽移到其他節點;

新增和移除節點的時候不用停掉所有redis服務。

 

舉例節點分配:

節點A:0 - 5460;

節點B:5461 - 10922;

節點C:10923 - 16383.

當存入一個值,按照hash槽的算法,CRC16(key)%16384 = 6782。就會把key的存儲分配到節點B。

當獲取這個key時,也是同樣的算法,內部跳轉到B節點上獲取數據。

 

新增一個節點時,從各個節點的前端各取一部分槽到新的節點上;

刪除一個節點時,將節點的槽移動到其他節點,然後再刪除這個節點。

 

Cluster模式爲了保證數據的高可用,加入主從模式:

一個主節點對應一個或多個從節點,主節點提供數據讀取,從節點是從主節點主動拉取數據備份,當這個主節點掛掉後,就會在從節點選舉一個來當主節點。

以上3個主節點,如果沒有加入從節點 ,如果其他一個主節點掛掉,就無法訪問整個集羣;所以在建立集羣的時候,一定要爲每個主節點添加從節點。

 

 

 

 

 

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