在使用redis 3時,可以使用redis-migrate-tool工具做redis在線數據遷移(參考https://wxy0327.blog.csdn.net/article/details/84138537)。但是我們現在使用的redis server已經升級到5.0.3版本,再用redis-migrate-tool做遷移會報錯:
[2019-04-19 13:26:35.847] rmt_redis.c:6446 ERROR: Can't handle RDB format version 455180296
[2019-04-19 13:26:36.484] rmt_redis.c:6715 ERROR: Rdb file for node[140.210.73.38:20003] parsed failed
報錯的原因是RDB格式不兼容,於是不得不想別的辦法了。
1. 檢查redis集羣狀態
/home/redis/redis-5.0.3/src/redis-cli -a 123456 --cluster check 140.210.73.39:20001
2. 將所有master上的slot重新分配到一個master上
/home/redis/redis-5.0.3/src/redis-cli -a 123456 --cluster reshard --cluster-from 1b6d27312a2bf3f01d9d1fb7b3a6bece5aacc580 --cluster-to a1addf195454731ccf529519085b2001c257401c --cluster-slots 5462 --cluster-yes 140.210.73.39:20001
/home/redis/redis-5.0.3/src/redis-cli -a 123456 --cluster reshard --cluster-from fcba0b8ef4d1568a6f7e6c4e48b8f66bb2adca72 --cluster-to a1addf195454731ccf529519085b2001c257401c --cluster-slots 5461 --cluster-yes 140.210.73.39:20001
3. 停止上一步唯一持有slots的master
/home/redis/redis-5.0.3/src/redis-cli -a 123456 -h 140.210.73.39 -p 20001 shutdown
4. 將單實例持久化的rdb文件拷貝到唯一持有slots的master的數據目錄下
cp dump.rdb /data1/rediscluster1/20001/
5. 啓動唯一持有slots的master
/home/redis/redis-5.0.3/src/redis-server /data1/rediscluster1/20001/redis.conf
6. 檢查redis集羣狀態
/home/redis/redis-5.0.3/src/redis-cli -a 123456 --cluster check 140.210.73.39:20001
7. 在集羣master間重新分配slots
/home/redis/redis-5.0.3/src/redis-cli -a 123456 --cluster reshard --cluster-from a1addf195454731ccf529519085b2001c257401c --cluster-to fcba0b8ef4d1568a6f7e6c4e48b8f66bb2adca72 --cluster-slots 5462 --cluster-yes 140.210.73.39:20001
/home/redis/redis-5.0.3/src/redis-cli -a 123456 --cluster reshard --cluster-from a1addf195454731ccf529519085b2001c257401c --cluster-to 1b6d27312a2bf3f01d9d1fb7b3a6bece5aacc580 --cluster-slots 5461 --cluster-yes 140.210.73.39:20001
遺留問題:沒找到適合redis 5的在線遷移工具,是能採用這種離線的遷移方式。