Redis Cluster部署实践

 更新时间:2026年04月15日 10:08:35   作者:东北甜妹  
本文详细介绍了在一台机器上上上搭建一个3主3从的Redis集群的步骤,包括准备阶段、启动实例、组成集群、故障恢复等内容;并提供了一些常用命令和注意事项,帮助;以帮助读者成功搭建Redis集群

一、我们要做什么?

在一台机器上(192.168.166.9)跑 6 个 Redis 实例

  • 3 个 Master(主节点):6379、6381、6383
  • 3 个 Slave(从节点):6380、6382、6384

最终形成一个 3 主 3 从 的 Redis 集群。

二、准备工作(傻瓜式操作)

1. 先搞一个模板配置文件

  • 把原来的 /etc/redis.conf 复制到 /etc/redis/6379.conf
  • 这个文件里配置了端口、日志、数据目录等基本参数

2. 一键生成 6 个配置文件

for i in {6380..6384}; do cp 6379.conf $i.conf; done

3. 批量改配置(用循环搞定)

配置项改成什么
端口6379 → 6380、6381…
数据目录/var/lib/redis/6379 → 各自端口
日志文件/var/log/redis/6379.log → 各自端口
PID 文件/var/run/redis/6379.pid → 各自端口
保护模式yes → no
后台运行no → yes
监听地址127.0.0.1 → 192.168.166.9

4. 加上集群配置(每个配置文件末尾追加)

cluster-enabled yes
cluster-config-file nodes-端口.conf
cluster-node-timeout 15000

这三行意思是:开启集群模式、保存集群状态的文件、节点超时时间 15 秒。

三、启动所有实例

for i in {6379..6384}; do redis-server /etc/redis/$i.conf; done

一条命令把 6 个 Redis 都跑起来。

四、组成集群(手动搓)

1. 让所有节点互相认识

for i in {6380..6384}; do redis-cli -h 192.168.166.9 -p 6379 cluster meet 192.168.166.9 $i; done

相当于:6379 这个老大哥,去跟其他 5 个兄弟打个招呼,大家以后是一家人。

2. 分配槽位(16384 个槽,平均分给 3 个 Master)

节点槽位范围槽数量
63790 ~ 54615462
63815462 ~ 109225461
638310923 ~ 163835461
redis-cli -h 192.168.166.9 -p 6379 cluster addslots {0..5461}
redis-cli -h 192.168.166.9 -p 6381 cluster addslots {5462..10922}
redis-cli -h 192.168.166.9 -p 6383 cluster addslots {10923..16383}

槽 = 货架编号,每个 Master 管自己的一排货架。

3. 建立主从关系(谁是谁的备胎)

先查 Master 的 ID:

redis-cli -h 192.168.166.9 -p 6379 cluster nodes

然后把 Slave 挂到对应的 Master 上:

# 6380 给 6379 当备胎
redis-cli -h 192.168.166.9 -p 6380 cluster replicate <6379的ID>
# 6382 给 6381 当备胎
redis-cli -h 192.168.166.9 -p 6382 cluster replicate <6381的ID>
# 6384 给 6383 当备胎
redis-cli -h 192.168.166.9 -p 6384 cluster replicate <6383的ID>

五、验证集群

redis-cli -h 192.168.166.9 -p 6379 cluster nodes
redis-cli -h 192.168.166.9 -p 6379 cluster info

能看到每个节点的角色(master/slave)和负责的槽位范围,就说明成功了。

六、故障恢复(自动的)

模拟故障

kill -9 <某个master的进程ID>

自动发生的事

  • 集群检测到该 Master 挂了
  • 它的 Slave 自动升级成新 Master
  • 集群继续正常工作

恢复后

  • 原来的 Master 重启后,会自动变成新 Master 的 Slave(备胎)
  • 不需要手动干预

七、常用命令速查表(大白话版)

命令大白话解释
cluster meet IP 端口把某个节点拉进群
cluster nodes看看群里都有谁,谁是什么角色
cluster addslots 槽位把一批槽分给当前节点
cluster replicate 节点ID让当前节点给指定节点当备胎
cluster info看看集群整体状态好不好
cluster failover手动让备胎上位(强制切换)
cluster keyslot key看这个 key 属于哪个槽
cluster forget 节点ID把某个节点踢出群

八、核心注意点(避坑指南)

解决办法
启动 Redis 不用绝对路径必须用绝对路径,否则 nodes.conf 会乱
保护模式没关必须设置 protected-mode no
监听 127.0.0.1改成真实 IP,否则其他节点连不上
槽位没分完16384 个槽必须全部分配,集群才能用
主节点没有从节点每个 Master 最好配一个 Slave,否则挂了就丢数据

九、总结一句话

手动搭 Redis Cluster = 配 6 个配置文件 → 启动 → 互相认识 → 分槽位 → 定主从,最后得到一个能自动故障转移的 3 主 3 从集群。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Redis中的数据一致性问题以及解决方案

    Redis中的数据一致性问题以及解决方案

    这篇文章主要介绍了Redis中的数据一致性问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Redis两种持久化方案RDB和AOF详解

    Redis两种持久化方案RDB和AOF详解

    这篇文章主要介绍了Redis 两种持久化方案,RDB(Redis DataBase)和 AOF(Append Only File),给大家提供参考,一起学习下。
    2017-11-11
  • Redis实现多级缓存

    Redis实现多级缓存

    这篇文章主要为大家详细介绍了Redis实现多级缓存,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • redis分布式锁及会出现的问题解决

    redis分布式锁及会出现的问题解决

    这篇文章主要给大家介绍了关于redis分布式锁及会出现问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Redis实战之商城购物车功能的实现代码

    Redis实战之商城购物车功能的实现代码

    这篇文章主要介绍了Redis实战之商城购物车功能的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Redis与数据库数据一致性的原因及解决方案

    Redis与数据库数据一致性的原因及解决方案

    Redis作为一种高效的键值对存储系统,常用于缓存数据库减少IO操作,下面这篇文章主要介绍了Redis与数据库数据一致性的原因及解决方案,文中介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Redis哨兵模式与主从架构对比分析

    Redis哨兵模式与主从架构对比分析

    Redis哨兵模式在主从架构基础上增强高可用性,通过自动故障切换和监控实现无人值守恢复,但部署复杂且无法突破单机内存限制,适用于读多写少、高可用需求的场景
    2025-08-08
  • Redis实现短信验证码登录的示例代码

    Redis实现短信验证码登录的示例代码

    本文主要介绍了基于Redis如何实现短信验证码登录功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Redis整合Lua脚本的实现操作

    Redis整合Lua脚本的实现操作

    Redis对lua脚本的支持是从Redis2.6.0版本开始引入的,它可以让用户在Redis服务器内置的Lua解释器中执行指定的lua脚本,本文就来介绍一下Redis整合Lua脚本的实现,感兴趣的可以了解一下
    2024-03-03
  • redis缓存延时双删的原因分析

    redis缓存延时双删的原因分析

    延时双删就是在增删改某实体类的时候,要对该实体类的缓存进行清空,清空的位置在数据库操作方法的前后,这篇文章主要介绍了redis缓存为什么要延时双删,需要的朋友可以参考下
    2022-08-08

最新评论