Redis集群部署,三主三从生产最小集群配置
三主三从是 Redis Cluster 生产环境中最常见的最小规模,它由 3 个主节点和 3 个从节点组成,数据按哈希槽分散在 3 个主节点上,每个主节点挂一个从节点负责实时同步。
和单机 Redis 相比,这种结构能同时改善容量压力和高可用性:只要每个分片至少有一个主节点存活,整个集群就能继续服务。
下面这套部署方案适合 6 台服务器或 6 个实例,按步骤操作即可得到一套可投入生产的最小集群。
部署前需要准备的服务器与 Redis 环境
搭建之前先确认资源是否满足最小要求:至少 6 个 Redis 实例,每个实例可以使用独立端口(例如 6379 到 6384),也可以每台服务器各跑一个实例。
所有节点之间要网络互通,并且放行两个端口:客户端通信用的 6379,以及集群内部通信用的 16379 总线端口。
同一个分片的主节点和从节点建议部署在不同物理机或不同可用区,避免一台机器宕机导致整个分片失效。
Redis 版本方面,建议使用 Redis 5.0 及以上版本,因为创建集群可以直接用 redis-cli --cluster create 命令,不用再依赖 Ruby 脚本。
如果你还在用老版本,操作路径会麻烦不少。
修改配置文件并启动六个 Redis 实例
每个实例的 redis.conf 都需要包含以下核心配置:
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
appendonly yes
requirepass yourpassword
masterauth yourpassword
cluster-enabled yes 决定这个实例以集群模式启动;cluster-config-file 是集群状态文件;cluster-node-timeout 控制节点超时时间。
生产环境务必同时设置 requirepass 和 masterauth,两者密码要一致,否则从节点同步时会因为认证失败而反复断连。
配置完成后,用对应配置文件启动每个实例,例如:
redis-server /etc/redis/6379.conf
redis-server /etc/redis/6380.conf
启动后可以用 redis-cli -a yourpassword -h 127.0.0.1 -p 6379 ping 确认实例已正常响应。
使用 create 命令让三主三从自动配对
六个实例全部启动后,直接执行创建集群命令:
redis-cli -a yourpassword --cluster create \
192.168.1.10:6379 192.168.1.11:6380 \
192.168.1.12:6381 192.168.1.13:6382 \
192.168.1.14:6383 192.168.1.15:6384 \
--cluster-replicas 1
--cluster-replicas 1 表示每个主节点带一个从节点,所以六个节点会自动形成三主三从的结构。
命令执行后会给出哈希槽分配方案,并询问你是否接受,输入 yes 等待完成。
如果这一步报错,先检查节点里是否残留旧数据,可以用 redis-cli --cluster reset 重置节点后重新执行。
验证集群状态、故障切换与避坑建议
创建完成后,登录到任意节点验证集群是否健康:
redis-cli -c -a yourpassword cluster info
redis-cli -c -a yourpassword cluster nodes
cluster_info 里看到 cluster_state:ok 表示集群正常,cluster_nodes 输出里可以看到每个节点的角色和主从关系。
更严格的验证方式是模拟故障:手动 kill 掉一个主节点进程,等待几秒后查看对应从节点是否自动变为 master,同时集群仍处于 ok 状态。
生产环境里有几个高频问题需要特别注意:第一,只放行了客户端端口而漏掉 16379 总线端口,会导致节点互相发现不了,集群一直处于 fail 状态。
第二,创建集群报 Slot 0 is already busy,说明实例中还有旧数据,需要备份后清空再执行 cluster reset。
第三,三主三从只保证单节点故障,如果同分片的主从同时宕机,这一片数据将不可用,因此主从分布跨机器是硬性要求。
如果你在实际搭建中遇到其他报错,优先查看 Redis 日志文件(通常位于 /var/log/redis/)以及 cluster info 输出,这些信息能直接告诉你卡在哪一步。
按照这套流程配置出来的三主三从集群,已经具备生产环境可用的最小高可用能力,后续再根据业务压力扩容即可。