以下是分步实现Redis主从架构的详细指南,使用1个主节点+2个从节点的配置方案:
主从架构的典型应用对比
场景 | 单节点架构 | 主从架构优势 |
---|---|---|
读请求占比80%+ | 单节点CPU飙升至90% | 读请求分摊到3个节点,CPU均载30% |
主节点故障 | 服务完全中断,数据可能丢失 | 30秒内自动切换从节点为新主节点 |
全量数据备份 | 需停机执行SAVE | 在任意从节点执行无感知备份 |
跨地域访问 | 美国用户访问上海节点延迟200ms+ | 美国用户直连本地从节点,延迟<50ms |
在Spring boot项目里面使用需要配置Lettuce客户端实现读写分离可以查看这个链接去配置Redis主从架构配置读写分配置
环境准备
- 确保已安装Redis(推荐6.x+版本)
- 准备三份Redis配置文件(建议使用不同端口)
- 本示例使用同一服务器演示,实际生产环境建议分离部署
步骤1:创建Redis实例
1.1 创建配置文件目录
mkdir -p /etc/redis/{master,slave1,slave2}
1.2 生成主节点配置(6379端口)(默认就是主节点)
cat > /etc/redis/master/redis.conf <<EOF
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis_6379.log"
dir /var/lib/redis/6379
# 可选密码配置(生产环境必选)
# requirepass your_master_password
EOF
1.3 生成从节点配置(6380/6381端口)
# 从节点1(6380)
cat > /etc/redis/slave1/redis.conf <<EOF
port 6380
daemonize yes
pidfile /var/run/redis_6380.pid
logfile "/var/log/redis_6380.log"
dir /var/lib/redis/6380
replicaof 127.0.0.1 6379
# 如果主节点有密码需添加
# masterauth your_master_password
EOF
# 从节点2(6381)
cat > /etc/redis/slave2/redis.conf <<EOF
port 6381
daemonize yes
pidfile /var/run/redis_6381.pid
logfile "/var/log/redis_6381.log"
dir /var/lib/redis/6381
replicaof 127.0.0.1 6379
# masterauth your_master_password
EOF
replicaof 127.0.0.1 6379 这个是指定从节点的指令主节点是 127.0.0.1 6379
步骤2:启动Redis实例
# 创建数据目录
mkdir -p /var/lib/redis/{6379,6380,6381}
# 启动主节点
redis-server /etc/redis/master/redis.conf
# 启动从节点
redis-server /etc/redis/slave1/redis.conf
redis-server /etc/redis/slave2/redis.conf
步骤3:验证主从关系
3.1 检查主节点信息
redis-cli -p 6379 info replication
输出应包含:
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=...
slave1:ip=127.0.0.1,port=6381,state=online,offset=...
3.2 检查从节点信息
redis-cli -p 6380 info replication | grep -E "role|master"
redis-cli -p 6381 info replication | grep -E "role|master"
预期输出:
role:slave
master_host:127.0.0.1
master_port:6379
步骤4:测试数据同步
4.1 主节点写入数据
redis-cli -p 6379 set test_key "hello_world"
4.2 从节点查询数据
redis-cli -p 6380 get test_key # 应返回"hello_world"
redis-cli -p 6381 get test_key # 应返回"hello_world"
生产环境优化建议
-
安全配置:
- 启用密码认证(requirepass + masterauth)
- 绑定特定IP(bind配置项)
- 禁用危险命令:
rename-command FLUSHALL ""
-
持久化配置:
- 主节点关闭持久化(避免磁盘IO影响性能)
- 从节点启用RDB或AOF持久化
-
高可用方案:
- 搭配Sentinel实现自动故障转移
- 使用Redis Cluster方案
-
监控配置:
- 启用Redis监控命令
- 配置Prometheus+Redis_exporter监控
常见问题排查
-
从节点无法连接主节点:
- 检查防火墙设置
- 确认masterauth与requirepass匹配
- 查看Redis日志:
tail -f /var/log/redis_*.log
-
数据同步延迟:
- 监控
master_repl_offset
与slave_repl_offset
- 检查网络带宽和从节点性能
- 监控
-
主从切换后数据不一致:
- 使用
redis-check-rdb
检查持久化文件 - 检查主从复制积压缓冲区:
repl_backlog_active
- 使用
通过以上步骤,您已经成功搭建了一个基础的Redis主从复制架构。建议根据实际业务需求进一步配置优化参数和安全策略。