Redis 在单机模式下虽然性能强劲,但无法满足高并发、高可用与数据分片存储的需求。
因此在生产环境中,Redis 集群(Redis Cluster) 是主流部署方式。
本文将系统介绍如何从零搭建 Redis 集群,并讲清楚每一步背后的原理。
🧭 目录
一、Redis 集群模式概述
🔹 传统主从(Master-Slave)
- 一主多从
- 从节点仅用于读操作
- 不支持自动故障转移(需 Sentinel)
🔹 Redis Cluster 模式(推荐)
- 分布式数据分片(slot 机制)
- 自动故障转移
- 无中心节点(去中心化)
- 支持 16384 个哈希槽(hash slot)
📊 优势
| 特性 | 单机 | 主从 | Cluster |
|---|---|---|---|
| 高可用 | ❌ | ✅ | ✅ |
| 自动故障转移 | ❌ | ✅(Sentinel) | ✅ |
| 数据分片 | ❌ | ❌ | ✅ |
| 水平扩展 | ❌ | ❌ | ✅ |
二、集群架构设计
🚀 推荐架构:6 节点集群(3主3从)
| 节点 | 角色 | 端口 | IP |
|---|---|---|---|
| redis-7001 | Master1 | 7001 | 192.168.10.101 |
| redis-7002 | Master2 | 7002 | 192.168.10.102 |
| redis-7003 | Master3 | 7003 | 192.168.10.103 |
| redis-7004 | Slave1 | 7004 | 192.168.10.101 |
| redis-7005 | Slave2 | 7005 | 192.168.10.102 |
| redis-7006 | Slave3 | 7006 | 192.168.10.103 |
特点:
- 每个主节点对应一个从节点
- 主节点分摊 16384 个哈希槽
- 任意节点挂掉都可自动切换
三、环境准备
🔧 系统环境
CentOS 7
Redis 6.x / 7.x
GCC / make 已安装
📁 目录结构
/usr/local/redis-cluster/
├── 7001/redis.conf
├── 7002/redis.conf
├── 7003/redis.conf
├── 7004/redis.conf
├── 7005/redis.conf
└── 7006/redis.conf
四、配置文件详解
示例:7001/redis.conf
# 基础配置
port 7001
bind 0.0.0.0
daemonize yes
protected-mode no
pidfile /var/run/redis_7001.pid
logfile "/usr/local/redis-cluster/7001/redis.log"
dir /usr/local/redis-cluster/7001
# 集群配置
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
# 持久化配置
appendonly yes
appendfilename "appendonly.aof"
其他节点只需修改 port 与 dir。
五、启动集群节点
依次启动 6 个 Redis 实例:
redis-server /usr/local/redis-cluster/7001/redis.conf
redis-server /usr/local/redis-cluster/7002/redis.conf
redis-server /usr/local/redis-cluster/7003/redis.conf
redis-server /usr/local/redis-cluster/7004/redis.conf
redis-server /usr/local/redis-cluster/7005/redis.conf
redis-server /usr/local/redis-cluster/7006/redis.conf
查看进程:
ps -ef | grep redis
六、创建集群
Redis 5.0+ 以后可直接使用官方命令行工具:
redis-cli --cluster create \
192.168.10.101:7001 \
192.168.10.102:7002 \
192.168.10.103:7003 \
192.168.10.101:7004 \
192.168.10.102:7005 \
192.168.10.103:7006 \
--cluster-replicas 1
解释:
--cluster-replicas 1表示每个主节点分配一个从节点
输出确认:
>>> Performing hash slots allocation on 6 nodes...
>>> Adding replica 192.168.10.101:7004 to 192.168.10.101:7001
...
[OK] All 16384 slots covered.
七、集群验证与常用命令
进入任意节点验证:
redis-cli -c -p 7001
查看集群信息:
cluster info
cluster nodes
测试写入:
set name simon
get name
Redis 会自动重定向到对应的 slot:
-> Redirected to slot [5478] located at 192.168.10.102:7002
八、主从切换与扩容缩容
🔁 手动切换主从
redis-cli -p 7004 cluster failover
该命令会使 7004 从节点提升为主节点。
➕ 扩容节点
-
启动新节点(7007)
-
加入集群:
redis-cli --cluster add-node 192.168.10.101:7007 192.168.10.101:7001 -
重新分配 slot:
redis-cli --cluster reshard 192.168.10.101:7001
➖ 缩容节点
redis-cli --cluster del-node 192.168.10.101:7007 node-id
九、故障转移与高可用机制
Redis Cluster 内置 自动故障检测与选举机制:
- 主节点宕机后,其从节点会发起投票;
- 过半节点同意后,从节点升级为新的主节点;
- 故障节点恢复后,会自动变为从节点重新加入集群。
可通过以下命令观察状态:
cluster info
cluster nodes
十、运维建议与性能优化
✅ 内存优化
-
开启持久化压缩:
rdbcompression yes -
限制最大内存:
maxmemory 2gb maxmemory-policy allkeys-lru
✅ 监控与告警
- 使用
INFO命令或redis_exporter监控指标 - 接入 Prometheus + Grafana 可视化监控
✅ 安全加固
-
设置密码:
requirepass yourPassword masterauth yourPassword -
限制绑定 IP:
bind 127.0.0.1 -
禁用危险命令:
rename-command FLUSHALL "" rename-command FLUSHDB ""
✅ 集群管理命令汇总
cluster nodes # 查看节点信息
cluster slots # 查看槽分配情况
cluster keyslot key # 查看 key 属于哪个槽
cluster replicate node-id # 设置主从关系
1252

被折叠的 条评论
为什么被折叠?



