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集群支持动态调整节点角色,无需重启服务。

相关推荐
岁岁岁平安1 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
来自宇宙的曹先生7 小时前
用 Spring Boot + Redis 实现哔哩哔哩弹幕系统(上篇博客改进版)
spring boot·redis·后端
灵犀学长8 小时前
解锁Spring Boot多项目共享Redis:优雅Key命名结构指南
数据库·redis
都叫我大帅哥8 小时前
Redis哨兵完全指南:从救火队员到集群守护神
redis
都叫我大帅哥8 小时前
Redis主从架构:从菜鸟到大神的通关秘籍
redis
草履虫建模15 小时前
Redis:高性能内存数据库与缓存利器
java·数据库·spring boot·redis·分布式·mysql·缓存
A-刘晨阳15 小时前
【Linux】Redis 6.2.6 的二进制部署【适用于多版本】
linux·运维·redis
程序猿ZhangSir17 小时前
Redis 缓存进阶篇,缓存真实数据和缓存文件指针最佳实现?如何选择?
数据库·redis·缓存
段帅龙呀1 天前
Redis构建缓存服务器
服务器·redis·缓存
用户8324951417321 天前
Spring Boot 实现 Redis 多数据库切换(多数据源配置)
redis