Redis集群故障-存在状态长期为handshake的节点

现象

redis集群中某节点宕机

处理过程

  • 登录集群中任意节点执行"移除宕机节点"操作(CLUSTER FORGET NODE_ID)
  • 移除之后不久发现宕机节点状态变更为handshake,且NODE_ID每15s变更一次
  • 集群中所有节点执行"移除宕机节点"操作(文章末尾)
  • 集群恢复正常

FORGET单节点执行失效原因

1、在节点A执行FORGET 节点D后,此时节点D会从节点A的集群清单剔除,同时会置于节点A的禁用列表(cluster-node-timeout,默认15s)
2、此时节点D仍存在于集群中其他节点的可用清单,集群间同步失败。后续通信时节点A仍会继续尝试连接被移除的节点D

总结

  • CLUSTER FORGET NODE_ID 用于清除宕机节点,需要在所有节点执行;CLUSTER DELETE IP:PORT NODE_ID用于节点下线,只能在节点正常工作时生效。
  • 清除集群中不可用、失败节点。forget.sh
# ./forget.sh 127.0.0.7 6379 123456
nodes_addrs=$(redis-cli -a $3 -h $1 -p $2 cluster nodes|grep -v handshake| awk '{print $2}')
echo $nodes_addrs
for addr in ${nodes_addrs[@]}; do
    host=${addr%:*}
    port=${addr#*:}
    del_nodeids=$(redis-cli -a $3 -h $host -p $port cluster nodes|grep -E 'handshake|fail'| awk '{print $1}')
    for nodeid in ${del_nodeids[@]}; do
        echo $host $port $nodeid
        redis-cli -a $3 -h $host -p $port cluster forget $nodeid
    done
done
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值