Redis Cluster 分散式叢集
阿新 • • 發佈:2020-08-07
Redis Cluster 介紹
- Redis 叢集是一個可以在多個Redis節點之間進行資料共享的設施(installation);
- Redis 叢集不支援那些需要同時處理多個鍵的 Redis 命令,因為執行這些命令需要在多個Redis節點之間移動資料,並且在高負載的情況下,這些命令將降低 Redis 叢集的效能,並導致不可預測的行為;
- Redis 叢集通過分割槽(partition)來提供一定程度的可用性(availability):即使叢集中有一部分節點失效或者無法進行通訊,叢集也可以繼續處理命令請求;
- Redis 叢集有將資料自動切分(split)到多個節點的能力
Redis Cluster 特點
# 高效能: - 在多分片節點中,將 16384 個槽位,均勻分佈到多個分片節點中 - 存資料時,將 KEY 做 CRC16(KEY),然後與 16384 進行取模,得出槽位值( 0 - 16384 之間 ) - 根據計算得出的槽位值,找到相對應的分片節點的主節點,儲存到相應槽位上 - 如果客戶端當時連線的節點不是將來要儲存的分片節點,分片叢集會將客戶端連線切換至真正儲存節點進行資料儲存 - 客戶端與 Redis 節點直連,不需要中間 Proxy 層,客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可 - Redis Cluster 解決了 Redis 資源利用率的問題 # 高可用 - 在搭建叢集時,會為每一個分片的主節點,對應一個從節點,實現 Slaveof 功能,同時當主節點 Down,實現類似於 Sentinel 的自動 Failover 的功能
槽(Slot)的概念
- 在叢集中,會把所有節點分為 16384 個槽位
- 槽位的序號是 0 - 16383,序號不重要,數量才重要
- 每一個槽位分配到資料的概率是一樣
Redis 故障轉移
在叢集裡面,節點會對其他節點進行下線檢測,當一個主節點下線時,叢集裡面的其他主節點負責對下線主節點進行故障移(到從節點);換句話說,叢集的節點集成了下線檢測和故障轉移等類似 Sentinel 的功能