Redis Cluster 搭建实战:三主三从集群部署与验

Redis Cluster 搭建的核心目标是把数据自动分片到多个节点,并在部分节点故障时仍能继续服务。
本文按三主三从的最小生产可用架构,给出从零开始的完整操作路径。

先确认环境和节点规划

Redis Cluster 至少需要 3 个主节点,推荐每个主节点配 1 个从节点,共 6 个实例。
下面以 3 台服务器、每台跑 2 个实例为例,IP 用占位符表示,请替换成你自己的内网地址。

  • 服务器 A:192.168.1.11,端口 7001、7002
  • 服务器 B:192.168.1.12,端口 7001、7002
  • 服务器 C:192.168.1.13,端口 7001、7002

系统建议使用主流 Linux 发行版,Redis 版本建议 5.0 以上,6.x 和 7.x 均支持集群模式。
安装方式可以选择系统包管理器或源码编译,这里以源码编译为例,假设 Redis 安装在 /usr/local/redis,可执行文件在 /usr/local/redis/bin。

搭建前请确认:

  • 各节点之间内网互通,安全组或防火墙放行 7001、7002 以及集群总线端口 17001、17002。集群总线端口默认是服务端口加 10000,必须放行,否则节点无法握手。
  • 系统已安装 gcc、make、tcl 等编译依赖,源码编译时需要。
  • 每台服务器的时间同步正常,建议开启 NTP。

创建目录和配置文件

下面命令在每台服务器上执行,先建目录:

mkdir -p /data/redis/{7001,7002}
mkdir -p /data/redis/logs

然后为每个实例写一份 redis.conf。
可以直接复制模板再改端口,以 7001 为例:

cp /usr/local/redis/redis.conf /data/redis/7001/redis.conf

修改以下关键配置项,没提到的保持默认即可:

port 7001
bind 0.0.0.0
protected-mode no
daemonize yes
pidfile /data/redis/7001/redis.pid
logfile /data/redis/logs/7001.log
dir /data/redis/7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
appendonly yes

几个容易写错的地方:

  • cluster-enabled yes 必须打开,否则实例只会以单机模式启动。
  • cluster-config-file 是集群自动维护的文件,不要手动编辑,每个实例文件名要区分开。
  • protected-mode no 在绑定内网地址且配合防火墙使用时可以关闭,但如果机器有公网 IP,请务必再用防火墙限制访问来源。

7002 端口按同样方式复制一份,把端口和路径里的 7001 全部替换成 7002 即可。
三台服务器都完成后,逐个启动实例:

/usr/local/redis/bin/redis-server /data/redis/7001/redis.conf
/usr/local/redis/bin/redis-server /data/redis/7002/redis.conf

用 ps -ef | grep redis 或 redis-cli -p 7001 ping 确认每个实例都返回 PONG。

用 redis-cli 创建集群

六个实例都启动后,只需要在其中一台服务器上执行一次创建命令:

/usr/local/redis/bin/redis-cli --cluster create \
192.168.1.11:7001 192.168.1.12:7001 192.168.1.13:7001 \
192.168.1.11:7002 192.168.1.12:7002 192.168.1.13:7002 \
--cluster-replicas 1

命令会先列出主从分配方案,并提示输入 yes 确认。--cluster-replicas 1 表示每个主节点配 1 个从节点。
确认后 Redis 会自动分配 16384 个哈希槽并完成主从配对。

如果提示 Waiting for the cluster to join 长时间卡住,优先检查集群总线端口是否放行、节点之间是否能互相连通。

验证集群状态和读写

创建完成后,用下面命令查看集群健康状态:

/usr/local/redis/bin/redis-cli -p 7001 cluster info
/usr/local/redis/bin/redis-cli -p 7001 cluster nodes

cluster info 中 cluster_state 应为 ok,cluster_slots_assigned 应为 16384。cluster nodes 会列出所有节点及其角色,
确认是 3 个 master、
3 个 slave,
且每个 master 有对应的 slave。

接着测试读写。
集群模式连接需要加 -c 参数,否则会报 MOVED 错误:

/usr/local/redis/bin/redis-cli -c -p 7001
set foo bar
 get foo

能正常写入并读回即说明集群工作正常。

常见报错和避坑点

节点启动后 cluster_state 一直是 fail:通常是槽位未分配满 16384,或者有节点没加入。
用 cluster nodes 检查是否有节点处于 fail 或未分配槽位,必要时重新执行 redis-cli --cluster create 或用 --cluster add-node 补节点。

客户端报 MOVED 或 ASK:说明客户端没有开启集群模式。
多数客户端库需要显式配置集群节点列表,Java 的 Jedis 用 JedisCluster,Python 的 redis-py 用 RedisCluster,不要把集群当单机连。

从节点不切换:检查 cluster-node-timeout 是否设置合理,以及从节点与主节点之间的网络是否稳定。
切换需要多数主节点达成共识,如果超过半数主节点不可达,集群会停止对外服务,这是设计行为。

数据目录权限问题:Redis 以哪个用户启动,就要保证 dir 目录对该用户可写,否则启动会失败或 AOF 无法落盘。

需要特别注意,
集群模式下多 key 操作如 mget、
事务,
要求所有 key 落在同一个槽位,
可以用 {tag} 形式让 key 落到同一槽,
例如 {user}:
1
和 {user}:
2
。

几个常见疑问

如果只有一台服务器想测试,能不能搭集群?
可以,用不同端口在同一台机器上跑 6 个实例即可,但只建议用于本地验证,生产环境单机无法提供真正的高可用。

集群搭建完成后能直接扩容吗?
可以,用 redis-cli --cluster add-node 加入新节点,再用 --cluster reshard 迁移槽位。
扩容操作涉及数据迁移,建议在低峰期进行并提前备份。

Redis Cluster 搭建本身不复杂,难点多集中在端口放行、槽位分配和客户端集群模式配置上。
按本文顺序执行并逐项验证,大多数环境都能顺利跑通;
如果中途报错,优先回到集群状态检查那一步定位问题。

分享到:
上一篇
MySQL InnoDB 优化教程:从缓冲池到日志,零基础也能调对参数
下一篇
Redis持久化RDB与AOF:配置、恢复与避坑实操
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意