天天看點

RedisCluster 如何遷移資料

主要分為兩步

  1. 槽遷移計劃
  2. 遷移資料

槽遷移計劃

RedisCluster 如何遷移資料
RedisCluster 如何遷移資料

遷移資料

我們按照一個槽來舉例,主要分為下面幾個步驟

對目标節點執行指令,讓目标節點準備導入槽的資料

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>           

複制

整體流程如下

RedisCluster 如何遷移資料

前面有介紹過手動遷移槽的過程,但是過程繁瑣,容易出錯,是以我們也可以用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。           

複制