上一篇 分享链接 返回 返回顶部

Redis集群新增节点与重新分片运维全攻略

发布人: 发布时间:1小时前 阅读量:0

一、集群扩容前的准备

在操作前,务必确认当前集群健康状况。使用 redis-cli --cluster check 命令检查集群state为ok,所有master和slave节点状态正常。

  • 确认现有master节点数量与slot分布
  • 确认各节点内存、CPU和带宽余量
  • 备份关键数据或在维护窗口执行操作
  • 记录当前集群节点ID与端口对应关系

二、启动新Redis节点

2.1 配置和启动

为新节点准备独立的配置文件和目录(如/redis/nodes/7007),注意端口不要冲突。修改配置:

  1. port 7007
  2. cluster-enabled yes
  3. cluster-config-file nodes-7007.conf
  4. appendonly yes
  5. daemonize yes

启动命令:redis-server /redis/nodes/7007/redis.conf。启动后用 ps -ef | grep redis 确认进程存在。

2.2 验证节点状态

通过 redis-cli -p 7007 cluster info 查看,此时cluster_state应为fail,因为该节点未加入任何集群,这是正常现象。

三、将新节点加入集群

使用 redis-cli --cluster add-node 命令,将新节点作为master加入任意现有集群节点:

redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001

第一个参数为新节点地址,第二个参数为集群中现有节点地址。加入后,用 redis-cli -p 7001 cluster nodes 查看,7007应出现在列表且role为master。

注意:如果新节点内存配置不当或无法连接,命令会失败,需检查网络和安全组。

四、重新分片迁移slot

新节点加入后,默认没有任何slot,需要从现有master迁移部分slot以确保数据均衡。

4.1 交互式reshard

执行 redis-cli --cluster reshard 127.0.0.1:7001(连接任意节点),按照交互提示操作:

  1. 输入需要迁移的slot数量(例如4096,如果总16384个slot,4个节点均衡分配)
  2. 输入接收slot的节点ID(即新节点7007的ID)
  3. 选择来源节点,可输入all从所有master均匀取出,或指定某个节点ID
  4. 确认迁移方案后输入yes开始执行

4.2 自动化方式(避免交互)

使用 --cluster-from--cluster-to 参数指定迁移范围和目标:

redis-cli --cluster reshard 127.0.0.1:7001 --cluster-from all --cluster-to <新节点ID> --cluster-slots 4096 --cluster-yes

迁移过程中,slot对应的key会逐步从源节点移动到目标节点,期间服务无需停机。

4.3 检查迁移状态

迁移完成后,再次执行 redis-cli --cluster check 127.0.0.1:7001,确认每个master节点slot数均匀,例如4个节点每个4096个slot。

五、验证与收尾

5.1 功能验证

  • 写入测试key:redis-cli -c -p 7001 set test key123
  • 读取验证:redis-cli -c -p 7001 get test
  • 通过cluster keyslot测试key落在新分区slot

5.2 配置持久化

确认新节点的nodes-7007.conf文件已正确记录集群拓扑。如有需要,可将新节点设为主节点,并将部分副本迁移,但一般不建议在扩容后立即进行。

六、常见问题与注意事项

  • 节点物理资源需与集群其他节点一致,避免容量不均
  • reshard期间需确保网络稳定,避免迁移中断导致slot状态不一致
  • 如果集群已满(所有slot都分配),必须先删除不需要的节点或缩小某些master的slot
  • 生产环境建议使用多副本,并且新节点加入后手动分配副本
  • 操作涉及数据迁移,建议在业务低峰期进行

通过以上步骤,Redis集群可以平滑完成新增节点与重新分片,整个过程不中断服务,但需要谨慎执行每一步,尤其要注意命令中的节点ID和端口,避免误操作。

目录结构
全文
企业微信 企业微信
微信公众号 微信公众号
服务热线: 400-790-1688
电子邮箱: 3310008520@qq.com