溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis集群重新分片(新增/移除節(jié)點)【理論】

發(fā)布時間:2020-06-25 10:16:16 來源:網(wǎng)絡(luò) 閱讀:7382 作者:張德帥ya 欄目:數(shù)據(jù)庫

redis集群重新分片原理:增加或移除節(jié)點) ?

? ? ?

? ? 以增加節(jié)點為例:

? ? ? ? 我們只需要將已經(jīng)分配給節(jié)點的哈希槽(hash slot),重新分配即可。

? ? ? ? 注:hash slot重新分配時,如果槽中存在key-value,那么key-value也將一起被分配出去。

? ? ? ??

? ? 例如:

? ? ? ? node1的哈希槽:0-5000

? ? ? ? node2的哈希槽:5001-10000

? ? ? ? node3的哈希槽:10001-16383

? ? 現(xiàn)在新增node4:

? ? 我們可以將node3的哈希槽調(diào)整為:10001-15000、node4的哈希槽:15001-16383

? ? 也可以在三個現(xiàn)有節(jié)點中,各自分出一部分哈希槽,給新的節(jié)點。


? ? redis集群的重新分片操作是由redis的集群管理軟件redis-trib負責(zé)執(zhí)行的,

? ? 但它不支持自動分片,需要自己計算從哪些節(jié)點上分配slot。

?

?redis集群在重新分片時,客戶端獲取數(shù)據(jù)原理: ?


? ? 重新分片時,集群不需要下線,并且源節(jié)點和目標節(jié)點都可以繼續(xù)處理命令請求。

? ??

? ? 在hash slot遷移過程中(一部分key-value在node3中,另一部分key-value在node4中)

? ? 如果客戶端向node3發(fā)送一個與數(shù)據(jù)庫key有關(guān)的命令:

? ? ? ? 1)node3會先在自己的數(shù)據(jù)庫里面查找請求的key,

? ? ? ? ? ? 如果找到,直接執(zhí)行客戶端發(fā)送的命令。

? ? ? ? 2)如果沒找到,node3給客戶端返回一個ASK錯誤,指引客戶端轉(zhuǎn)向node4,

? ? ? ? ? ? ?并且客戶端需要再次發(fā)送想要執(zhí)行的key相關(guān)的命令。 ? ?

? ? ? ? 3)客戶端轉(zhuǎn)向node4,首先發(fā)送ASKING命令,然后再次發(fā)送想要執(zhí)行的key相關(guān)的命令。

? ? ? ? ? ? ?如果直接發(fā)送想要執(zhí)行的key相關(guān)的命令,node4此時并不處理,

? ? ? ? ? ? ?因為key所在的槽還未遷移完,槽還屬于node3,會返回錯誤給客戶端。

? ? ? ? ? ? ?但如果先發(fā)送ASKING命令,node4在執(zhí)行key相關(guān)的命令時,

? ? ? ? ? ? ?不僅會檢查key所屬槽是否屬于自己,

? ? ? ? ? ? ?還會檢查migration_slots_to數(shù)組(正在遷往自己的槽)

? ? ? ? ? ? ?判斷key相關(guān)的槽是否正在遷往自己,如果是的話,則執(zhí)行key相關(guān)的命令。


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI