需要:昨晚学习了cluster slots命令,之前写的脚本,有可以换种方法获取到redis cluster slots 分布情况。
redis-cli -h $1 -p $2 -c cluster slots | xargs -n1 -n2 -n3 -n4 -n5 -n6 -n7 -n8 | awk '{print $3":"$4" "$1"-"$2}' > tmp_slot_range awk '{a[$1]++}END{for(i in a)print i}' tmp_slot_range | sort -nk2 -t ":" > ip_port for i in `cat ip_port` do slots=($(awk '/'$i'/{print $2}' tmp_slot_range)) len=${#slots[@]} printf "$i-> " for(( j=0;j<=len-1;j++)) do printf "${slots[j]} " done echo done
脚本说明:
第1行获取到结果如下:
5.5.5.102:29001 4-5460
5.5.5.101:29003 1-3
5.5.5.101:29003 10923-16383
5.5.5.103:29002 0-0
5.5.5.103:29002 5461-10922
第2行获取的结果如下:
5.5.5.102:29001
5.5.5.103:29002
5.5.5.101:29003
第4-14行获取第2行的结果的每一行对应的slot范围
测试结果
[redis@lxd-vm1 ~]$ sh a8.sh 5.5.5.101 29001 5.5.5.102:29001-> 4-5460 5.5.5.103:29002-> 0-0 5461-10922 5.5.5.101:29003-> 1-3 10923-16383 [redis@lxd-vm1 ~]$