(一)什麼是Redis Cluster? Redis Cluster是Redis的分散式解決方案,在Redis 3.0版本正式推出的,有效解決了Redis分散式方面的需求。當遇到單機記憶體、併發、流量等瓶頸時,可以採用Cluster架構達到負載均衡的目的。 Redis使用中遇到的瓶頸 我們日常在對於r ...
(一)什麼是Redis Cluster?
Redis Cluster是Redis的分散式解決方案,在Redis 3.0版本正式推出的,有效解決了Redis分散式方面的需求。當遇到單機記憶體、併發、流量等瓶頸時,可以採用Cluster架構達到負載均衡的目的。
- Redis使用中遇到的瓶頸
我們日常在對於redis的使用中,經常會遇到一些問題:
(1)高可用問題,如何保證redis的持續高可用性。
(2)容量問題,單實例redis記憶體無法無限擴充,達到32G後就進入了64位世界,性能下降。
(3)併發性能問題,redis號稱單實例10萬併發,但也是有盡頭的。
- Redis-Cluster的優勢
(1)官方推薦,毋庸置疑。
(2)去中心化,集群最大可增加1000個節點,性能隨節點增加而線性擴展。
(3)管理方便,後續可自行增加或摘除節點,移動分槽等等。
(4)簡單,易上手。
(二)數據分佈理論與Redis的數據分區
- 分散式資料庫首要解決把整個數據集按照分區規則映射到多個節點的問題,即把數據集劃分到多個節點上,每個節點負責整個數據的一個子集。常見的分區規則有哈希分區和順序分區。Redis Cluster採用哈希分區規則。
- 虛擬槽分區巧妙地使用了哈希空間,使用分散度良好的哈希函數把所有的數據映射到一個固定範圍內的整數集合,整數定義為槽(slot)。比如:Redis Cluster槽的範圍是0 ~ 16383。槽是集群內數據管理和遷移的基本單位。
- Redis Cluster採用虛擬槽分區,所有的鍵根據哈希函數映射到0 ~ 16383,計算公式:slot = CRC16(key)&16383。每一個節點負責維護一部分槽以及槽所映射的鍵值數據。
(三)Redis Cluster的體系架構
我們以6個節點為例,來介紹Redis Cluster的體系架構,如下圖所示。其中:三個為master節點,另外三個為slave節點。