簡介
Redis Cluster 是 Redis3.0 版本後推出的分佈式解決方案,當遇到單機內存、併發等瓶頸時,可使用此方案來解決。
- 主從模式和哨兵模式只能保證高可用,每一臺機器存儲的內容是相同的。
- Cluster 能夠讓 Redis 存儲更多的內容,集羣裏 master 之間的內容是不同的。另外每一個 master 還可以配置自己的 slave 達到高可用
分區規則
Redis Cluste r採用了哈希分區的“虛擬槽分區”方式
所有的鍵根據哈希函數 (CRC16[key]&16383) 映射到 0-16383 槽內,共 16384(214)個槽位,每個節點維護部分槽及槽所映射的鍵值數據
缺陷
- 鍵的批量操作支持有限,比如mset, mget,如果多個鍵映射在不同的槽,就不支持了
- 鍵事務支持有限,當多個鍵分佈在不同節點時無法使用事務
- 鍵是數據分區的最小粒度,不能將一個很大的鍵值對映射到不同的節點
- 不支持多數據庫
- 複製結構只支持單層結構,不支持樹型結構
通信協議——Gossip
Gossip協議的主要職責就是信息交換,信息交換的載體就是節點之間彼此發送的Gossip消息,常用的Gossip消息有ping消息、pong消息、meet消息、fail消息
- meet消息:用於通知新節點加入,消息發送者通知接收者加入到當前集羣,meet消息通信完後,接收節點會加入到集羣中,並進行週期性ping pong交換
- ping消息:集羣內交換最頻繁的消息,集羣內每個節點每秒向其它節點發ping消息,用於檢測節點是否在線和狀態信息,ping消息發送封裝自身節點和其他節點的狀態數據;
- pong消息:當接收到ping meet消息時,作爲響應消息返回給發送方,用來確認正常通信,pong消息也封閉了自身狀態數據;
- fail消息:當節點判定集羣內的另一節點下線時,會向集羣內廣播一個fail消息
以上的所有消息格式爲:消息頭、消息體。消息頭包含發送節點自身狀態數據(比如節點ID、槽映射、節點角色、是否下線等),接收節點根據消息頭可以獲取到發送節點的相關數據。
節點定時任務
路由重定向
下線
主觀下線
客觀下線
許多個主觀就是客觀,生活中可不能這樣。