(1)自動將數據進行分片,每個master上放一部分數據 (2)提供內置的高可用支持,部分master不可用時,還是可以繼續工作的
在redis cluster架構下,每個redis要放開兩個端口號,比如一個是6379,另外一個就是加10000的端口號,比如16379
16379端口號是用來進行節點間通信的,也就是cluster bus的東西,集群總線。cluster bus的通信,用來進行故障檢測,配置更新,故障轉移授權
cluster bus用了另外一種二進制的協議,主要用於節點間進行高效的數據交換,占用更少的網絡帶寬和處理時間
2、最老土的hash算法和弊端(大量緩存重建)
3、一致性hash算法(自動緩存遷移)+虛擬節點(自動負載均衡)
4、redis cluster的hash slot算法
redis cluster有固定的16384個hash slot,對每個key計算CRC16值,然后對16384取模,可以獲取key對應的hash slot
redis cluster中每個master都會持有部分slot,比如有3個master,那么可能每個master持有5000多個hash slot
hash slot讓node的增加和移除很簡單,增加一個master,就將其他master的hash slot移動部分過去,減少一個master,就將它的hash slot移動到其他master上去
移動hash slot的成本是非常低的
客戶端的api,可以對指定的數據,讓他們走同一個hash slot,通過hash tag來實現
redis cluster 節點間采用gossip協議進行通信