Redis集羣結構介紹(理論)

本文僅僅只是針對 Redis 的 cluster 進羣 作簡單的介紹(僅僅是基於理論知識),在並無對其涉及到的深層次概念作深刻的探討。 Redis 3.0 版本以後支持的cluster,下圖就是Redis cluster 進羣拓撲圖數據庫

    Redis cluster 是一個分佈式、容錯的Redis 的實現,Redis 集羣是 Redis 提供分佈式數據庫方案,能夠在多個Redis 節點之間進行數據共享的程序集,並提供複製、故障轉移功能。Redis Cluster 中不存在所謂的中心節點或者代理節點,每一個節點都有保存數據和整個集羣的狀態,也就是說每一個節點都會保存其餘節點的信息,而且定時會給其餘節點發送心跳,可以及時感知集羣中的節點。數據結構

    Redis Cluster 不支持那些須要同時處理多個鍵的Redis 命令,由於執行這些命令的時候,須要在多個節點中間進行數據同步,並且在高負載的狀況下,會對下降 Redis 的性能,嚴重的可能會致使不可預測的錯誤。異步

    客戶端不須要鏈接Redis cluster 中的全部節點,只要鏈接到cluster 中的任何一個可用節點便可,這就意味着:只要cluster 中有一個可用節點就能夠正常使用。分佈式

集羣的數據結構性能

    Redis cluster 中節點負責存儲數據,記錄集羣狀態,cluster 能自動發現其餘節點,檢測出節點的狀態,並在必要的時候剔除故障節點,提高新的節點。代理

    Redis cluster 全部節點彼此互聯(PING-PONG 機制),並且節點fail 是經過Cluster 中超過半數的節點檢測失效時纔會生效,從而Redis 根據自動故障機制,將從節點提高爲主節點,這時Redis cluster恢復可用。blog

    clusteNode結構保存了一個當前節點狀態,好比節點的建立時間、節點的名稱等、節點當前的配置紀元、節點的IP地址和端口號!Redis cluster 經過分片來保存數據庫的鍵值對,集羣的整個數據庫被分紅了16384個slot,數據庫中的每一個鍵都屬於這16384個slot的其中一個,每一個節點均可以處理0或者最多16384個slot。當數據庫中的16384個slot都有節點在處理時,Redis cluster 處於上線狀態,而若是任何一個slot 沒有獲得處理,則說明集羣處於下線狀態。同步

Redis cluster 中的節點之間使用異步複製hash

集羣的數據共享ast

    Redis 集羣使用數據分片(sharding)而非一致性哈希(consistency hashing)來實現。

    Redis 提供多個節點實例間的數據共享,也就是Redis A、B、C、D 彼此之間的數據是同步的,一樣彼此之間也是能夠通訊,而對於客戶端操做的key 是有Redis 系統自行分配到各個節點中。見圖1。

當Redis cluster 中的一個節點故障,根據Redis cluster複製機制(Master-Slave),將從其他可用節點中選擇一個做爲主節點繼續保持工做,如圖2 所示。一旦節點A故障了,那麼其從節點A一、A2就能夠接管並繼續提供與A一樣的服務,固然若是節點A、A一、A2節點都出現問題, 那麼這個集羣就不會繼續工做了。

 

相關文章
相關標籤/搜索