redis cluster forget

项目场景:

redis cluster有一台slave挂掉了,并且不准备在启用,但是使用cluster nodes命令时,还会有handshake出现,该怎么把他去掉


问题描述

以下是一个 Bash 脚本,可以自动化 Redis 集群的节点移除过程。请注意,您需要根据您的环境调整脚本中的参数。

#!/bin/bash  

# Redis集群节点的IP地址和端口  
ACTIVE_NODE_IP="<ip_of_any_active_node>"  
ACTIVE_NODE_PORT="<port_of_any_active_node>"  

# 获取当前的节点列表  
NODES=$(redis-cli -h $ACTIVE_NODE_IP -p $ACTIVE_NODE_PORT CLUSTER NODES)  

# 从节点列表中提取失败节点ID  
FAILED_NODE_IDS=$(echo "$NODES" | grep -E "fail|disconnected" | awk '{print $1}')  
# 从节点列表中提取正常节点ip:port  
NODE_IDS=$(echo $NODE |grep -v fail| awk '{print $2}')  

# 判断是否有失败节点  
if [ -z "$FAILED_NODE_IDS" ]; then  
    echo "没有发现失败节点。"  
    exit 0  
fi  

# 循环移除每个失败节点  
for NODE_ID in $FAILED_NODE_IDS; do  
    echo "正在移除失败节点: $NODE_ID"  
    # 遍历集群中的所有活跃节点来移除失败节点  
    for NODE in $NODE_IDS; do  
        #NODE_INFO1=$(echo $NODE | awk '{print $1, $3}')  # 提取节点ID和状态 
        NODE_IP="$(echo $NODE | cut -d@ -f1 | cut -d: -f1)"   
        NODE_PORT="$(echo $NODE | cut -d@ -f1 | cut -d: -f2)"  

        # 移除失败节点  
        redis-cli -h $NODE_IP -p $NODE_PORT CLUSTER FORGET $NODE_ID  
        echo "已从节点 $NODE_IP:$NODE_PORT 移除 $NODE_ID"  
    done  
done  

echo "所有失败节点已移除。" 

原因分析:

node-id 一直在变化,这可能是因为节点在集群中的状态频繁变化(例如,节点会因为宕机、网络问题等原因而变为“失败”状态),或者由于某种原因节点被重新配置或重启,或者该node-id是从其他节点获取到的本节点已经forget掉的node-id,可以换一台节点查看。


解决方案:

  • 只需在集群中的任意一个活跃节点上执行 CLUSTER FORGET <node-id>,该节点需要是当前状态被标识为"FAIL"的节点的 ID。
  • 在所有正常节点上将fail的节点forget掉

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis ClusterRedis 的分布式解决方案,可以将数据分散存储在不同的节点上,以提高性能和可扩展性。在 Redis Cluster 中,每个节点负责一部分槽位(slot)的存储和处理。 要新增一个节点,并进行槽位的分配,我们需要执行以下步骤: 1. 启动一个新的 Redis 节点,配置文件中要指定集群模式,并确保其他节点也都开启了集群模式。 2. 在一个已经运行的节点上执行 CLUSTER MEET 命令,将新节点加入到集群中。命令格式为 CLUSTER MEET <ip> <port>,其中 <ip> 和 <port> 分别是新节点的 IP 地址和端口号。 3. 新节点加入集群后,其他节点会自动感知到这个变化,它们会进行重新的槽位分配。每个节点会负责同时管理一些旧槽位和新槽位。 4. 为了保持集群的平衡,可以使用 CLUSTER REBALANCE 命令来手动执行槽位的重新分配。这个命令会将不均匀分布的槽位重新分配给节点,使得集群中每个节点管理的槽位数尽量接近。 要删除一个节点,并重新分配其槽位,我们需要执行以下步骤: 1. 首先,将要删除的节点设置为故障状态。可以使用 CLUSTER FORGET 命令从其他节点中移除它。命令格式为 CLUSTER FORGET <node_id>,其中 <node_id> 是要删除的节点的 ID。 2. 接下来,进行槽位的重新分配。Redis Cluster 会自动进行槽位的再平衡。每个存活的节点都会参与槽位的重新分配,以保持集群的平衡。 需要注意的是,新增和删除节点时,Redis Cluster 会自动进行槽位的重新分配,不需要手动操作。在节点加入或离开集群后,其他存活节点会按照一定的规则重新分配槽位,以确保数据的平衡和高可用性。如果发生数据迁移,Redis Cluster 会自动处理数据的同步和恢复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值