Redis集群完整部署实战
本文基于 Redis 5.0.14 原生集群模式,提供可直接复现的 3 主 3 从部署步骤、扩容缩容、槽位均衡与高频排错方案,适合学习、实验与生产参考。
一、Redis 集群基础认知
Redis Cluster 是 Redis 官方原生分布式方案,核心特点:
- 无中心架构,最少 3 个 Master 才能组成高可用集群
- 数据按 Hash Slot 分片:共 16384 个槽,均匀分布在所有 Master
- 自动故障转移:Master 宕机时,Slave 自动提升为 Master
- 客户端自动路由,支持
-c参数集群模式连接 - 水平扩容:在线添加 / 删除节点,重新分片不中断业务
关键概念
cluster-enabled yes:开启集群模式cluster-config-file:节点自动维护的集群配置文件,禁止手动修改cluster-node-timeout:节点超时判定阈值cluster-require-full-coverage no:关闭槽位全覆盖检查,避免部分节点宕机导致整个集群不可用
二、实验环境规划
本次采用 3 主 3 从 高可用架构,IP 规划如下:
- Master1:192.168.8.101:6379
- Master2:192.168.8.102:6379
- Master3:192.168.8.103:6379
- Slave1:192.168.8.104:6379(挂 Master1)
- Slave2:192.168.8.105:6379(挂 Master2)
- Slave3:192.168.8.106:6379(挂 Master3)
前置准备所有节点关闭防火墙与 SELinux:
bash
运行
systemctl stop firewalld
setenforce 0
三、全节点安装 Redis 5.0.14
所有 6 个节点必须执行相同安装步骤:
bash
运行
# 安装依赖
yum -y install gcc* zlib-devel
# 解压源码
tar xvzf redis-5.0.14.tar.gz
cd redis-5.0.14/
# 编译安装
make
make PREFIX=/usr/local/redis install
# 软链接到系统PATH
ln -s /usr/local/redis/bin/* /usr/local/bin/
# 执行初始化脚本
cd utils/
./install_server.sh
安装完成后,Redis 默认配置文件路径:/etc/redis/6379.conf
四、全节点修改集群配置文件
所有节点配置仅 IP 不同,其余完全一致:
bash
运行
vim /etc/redis/6379.conf
核心配置项
ini
# 监听所有地址
bind 0.0.0.0
protected-mode yes
port 6379
# 后台运行
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
# 开启AOF持久化
appendonly yes
# 开启集群
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
cluster-require-full-coverage no
配置说明
cluster-require-full-coverage no:必须改,默认 yes 会导致任意节点宕机→集群停服务cluster-config-file:Redis 自动生成,存储节点、槽位、主从关系,禁止编辑cluster-node-timeout 15000:15 秒无响应则判定节点宕机
配置完成后重启服务:
bash
运行
/etc/init.d/redis_6379 restart
# 验证端口监听(6379业务端口+16379集群总线端口)
netstat -anpt | grep 6379
五、一键创建 Redis 集群
Redis 5.0 弃用 redis-trib.rb,直接用 redis-cli --cluster 命令:
bash
运行
redis-cli --cluster create --cluster-replicas 1 \
192.168.8.101:6379 \
192.168.8.102:6379 \
192.168.8.103:6379 \
192.168.8.104:6379 \
192.168.8.105:6379 \
192.168.8.106:6379
参数说明
--cluster-replicas 1:每个 Master 对应 1 个 Slave- 节点顺序:前 3 个自动为 Master,后 3 个为 Slave
- 执行后输入
yes确认槽位分配
六、集群功能测试
必须加 -c 参数 以集群模式连接,支持自动路由:
bash
运行
# 连接任意节点
redis-cli -h 192.168.8.106 -p 6379 -c
# 写入数据
set centos 7.3
get centos
# 切换另一节点读取
redis-cli -h 192.168.8.105 -p 6379 -c
get centos
七、集群信息查看
bash
运行
redis-cli -c cluster nodes
返回结果包含:节点 ID、IP: 端口、角色(Master/Slave)、槽位范围、主从关系。
八、集群扩容:添加新节点
方法 1:cluster meet 加入集群
bash
运行
redis-cli -c -p 6379 cluster meet 192.168.8.107 6379
新节点默认角色为 Master,无槽位、无数据。
方法 2:redis-cli --cluster add-node
bash
运行
redis-cli --cluster add-node 192.168.8.108:6379 192.168.8.107:6379
- 第一个地址:新节点
- 第二个地址:集群中任意已有节点
设置新节点为 Slave
bash
运行
# 连接新节点
redis-cli -h 192.168.8.108 -p 6379
# 执行主从绑定(ID为目标Master的节点ID)
cluster replicate 5472bbc9226737ca2199e146080ddaa41686a694
九、槽位自动均衡
新 Master 无槽位,需重新分片均衡:
bash
运行
redis-cli --cluster rebalance \
--cluster-threshold 1 \
--cluster-use-empty-masters \
192.168.8.101:6379
补充知识点
--cluster-threshold 1:槽位差异≤1 个时触发均衡--cluster-use-empty-masters:允许空 Master 接收槽位- 自动将 16384 个槽均匀分配给所有 Master,无需手动指定
十、集群缩容:删除节点
1. 删除 Slave 节点
直接删除,无需清理槽位:
bash
运行
redis-cli --cluster del-node 集群节点IP:端口 节点ID
2. 删除 Master 节点(必须先清槽 + 清数据)
bash
运行
# 连接待删节点,清空数据+重置集群
redis-cli -h 192.168.8.107 -p 6379
flushall
cluster reset
# 执行删除
redis-cli --cluster del-node 192.168.8.101:6379 fe75330d96c2c3af9c5a02b9819d66b2e8a48da2
十一、高频排错大全
错误 1:ERR Slot 0 is already busy
原因 :节点残留旧集群数据 / 槽位信息解决:所有节点执行:
bash
运行
redis-cli flushall
redis-cli cluster reset
错误 2:启动服务提示 127.0.0.1:6379 连接失败
原因 :bind 未监听本地,init 脚本无法连接解决:用绝对路径启动 / 关闭:
bash
运行
# 启动
redis-server /etc/redis/6379.conf
# 关闭
redis-cli -h 本机IP -p 6379 shutdown
错误 3:集群创建一直 Waiting for cluster to join
原因 :节点 bind 127.0.0.1,节点间无法通信解决 :配置bind 0.0.0.0,并在 Slave 执行:
bash
运行
cluster meet MasterIP 6379
十二、补充重要知识点
-
主从自动切换Master 宕机→Slave 自动升主;原 Master 恢复后,变为当前 Master 的 Slave。
-
Slave 只读设置 Slave 默认只读,客户端需执行
readonly才能读取 Slave 数据,连接断开后失效。 -
启动必须用绝对路径若用相对路径启动,会生成新的 nodes 文件,导致集群主从错乱、崩溃。
-
集群不支持的命令多键操作(如 mset、mget、事务)需保证所有 key 在同一槽位,否则执行失败。
-
集群选举机制半数以上 Master 投票通过,Slave 才能升主,因此集群节点数建议为奇数。
十三、总结
本文完整复现 Redis 5.0 集群 安装→配置→创建→测试→扩容→缩容→排错 全流程,基于原生redis-cli --cluster工具,无第三方依赖,适合实验与生产落地。
核心要点:
- 3 主 3 从是高可用最低标准
cluster-require-full-coverage no必改- 扩容先加节点→设主从→均衡槽位
- 删 Master 先清数据再删除
- 排错优先清理旧集群信息