本文件只是为了我在工作中使用方便记录。

1、首先可以针对现场环境编写一个较为常用的脚本。通过这个脚本,可以保证在 redis 集群上的每个节点都执行统一的命令

 
##### redis.sh
REDIS_CLI=/home/xingchen/SoftWareBin/just_clients/redis/bin/redis-cli
COMMAND=$@ ${REDIS_CLI} -h 172.22.212.2 -p 6370 $@ ${REDIS_CLI} -h 172.22.212.2
-p 6371 $@ ${REDIS_CLI} -h 172.22.212.2 -p 6372 $@ ${REDIS_CLI} -h 172.22.213.2
-p 6370 $@ ${REDIS_CLI} -h 172.22.213.2 -p 6371 $@ ${REDIS_CLI} -h 172.22.213.2
-p 6372 $@ ${REDIS_CLI} -h 172.21.221.2 -p 6370 $@ ${REDIS_CLI} -h 172.21.221.2
-p 6371 $@ ${REDIS_CLI} -h 172.21.221.2 -p 6372 $@
2、查看集群状态
 
$ sh redis.sh info memory | grep used_memory_human // 查看 redis 每个节点已用内存 $ sh
redis.sh info memory | grep maxmemory_human // 查看 redis
每个节点可用的最大内存(如果发现查询结果为0,则表示不限制) $ sh redis.sh dbsize // 查看 redis 每个节点中 key
的数量。如果发现节点之间的数据量差别极大,这时候就需要考虑是否存在数据倾斜的问题 // 即是否存在某些 key 的值过大 $ sh redis.sh
cluster info | grep state // 查询每个节点的状态。如果结果出现 fail,则集群中某些节点可能存在问题
cluster_state:ok cluster_state:ok cluster_state:ok cluster_state:ok
cluster_state:ok cluster_state:ok $ sh redis.sh cluster nodes // 查询节点的主从信息 #
正常结果: 766c24407d8efb665d8335a41a544502d49f4aeb 172.22.107.1:6370@16370 master -
0 1544581985130 5 connected 10923-16383
b876e41e214a4530c61738cc9fcb53b6bb9412d0 172.22.73.1:6371@16371 slave
af543c9c01a7f0261061b1bf306c22b7db43eaf3 0 1544581987129 4 connected
01ad3a948720330b67b7ae22492d47a1b67db518 172.22.73.1:6370@16370 master - 0
1544581987000 3 connected 5461-10922 033b1078ca9d049b47b7fead91958c387925303b
172.22.72.1:6371@16371 slave 01ad3a948720330b67b7ae22492d47a1b67db518 0
1544581986129 3 connected 0640d2e72ee9554c5579739fb6d04bf27b92495a
172.22.107.1:6371@16371 slave 766c24407d8efb665d8335a41a544502d49f4aeb 0
1544581984129 6 connected af543c9c01a7f0261061b1bf306c22b7db43eaf3
172.22.72.1:6370@16370 myself,master - 0 1544581983000 1 connected 0-5460
b876e41e214a4530c61738cc9fcb53b6bb9412d0 172.22.73.1:6371@16371 slave
af543c9c01a7f0261061b1bf306c22b7db43eaf3 0 1544581986204 4 connected
033b1078ca9d049b47b7fead91958c387925303b 172.22.72.1:6371@16371 myself,slave
01ad3a948720330b67b7ae22492d47a1b67db518 0 1544581984000 2 connected #
异常结果(如果出现了类似于以下的结果,则说明当前redis集群状态异常,部分slot迁移时出现问题)
[5458-<-b4c6c588vf4d44fdfce13685379c091dc423f85]
[5459-<-b4c6c588vf4d44fdfae136f5379c091dc423f8e]
[5460-<-b4c6c5887f4d44fd3ce1368537bc091dc423f83] ... ... ... ... $ watch "sh
redis.sh randomkey" // 从 redis 的每个节点中取一个随机的key;linux 的 watch 命令可以保证两秒一刷新。 key_1
CLUSTER DOWN ; the cluster is down // (提示文本可能有很小的出入,但是核心的输出信息就是这样) CLUSTER DOWN
; the cluster is down // 表示当前 redis 节点被阻塞(可能是因为slot迁移、或者redis节点重启后在初始化数据) key_4
key_5 key_6
3、比较笨的方法删除多个Key
#将以my.test_key开头的key取出来放到文件中 $ sh redis.sh keys my.test_key* > redis_out.txt
#通过awk拼接字符串对没个key进行del $ cat redis_out.txt | awk -F '###' 'BEGIN {print
"#!/bin/sh"} {print "sh redis.sh del "$1}} END {print ""}' > redis_out.sh $ sh
redis_out.sh
4、集群问题修复命令(主要针对于 sh redis.sh cluster nodes 命令查询时得到异常结果的情况 )
# cd_redis 在 linux 服务器上 cd 到 redis 的安装路径 #
注意,正常来说,redis集群会有多个节点,但是理论上来说只有一个节点可以顺利执行以下命令 # 一般是 redis
的第一个节点,但是也可能是其他节点,因此建立都执行一遍 $ ./src/redis-trib.rb check
${redis_ip}:${redis_port} // 检查redis节点是否存在问题;这里只需要提供出现异常情况的节点即可 $
./src/redis-trib.rb fix ${redis_ip}:${redis_port} //
尝试修复redis节点存在的问题;这里只需要提供出现异常情况的节点即可
 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信