|
最近在做redis相关的东西,需要把2台redis切分成16个shard, 16个主shard分布在4台128G的机器上,从shard分布在12台64G的机器上,由于机器太多,查询相关的信息不太方便,特别是我要手动的去查询或者删除某些信息就需要去每台机器上查看,当然也可以通过相关的程序来查询和删除,这里主要介绍如何利用linux shell来实现这个目标。
具体的脚本内如如下:
#!/bin/bashtopic=(xx.x.xx.xx:6385 xx.x.xxx.xx:6387)topic_slave=(xx.xx.xx.xx:7382 xx.xx.xx.x:7382)function lookup() {i=0servers=($1)count=${#servers[@]}ops=$2while [ $i -lt $count ] do server=${servers[$i]}host=`echo $server | cut -d: -f1`port=`echo $server | cut -d: -f2`echo "Redis[$host:$port] $ops"(echo -en "$ops\r\n"; sleep 1) | nc $host $porti=$((i+1)) done}cmdstr=$@prefix=`echo $cmdstr | cut -d' ' -f1`key=`echo $cmdstr | cut -d' ' -f2-`case "$prefix" in t)lookup "${topic
}" "$key";;ts)lookup "${topic_slave
}" "$key";;esacexit 0
具体命令方式为: sh redis-cluster.sh t info 为查询redis集群的信息, sh redis-cluster.sh t get key 获取集群中key的值。这里t指的是主shard, ts对应的是从shard,其实也可以按照数据类型来分shard进行查询,原理是比较类似的。
利用以上脚本可以比较方便的指导集群的信息,比如占用内存的信息可以采用以下方式:#!/bin/bashsh redis-cluster.sh t info | grep "used_memory_human" | awk -F":" 'BEGIN{sum = 0}{ t=substr($2, length($2)-1, 1); s=substr($2, 0, length($2) -2 ); if(t=="G") {sum += s*1024;} else {sum += s;}} END{print sum}'
版权声明:本文为博主原创文章,未经博主允许不得转载。 |
|
|