当前位置:首页 > 问答 > 正文

Redis部署 集群配置 搭建Redis集群环境全流程解析,redis集群的环境从零开始搭建

Redis集群从零搭建全攻略:手把手教你玩转高可用缓存

场景引入:当单机Redis扛不住流量时...

最近小王公司的电商平台搞促销活动,平时运行良好的Redis突然开始频繁超时,甚至出现了几次缓存雪崩,导致数据库直接被流量打挂,运维团队紧急开会后决定:是时候上Redis集群了!但面对集群配置,小王和团队却犯了难——从哪开始?要注意哪些坑?别急,今天我就带你从零开始,一步步搭建一个高可用的Redis集群环境。

前期准备:兵马未动,粮草先行

1 硬件配置建议

我建议至少准备3台物理机或虚拟机(如果预算有限,6个Docker容器也能凑合),每台配置:

  • 内存:至少4GB(生产环境建议8GB以上)
  • CPU:2核以上
  • 磁盘:SSD优先,预留20GB空间
  • 网络:千兆网卡,内网互通

避坑提示:千万别在单机上跑多个Redis节点还假装是集群,那样和单机没区别!

2 软件环境准备

以CentOS 7为例(其他系统类似):

# 安装基础依赖
sudo yum install -y gcc make tcl
# 下载Redis 7.2稳定版(截至2025年8月最新)
wget https://download.redis.io/releases/redis-7.2.3.tar.gz
tar xzf redis-7.2.3.tar.gz
cd redis-7.2.3
# 编译安装
make && make install

集群规划:画好蓝图再施工

假设我们有6个节点,3主3从,这样任意一台机器挂掉都不影响服务:

节点 IP 端口 角色
节点1 168.1.101 7001 主节点
节点2 168.1.102 7002 主节点
节点3 168.1.103 7003 主节点
节点4 168.1.101 7004 从节点
节点5 168.1.102 7005 从节点
节点6 168.1.103 7006 从节点

重要原则:主从节点不要放在同一台机器上!

Redis部署 集群配置 搭建Redis集群环境全流程解析,redis集群的环境从零开始搭建

节点配置:批量操作有妙招

1 基础配置模板

创建配置文件redis-cluster.conf模板:

port ${PORT}
cluster-enabled yes
cluster-config-file nodes-${PORT}.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
pidfile /var/run/redis_${PORT}.pid
logfile "/var/log/redis/redis-${PORT}.log"
dir /data/redis/${PORT}

2 批量生成配置

用这个Shell脚本快速生成6个节点的配置:

#!/bin/bash
PORTS=(7001 7002 7003 7004 7005 7006)
for port in ${PORTS[@]}; do
  mkdir -p /data/redis/${port}
  mkdir -p /var/log/redis
  envsubst < redis-cluster.conf > redis-${port}.conf
  sed -i "s/\${PORT}/$port/g" redis-${port}.conf
done

启动集群:见证奇迹的时刻

1 逐个启动节点

for port in {7001..7006}; do
  redis-server redis-${port}.conf
done

2 创建集群关系

使用redis-cli的集群命令自动分配主从:

redis-cli --cluster create \
  192.168.1.101:7001 \
  192.168.1.102:7002 \
  192.168.1.103:7003 \
  192.168.1.101:7004 \
  192.168.1.102:7005 \
  192.168.1.103:7006 \
  --cluster-replicas 1

看到这个提示时输入yes

Redis部署 集群配置 搭建Redis集群环境全流程解析,redis集群的环境从零开始搭建

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.102:7005 to 192.168.1.101:7001
Adding replica 192.168.1.103:7006 to 192.168.1.102:7002
Adding replica 192.168.1.101:7004 to 192.168.1.103:7003
>>> Trying to optimize slaves allocation for anti-affinity
[OK] Perfect anti-affinity obtained.

验证集群:别等出问题才检查

1 基础检查

# 查看集群节点
redis-cli -p 7001 cluster nodes
# 检查集群健康状态
redis-cli --cluster check 192.168.1.101:7001

2 模拟故障转移

随便kill一个主节点进程,观察从节点是否自动升级:

# 查看当前主从关系
redis-cli -p 7001 cluster nodes | grep master
kill -9 $(cat /var/run/redis_7001.pid)
# 30秒后再检查
redis-cli -p 7004 cluster nodes | grep master

生产环境优化:让集群飞得更稳

1 关键参数调优

# 在原有配置上追加
cluster-require-full-coverage no  # 部分slot不可用时不拒绝所有请求
maxmemory 6gb                    # 设置为物理内存的75%
maxmemory-policy volatile-lru    # 内存满时淘汰策略

2 监控告警设置

建议监控这些指标:

  • 集群状态:cluster info中的cluster_state
  • 节点角色变化:监控cluster nodes输出变化
  • 内存使用率:used_memorymaxmemory比值
  • 键空间命中率:keyspace_hits/(keyspace_hits+keyspace_misses)

常见问题排雷指南

问题1:节点间无法通信

  • 检查防火墙:firewall-cmd --list-ports
  • 确认所有节点使用相同版本的Redis

问题2:MOVED重定向错误

Redis部署 集群配置 搭建Redis集群环境全流程解析,redis集群的环境从零开始搭建

  • 客户端必须支持集群模式(比如JedisCluster)
  • 不要用单机模式的客户端连接集群

问题3:新增节点后数据不均衡

# 手动重新分配slot
redis-cli --cluster rebalance 192.168.1.101:7001

写在最后

搭建Redis集群就像搭积木,步骤本身不复杂,但每个细节都关乎稳定性,记得第一次上线前一定要做:

  1. 全量压测
  2. 模拟网络分区测试
  3. 备份你的集群配置

现在你的Redis集群已经可以扛住单机故障了,不过真正的挑战才刚刚开始——下次我们可以聊聊如何在不停机的情况下扩展集群容量,有什么问题欢迎留言讨论!

发表评论