【Redis】redis遷移資料到redis-cluster

小亮520cl發表於2018-05-23

不管是單節點還是叢集都可以用以下的思路遷移至cluster叢集中去

方案步驟
1)獲取原單例項節點D的持久化AOF(rdb)檔案,如果是叢集就先將所有的solt移動到一臺機器上
2)新準備三個節點A,B,C,建立叢集,目前叢集為空
3)把節點B,C上的slots,全部分配給A,關閉新的叢集(記住:一定要關閉新的叢集)
4)把1)中獲取的rdb檔案SCP到A上
5)重啟A節點,把資料全部載入到記憶體,再啟動BC節點
6)把A節點上的slots再均勻分配給B,C
7)新準備A1,B1,C1,分別作為A,B,C的slave加入到叢集
8)驗證資料的完整性和叢集狀態


 

步驟中的第6步分配時可能報以下的錯誤

[ERR] Calling MIGRATE ERR Syntax error, try CLIENT (LIST | KILL | GETNAME | SETNAME | PAUSE | REPLY)



解決辦法:

ruby gem安裝的redis庫,版本不能使用最新的4.0,否則redis-trib.rb reshard 127.0.0.1:7000 重新分片時會報語法錯誤。
1、解除安裝最新redis庫,gem uninstall redis
2、安裝3.x版本,gem install redis -v 3.3.5 測試3.2.1到3.3.5都可以,4.x以上的分片報錯。



reshard失敗之後如果check要是有如下錯誤

[WARNING] Node 192.168.0.11:6380 has slots in migrating state (5461).
[WARNING] The following slots are open: 5461
可以使用redis命令取消slots遷移(5461為slot的ID):
cluster setslot 5461 stable
需要注意,須登入到192.168.0.11:6380上執行redis的setslot子命令。



遷移方式二:

只有在無密碼的情況下才好用(單節點>>>叢集)
/usr/local/src/redis-4.0.8/src/redis-trib.rb.bak import --from 172.31.47.95:6381  --copy   172.31.32.223:6379
檢視 每個節點的size
127.0.0.1:6379> dbsize
(integer) 466
127.0.0.1:6379> dbsize
(integer) 478
127.0.0.1:6379> dbsize
(integer) 441
所有的key已經自動幫忙分到不同的slot去了



參考:

http://blog.51cto.com/13544424/2058280

http://blog.51cto.com/362475097/1890301   


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2154987/,如需轉載,請註明出處,否則將追究法律責任。

相關文章