5.4. 數據遷移
當槽x從Node A向Node B遷移時,Node A和Node B都會有這個槽x,Node A上槽x的狀態設置爲MIGRATING,Node B上槽x的狀態被設置爲IMPORTING。
MIGRATING狀態:
1、如果key存在則成功處理。
2、如果key不存在,則返回客戶端ASK,客戶端根據ASK首先發送ASKING命令到目標節點,然後發送請求的命令到目標節點
3、當key包含多個命令
a)如果都存在則成功處理 b)如果都不存在,則返回客戶端ASK c)如果一部分存在,則返回客戶端TRYAGAIN,通知客戶端稍後重試,這樣當所有的key都遷移完畢的時候客戶端重試請求的時候回得到ASK,然後經過一次重定向就可以獲取這批鍵
4、此時不刷新客戶端中node的映射關係。
IMPORTING狀態
1、如果key不在該節點上,會被MOVED重定向,刷新客戶端中node的映射關係
2、如果是ASKING命令則命令會被執行,key不在遷移的節點已經被遷移到目標的節點
3、Key不存在則新建
5.4.1. 讀寫請求
槽裏面的key1還未遷移,並且槽屬於遷移中。假如key1屬於槽x,並且key1還在Node MPORTING。
5.4.2. MOVED請求
槽裏面的key1已經遷移過去,並且槽屬於遷移完。假如key1屬於槽x,並且key1不在Node A,而且槽x已經遷移到Node 7003
5.4.3. ASK請求
槽裏面的key1已經遷移完,並且槽屬於遷移中。假如key1屬於槽x,並且key1不在Node A,而且槽x還是MIGRATING狀態