工具下载:
https://github.com/eyjian/redis-tools/blob/master/move_redis_slot.sh
支持迁移已有的keys。
#!/bin/sh# 迁移 slot 工具,但一次只能迁移一个 slot # # 使用时,需要指定如下几个参数: # 1)参数1:必选参数,用于指定被迁移的 slot # 2)参数2:必选参数,用于指定源节点(格式为:ip:port) # 3)参数3:必选参数,用于指定目标节点(格式为:ip:port) # 6)参数4:可选参数,用于指定访问 redis 的密码 # # 使用示例(将2020从10.9.12.8:1383迁移到10.9.12.9:1386): # move_redis_slot.sh 2020 10.9.12.8:1383 10.9.12.9:1386 # # 执行本脚本时,有两个“确认”, # 第一个“确认”是提示参数是否正确, # 第二个“确认”是提示是否迁移已有的keys, # 如果输入非yes则只迁移slot,不迁移已有keys。 # 确保redis-cli可用 REDIS_CLI=${REDIS_CLI:-redis-cli} which "$REDIS_CLI" > /dev/null 2>&1 if test $? -ne 0; then echo "\`redis-cli\` not exists or not executable" exit 1 fi # 参数检查 if test $# -ne 3 -a $# -ne 4; then echo -e "Usage: `basename $0` 33[1;33mslot 33[m source_node destition_node redis_password" echo -e "Example1: `basename $0` 33[1;33m2020 33[m 127.0.0.1:6379 127.0.0.1:6380" echo -e "Example2: `basename $0` 33[1;33m2020 33[m 127.0.0.1:6379 127.0.0.1:6380 password123456" exit 1 fi SLOT=$1 SRC_NODE="$2" DEST_NODE="$3" REDIS_PASSOWRD="$4" # 得到指定节点的 nodeid function get_node_id() { node="$1" node_ip="`echo $node|cut -d':' -f1`" node_port=`echo $node|cut -d':' -f2` # 得到对应的 nodeid $REDIS_CLI --raw --no-auth-warning -a "$REDIS_PASSOWRD" -h $node_ip -p $node_port CLUSTER NODES | awk -v node=$node -F'[ @]' '{if ($2==node) printf("%s",$1);}' } SRC_NODE_ID="`get_node_id $SRC_NODE`" SRC_NODE_IP="`echo $SRC_NODE|cut -d':' -f1`" SRC_NODE_PORT=`echo $SRC_NODE|cut -d':' -f2` DEST_NODE_ID="`get_node_id $DEST_NODE`" DEST_NODE_IP="`echo $DEST_NODE|cut -d':' -f1`" DEST_NODE_PORT=`echo $DEST_NODE|cut -d':' -f2` echo -e "