Redis Cluster 部署

Redis Cluster 手动部署

一、我们要做什么?

在一台机器上(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 个配置文件

bash

复制代码
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. 加上集群配置(每个配置文件末尾追加)

text

复制代码
cluster-enabled yes
cluster-config-file nodes-端口.conf
cluster-node-timeout 15000

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


三、启动所有实例

bash

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

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


四、组成集群(手动搓)

1. 让所有节点互相认识

bash

复制代码
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)
节点 槽位范围 槽数量
6379 0 ~ 5461 5462
6381 5462 ~ 10922 5461
6383 10923 ~ 16383 5461

bash

复制代码
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:

bash

复制代码
redis-cli -h 192.168.166.9 -p 6379 cluster nodes

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

bash

复制代码
# 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>

五、验证集群

bash

复制代码
redis-cli -h 192.168.166.9 -p 6379 cluster nodes
redis-cli -h 192.168.166.9 -p 6379 cluster info

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


六、故障恢复(自动的)

模拟故障

bash

复制代码
kill -9 <某个master的进程ID>
自动发生的事
  1. 集群检测到该 Master 挂了

  2. 它的 Slave 自动升级成新 Master

  3. 集群继续正常工作

恢复后
  • 原来的 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 从集群。

相关推荐
于航7 分钟前
从 Multi-Agent 到 Skill+CLI:个人助理 1.0 → 2.0 架构演进
前端
2301_786756608 分钟前
2026 JCR 秋季数据重载解读:影响因子为什么会变?附期刊影响力数据批量追踪方案
java·服务器·前端
数据掘金14 分钟前
小程序埋点方案的埋点灰度发布怎么做?
前端
AiMan18 分钟前
读取Meta Muse列表并导出这个功能,是没办法做到的是吗?
前端
老于111118 分钟前
AI 生成内容标识落地:显式角标 + EXIF 隐式标识 + 内容编号台账
前端
RaaS10018 分钟前
AI网关选型指南:MAI Gateway(魔芋企业级AI网关)vs 开源方案全面对比
前端·后端
小画家~27 分钟前
vue3 里面的 itemList.reduce
前端·数据结构·算法
lbb 小魔仙35 分钟前
Redis运行状态总靠手动查?我用redis_exporter+Prometheus把指标、告警和远程抓取全接起来了
redis·bootstrap·prometheus
锋行天下42 分钟前
langgraph 循环节点的静态和动态实现
前端·后端
keyipatience1 小时前
JS学习笔记(2)数组,函数,作用域,对象
前端·javascript·笔记·学习·html