天天看點

Redis叢集你們怎麼做?

1) 主從模式,一主多從。雖然redis單機的qps可以達到10W+,但是在某些高通路場景下依然不夠用,一般通過讀寫分離來增加slave,減少主機壓力。

這種方式需要使用者自行開發主從切換功能,也就是使用哨兵去探測每個執行個體的健康狀況,然後通過指令進行叢集狀态的改變。 當叢集規模變大可以加入類似zk的主動通知功能,降低風險。一般可以維護幾千個redis節點。

2) 代理模式,比如codis,代理層通過把自己模拟成一個redis,接受來自用戶端的請求,然後按照自定義的路由邏輯進行資料分片和遷移。

加入了proxy層,對性能有一定的損耗,多個proxy使用lvs進行負載均衡

3) redis cluster是社群提供的親生叢集方案,官方目前推薦的方案, 主要特點是去中心化,不需要proxy代理。主要的用途是實作資料分片(Data Sharding),同樣可以實作HA。

redis cluster 采用了hash槽的概念,叢集會預先配置設定16384個槽,并将這些槽配置設定給具體的服務節點,通過Key進行CRC16(KEY)%16384 運算得到對應的槽是哪一個,進而将讀寫操作轉發到該槽對應的服務節點。當有新的節點加入或者一處的時候,再來遷移這些槽以及對應的資料。 更友善的動态擴容和縮容。