您好,登錄后才能下訂單哦!
這篇文章主要介紹redis集群原理的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
如果說依靠哨兵可以實現redis的高可用,如果還想在支持高并發同時容納海量的數據,那就需要redis集群。redis集群是redis提供的分布式數據存儲方案,集群通過數據分片sharding來進行數據的共享,同時提供復制和故障轉移的功能。
一個redis集群由多個節點node組成,而多個node之間通過cluster meet命令來進行連接,節點的握手過程:
節點A收到客戶端的cluster meet命令
A根據收到的IP地址和端口號,向B發送一條meet消息
節點B收到meet消息返回pong
A知道B收到了meet消息,返回一條ping消息,握手成功
最后,節點A將會通過gossip協議把節點B的信息傳播給集群中的其他節點,其他節點也將和B進行握手
redis通過集群分片的形式來保存數據,整個集群數據庫被分為16384個slot,集群中的每個節點可以處理0-16384個slot,當數據庫16384個slot都有節點在處理時,集群處于上線狀態,反之只要有一個slot沒有得到處理都會處理下線狀態。通過cluster addslots命令可以將slot指派給對應節點處理。
slot是一個位數組,數組的長度是16384/8=2048,而數組的每一位用1表示被節點處理,0表示不處理,如圖所示的話表示A節點處理0-7的slot。
當客戶端向節點發送命令,如果剛好找到slot屬于當前節點,那么節點就執行命令,反之,則會返回一個MOVED命令到客戶端指引客戶端轉向正確的節點。(MOVED過程是自動的)
如果增加或者移出節點,對于slot的重新分配也是非常方便的,redis提供了工具幫助實現slot的遷移,整個過程是完全在線的,不需要停止服務。
如果節點A向節點B發送ping消息,節點B沒有在規定的時間內響應pong,那么節點A會標記節點B為pfail疑似下線狀態,同時把B的狀態通過消息的形式發送給其他節點,如果超過半數以上的節點都標記B為pfail狀態,B就會被標記為fail下線狀態,此時將會發生故障轉移,優先從復制數據較多的從節點選擇一個成為主節點,并且接管下線節點的slot,整個過程和哨兵非常類似,都是基于Raft協議做選舉。
以上是“redis集群原理的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。