目前Redis Cluster仍處于Beta版本,Redis 3.0將會加入,在此可以先對其主要功能和原理進(jìn)行一個預(yù)覽。參考《Redis Cluster - a pragmatic approach to distribution》。
沒有集群功能的Redis,每個master-slave主從復(fù)制都獨(dú)立于其他結(jié)點(diǎn),sharding需要在客戶端如Jedis中控制??梢允褂霉俜教峁┑?span lang="EN-US">Sentinel監(jiān)控主從的狀態(tài),實(shí)現(xiàn)自動的Fail-over切換。具體請參見《Redis主從和HA配置》。
所有結(jié)點(diǎn)直連其他結(jié)點(diǎn),端口為baseport(6379)+4000。為了帶寬和性能,通信協(xié)議是二進(jìn)制的??蛻舳伺c結(jié)點(diǎn)之間的通信還是正常的ascii協(xié)議。
雖然結(jié)點(diǎn)是互聯(lián)并且功能等同的,但實(shí)際上結(jié)點(diǎn)還是分為master和slave兩種。例如下圖所示,每個master有兩個副本,副本不接受寫請求。Redis-trib集群管理器會分配master和slave,使其盡量在不同的物理機(jī)上。
Redis集群客戶端分為兩種:Dummy和Smart:
Dummy模式:單連接,隨機(jī)連接一個結(jié)點(diǎn),對現(xiàn)有客戶端代碼結(jié)構(gòu)影響最小。
Smart模式:長連接到許多結(jié)點(diǎn),在客戶端緩存一份hashslot=>node的路由表,當(dāng)接收到服務(wù)器的-MOVED響應(yīng)時更新表項(xiàng)。這種方式具有低延遲,但當(dāng)集群很大時,客戶端會維護(hù)許多連接,此時應(yīng)當(dāng)共享client對象實(shí)例。
當(dāng)添加新結(jié)點(diǎn),可以使用redis-trib的MIGRATE命令進(jìn)行re-sharding。