redis 集群节点切换角色

redis 集群节点切换角色

根据你提供的Redis集群节点信息和目标需求,以下是将10.1.*​节点提升为主节点的操作步骤和注意事项:


一、当前主节点与从节点关系分析

链接节点查看现有集群状态

xml 复制代码
10.1.230.40:6379> CLUSTER NODES
0b51383741a0ff67fc8b15a0f2166bb5a12bf822 10.8.230.42:6379@16379 slave e8d28f4e215718d59df98247ae1e6ebe2794ed02 0 1744008314000 13 connected
954b17e97b83fbca22f6cab3c73da67a6be34fa6 10.8.230.41:6379@16379 slave 2b4ab6c9ec9a73a7ca6cbf637c9fa25cd80fbd63 0 1744008314000 16 connected
2242e52dcaf94cef1db93d94e4d7d9ee57c4d566 10.8.230.44:6379@16379 master - 0 1744008313843 15 connected 5461-10922
a43c31620863882c9d54793391236c0b27bc2e2e 10.1.230.44:6379@16379 slave 2b4ab6c9ec9a73a7ca6cbf637c9fa25cd80fbd63 0 1744008314044 16 connected
fd0fc5c568ef00adaf700e47a5658c01cdb6a0c1 10.1.230.43:6379@16379 slave e8d28f4e215718d59df98247ae1e6ebe2794ed02 0 1744008314145 13 connected
82d2c20c58a2fbce12a7eb2dc7ea112ccd39aff9 10.1.230.42:6379@16379 slave e8d28f4e215718d59df98247ae1e6ebe2794ed02 0 1744008314044 13 connected
bc4b6e3063b2c1c3b0e8c8efc8c32928ad9f8b13 10.1.230.41:6379@16379 slave 2242e52dcaf94cef1db93d94e4d7d9ee57c4d566 0 1744008314000 15 connected
e8d28f4e215718d59df98247ae1e6ebe2794ed02 10.8.230.45:6379@16379 master - 0 1744008314146 13 connected 10923-16383
e59dd0efc212a27f42a2188bd360e9031ae83a1d 10.8.230.43:6379@16379 slave 2242e52dcaf94cef1db93d94e4d7d9ee57c4d566 0 1744008314000 15 connected
d9768a72ad28bb198732f0371c4a3e2971dacdc7 10.1.230.45:6379@16379 slave 2b4ab6c9ec9a73a7ca6cbf637c9fa25cd80fbd63 0 1744008314246 16 connected
2b4ab6c9ec9a73a7ca6cbf637c9fa25cd80fbd63 10.8.230.40:6379@16379 master - 0 1744008314146 16 connected 0-5460
4ff65e21dadd2b1d9a641d4619f5a2b621d7a8a1 10.1.230.40:6379@16379 myself,slave 2b4ab6c9ec9a73a7ca6cbf637c9fa25cd80fbd63 0 1744008313000 16 connected

CLUSTER NODES​输出可见:

  • 唯一标识(ID)
  • 网络地址(IP:Port)
  • 角色(主节点、从节点)
  • 状态(连接状态、故障标志)
  • 槽位分配(哈希槽范围
  1. 当前主节点(共3个):

    • 10.8.230.40:6379(ID: 2b4ab6c9),负责槽位0-5460
    • 10.8.230.44:6379(ID: 2242e52d),负责槽位5461-10922
    • 10.8.230.45:6379(ID: e8d28f4e),负责槽位10923-16383
  2. 目标从节点(需提升为新的主节点):

    • 10.1.230.40:6379(ID: 4ff65e21) → 当前从属于10.8.230.40
    • 10.1.230.45:6379(ID: d9768a72) → 当前从属于10.8.230.40
    • 10.1.230.41:6379(ID: bc4b6e30) → 当前从属于10.8.230.44
    • 10.1.230.42:6379(ID: 82d2c20c) → 当前从属于10.8.230.45
    • 10.1.230.44:6379(ID: a43c3162) → 当前从属于10.8.230.40
  3. 分析得出我们需要将

    • 10.1.230.41:6379 提升为主节点
    • 10.1.230.42:6379 提升为主节点
    • 10.1.230.44:6379 提升为主节点

二、操作步骤

1. 触发故障转移(Failover)

在Redis集群模式下,需使用CLUSTER FAILOVER​命令强制从节点接管主节点角色。需按主节点逐个操作

  • 示例:替换主节点10.8.230.40(槽位0-5460)

    bash 复制代码
    # 连接到目标从节点(如10.1.230.40)
    redis-cli -h 10.1.230.41 -p 6379
    
    # 执行强制故障转移
    CLUSTER FAILOVER FORCE
    • 作用:强制该从节点接管其主节点的槽位。
    • 验证 :再次执行CLUSTER NODES,确认该节点角色变为master,且槽位0-5460已转移。
  • 重复上述步骤

    • 替换10.8.230.44(槽位5461-10922):选择10.1.230.41执行故障转移。
    • 替换10.8.230.45(槽位10923-16383):选择10.1.230.4210.1.230.44执行故障转移。
2. 调整原主节点角色(按需调整非必做 重新调整整体结构)

若原主节点仍在线,需将其降级为从节点并指向新主:

bash 复制代码
# 连接到原主节点(如10.8.230.40)
redis-cli -h 10.8.230.40 -p 6379

# 重置节点角色
CLUSTER RESET HARD

# 重新加入集群作为从节点
CLUSTER MEET 10.1.230.40 6379
CLUSTER REPLICATE <新主节点ID>
3. 验证集群状态
  • 检查所有主节点是否均为10.1.*​节点:

    bash 复制代码
    CLUSTER NODES | grep master
  • 确认槽位分配完整且无重复:

    bash 复制代码
    CLUSTER SLOTS

三、注意事项

  1. 数据一致性

    • 确保故障转移前从节点数据已完全同步(通过INFO replication检查master_sync_in_progress是否为0)。
    • 若原主节点有未同步的写操作,强制故障转移可能导致数据丢失。
  2. 客户端配置更新

    • 更新客户端连接配置,指向新的主节点IP。
  3. 高可用性建议

    • 若需自动化切换,建议部署Redis Sentinel监控集群。
    • 每个主节点至少保留一个从节点以维持高可用性。

四、补充说明

  • 强制故障转移适用场景 :当原主节点不可用或需主动切换时使用CLUSTER FAILOVER FORCE
  • 动态配置:Redis集群支持动态调整节点角色,无需重启服务。

相关推荐
pwzs2 小时前
缓存不只是加速器:深入理解 Redis 的底层机制
数据库·redis·缓存
A尘埃2 小时前
电商中的购物车(redis的hash类型操作)
数据库·redis·哈希算法
chian-ocean5 小时前
解密 Linux 线程:多线程编程与资源管理
java·linux·redis
Justice link12 小时前
部署redis cluster
数据库·redis·缓存
何似在人间57512 小时前
多级缓存模型设计
java·jvm·redis·缓存
smileNicky14 小时前
SpringBoot系列之集成Redisson实现布隆过滤器
java·spring boot·redis·布隆过滤器
張萠飛15 小时前
Redis哨兵模式下执行sentinel failover mymaster命令可能导致什么风险,如何避免
redis·bootstrap·sentinel
04Koi.16 小时前
Redis进阶--哨兵
数据库·redis·缓存
见未见过的风景18 小时前
使用 Redis + Redisson 分布式锁来生成全局唯一、线程安全的带日期前缀的流水号的完整实现。
数据库·redis·分布式
UniLCodes19 小时前
Redis 学习目标
redis·学习