Redis Cluster 集羣原理

簡介

Redis Cluster 是 Redis3.0 版本後推出的分佈式解決方案,當遇到單機內存、併發等瓶頸時,可使用此方案來解決。

主從模式哨兵模式 不同的是:

  • 主從模式和哨兵模式只能保證高可用,每一臺機器存儲的內容是相同的。
  • Cluster 能夠讓 Redis 存儲更多的內容,集羣裏 master 之間的內容是不同的。另外每一個 master 還可以配置自己的 slave 達到高可用

分區規則

Redis Cluste r採用了哈希分區的“虛擬槽分區”方式

所有的鍵根據哈希函數 (CRC16[key]&16383) 映射到 0-16383 槽內,共 16384(214)個槽位,每個節點維護部分槽及槽所映射的鍵值數據

在這裏插入圖片描述

缺陷

  1. 鍵的批量操作支持有限,比如mset, mget,如果多個鍵映射在不同的槽,就不支持了
  2. 鍵事務支持有限,當多個鍵分佈在不同節點時無法使用事務
  3. 鍵是數據分區的最小粒度,不能將一個很大的鍵值對映射到不同的節點
  4. 不支持多數據庫
  5. 複製結構只支持單層結構,不支持樹型結構

通信協議——Gossip

Gossip協議的主要職責就是信息交換,信息交換的載體就是節點之間彼此發送的Gossip消息,常用的Gossip消息有ping消息、pong消息、meet消息、fail消息

  • meet消息:用於通知新節點加入,消息發送者通知接收者加入到當前集羣,meet消息通信完後,接收節點會加入到集羣中,並進行週期性ping pong交換
  • ping消息:集羣內交換最頻繁的消息,集羣內每個節點每秒向其它節點發ping消息,用於檢測節點是否在線和狀態信息,ping消息發送封裝自身節點和其他節點的狀態數據;
  • pong消息:當接收到ping meet消息時,作爲響應消息返回給發送方,用來確認正常通信,pong消息也封閉了自身狀態數據;
  • fail消息:當節點判定集羣內的另一節點下線時,會向集羣內廣播一個fail消息

在這裏插入圖片描述

以上的所有消息格式爲:消息頭、消息體。消息頭包含發送節點自身狀態數據(比如節點ID、槽映射、節點角色、是否下線等),接收節點根據消息頭可以獲取到發送節點的相關數據。

在這裏插入圖片描述

節點定時任務

在這裏插入圖片描述

路由重定向

在這裏插入圖片描述

下線

在這裏插入圖片描述

主觀下線

在這裏插入圖片描述

客觀下線

許多個主觀就是客觀,生活中可不能這樣。
在這裏插入圖片描述

故障恢復

在這裏插入圖片描述

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