Redis Cluster原理


  Redis Cluster 是Redis的集群實現,內置數據自動分片機制,集群內部將所有的key映射到16384個Slot中,集群中的每個Redis Instance負責其中的一部分的Slot的讀寫。集群客戶端連接集群中任一Redis Instance即可發送命令,當Redis Instance收到自己不負責的Slot的請求時,會將負責請求Key所在Slot的Redis Instance地址返回給客戶端,客戶端收到后自動將原請求重新發往這個地址,對外部透明。一個Key到底屬於哪個Slot由crc16(key) % 16384 決定。

  關於負載均衡,集群的Redis Instance之間可以遷移數據,以Slot為單位,但不是自動的,需要外部命令觸發。

  關於集群成員管理,集群的節點(Redis Instance)和節點之間兩兩定期交換集群內節點信息並且更新,從發送節點的角度看,這些信息包括:集群內有哪些節點,IP和PORT是什么,節點名字是什么,節點的狀態(比如OK,PFAIL,FAIL,后面詳述)是什么,包括節點角色(master 或者 slave)等。

  關於可用性,集群由N組主從Redis Instance組成。主可以沒有從,但是沒有從 意味着主宕機后主負責的Slot讀寫服務不可用。一個主可以有多個從,主宕機時,某個從會被提升為主,具體哪個從被提升為主,協議類似於Raft,參見這里。如何檢測主宕機?Redis Cluster采用quorum+心跳的機制。從節點的角度看,節點會定期給其他所有的節點發送Ping,cluster-node-timeout(可配置,秒級)時間內沒有收到對方的回復,則單方面認為對端節點宕機,將該節點標為PFAIL狀態。通過節點之間交換信息收集到quorum個節點都認為這個節點為PFAIL,則將該節點標記為FAIL,並且將其發送給其他所有節點,其他所有節點收到后立即認為該節點宕機。從這里可以看出,主宕機后,至少cluster-node-timeout時間內該主所負責的Slot的讀寫服務不可用。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM