主要分為兩步
- 槽遷移計劃
- 遷移資料
槽遷移計劃
遷移資料
我們按照一個槽來舉例,主要分為下面幾個步驟
對目标節點執行指令,讓目标節點準備導入槽的資料
2.對源節點執行指令,讓源節點準備遷出槽的資料
cluster setslot <slot> migrating <target_node_id>
複制
3.源節點循環執行指令,擷取到count個資料槽的資料
cluster getkeysinslot <slot> <count>
複制
4.在源節點執行指令,把可以遷移過去
migrate <target_Ip> <target_port> key 0 <timeout>
複制
5.重複執行3,4步驟直到槽下的資料到目标節點
6.向叢集中的其他主節點執行指令,通知槽已經配置設定給了目标節點
cluster setslot <slot> node <target_node_id>
複制
整體流程如下
前面有介紹過手動遷移槽的過程,但是過程繁瑣,容易出錯,是以我們也可以用redis-cli自動遷移槽
redis-trib.rb reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipeline <arg>
參數說明:
host:port:必傳參數,叢集内任意節點位址,用來擷取整個叢集資訊。
--from:制定源節點的id,如果有多個源節點,使用逗号分隔,如果是all源節點變為叢集内所有主節點,在遷移過程中提示使用者輸入。
--to:需要遷移的目标節點的id,目标節點隻能填寫一個,在遷移過程中提示使用者輸入。
--slots:需要遷移槽的總數量,在遷移過程中提示使用者輸入。
--yes:當列印出reshard執行計劃時,是否需要使用者輸入yes确認後再執行reshard。
-timeout:控制每次migrate操作的逾時時間,預設為60000毫秒。
--pipeline:控制每次批量遷移鍵的數量,預設為10。
複制