您好,登錄后才能下訂單哦!
redis集群重新分片原理:(增加或移除節點) ?
? ? ?
? ? 以增加節點為例:
? ? ? ? 我們只需要將已經分配給節點的哈希槽(hash slot),重新分配即可。
? ? ? ? 注:hash slot重新分配時,如果槽中存在key-value,那么key-value也將一起被分配出去。
? ? ? ??
? ? 例如:
? ? ? ? node1的哈希槽:0-5000
? ? ? ? node2的哈希槽:5001-10000
? ? ? ? node3的哈希槽:10001-16383
? ? 現在新增node4:
? ? 我們可以將node3的哈希槽調整為:10001-15000、node4的哈希槽:15001-16383
? ? 也可以在三個現有節點中,各自分出一部分哈希槽,給新的節點。
? ? redis集群的重新分片操作是由redis的集群管理軟件redis-trib負責執行的,
? ? 但它不支持自動分片,需要自己計算從哪些節點上分配slot。
?
?redis集群在重新分片時,客戶端獲取數據原理: ?
? ? 重新分片時,集群不需要下線,并且源節點和目標節點都可以繼續處理命令請求。
? ??
? ? 在hash slot遷移過程中(一部分key-value在node3中,另一部分key-value在node4中)
? ? 如果客戶端向node3發送一個與數據庫key有關的命令:
? ? ? ? 1)node3會先在自己的數據庫里面查找請求的key,
? ? ? ? ? ? 如果找到,直接執行客戶端發送的命令。
? ? ? ? 2)如果沒找到,node3給客戶端返回一個ASK錯誤,指引客戶端轉向node4,
? ? ? ? ? ? ?并且客戶端需要再次發送想要執行的key相關的命令。 ? ?
? ? ? ? 3)客戶端轉向node4,首先發送ASKING命令,然后再次發送想要執行的key相關的命令。
? ? ? ? ? ? ?如果直接發送想要執行的key相關的命令,node4此時并不處理,
? ? ? ? ? ? ?因為key所在的槽還未遷移完,槽還屬于node3,會返回錯誤給客戶端。
? ? ? ? ? ? ?但如果先發送ASKING命令,node4在執行key相關的命令時,
? ? ? ? ? ? ?不僅會檢查key所屬槽是否屬于自己,
? ? ? ? ? ? ?還會檢查migration_slots_to數組(正在遷往自己的槽)
? ? ? ? ? ? ?判斷key相關的槽是否正在遷往自己,如果是的話,則執行key相關的命令。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。