1. 程式人生 > 實用技巧 >Redis Cluster 分散式叢集

Redis Cluster 分散式叢集

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 的功能