RedisCluster增加節點


新添加的節點是沒有哈希曹的,所以並不能正常存儲數據,需要給新添加的節點分配哈希槽。
增加節點的順序是先增加Master主節點,然后在增加Slave從節點。
刪除的順序是先刪除Slave從節點,然后在刪除Master主節點。

分配方式

  1. 在其他節點拿出適量的哈希槽分配到目標節點
  2. 在指定的節點拿出指定數量的哈希槽分配到目標節點

分配來源

all , 需要分配給目標節點的哈希槽來着當前集群的其他主節點,每個節點拿出的數量為集群自動決定
某個節點的id,這種情況下,需要分配給目標節點的哈希槽就由該節點全部承擔(節點id可以輸入多個,回車分割,輸入done結束)。

ps =ef | grep redis
redis-cli --cluster reshard  ip:port

遷移數據

數據遷移過程是逐個槽進行的
1)對目標節點發送cluster setslot{slot}importing{sourceNodeId}命令,讓目標節點准備導入槽的數據。
2)對源節點發送cluster setslot{slot}migrating{targetNodeId}命令,讓源節點准備遷出槽的數據。
3)源節點循環執行cluster getkeysinslot{slot}{count}命令,獲取count個 屬於槽{slot}的鍵
4)在源節點上執行migrate{targetIp}{targetPort}""0{timeout}keys{keys...} 命令,把獲取的鍵通過流水線(pipeline)機制批量遷移到目標節點,批量 遷移版本的migrate命令在Redis3.0.6以上版本提供,之前的migrate命令只能 單個鍵遷移。對於大量key的場景,批量鍵遷移將極大降低節點之間網絡IO次數。
5)重復執行步驟3)和步驟4)直到槽下所有的鍵值數據遷移到目標節點。
6)向集群內所有主節點發送cluster setslot{slot}node{targetNodeId}命令,通知槽分配給目標節點。為了保證槽節點映射變更及時傳播,需要遍歷發送給所有主節點更新被遷移的槽指向新節點。


免責聲明!

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



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