上一篇我们深入讲解了Redis持久化机制(RDB+AOF),彻底解决了断电丢数据的问题,让单机Redis具备了生产级数据安全性。但单机Redis依旧存在致命短板:单点故障风险、读写压力集中、并发性能瓶颈。
想要让Redis支撑更大流量、更稳定运行,就必须搭建主从复制架构。本篇就从零开始,手把手带你搭建Redis主从集群,实现读写分离、数据备份、故障兜底,全程实操无废话,适配CentOS/Ubuntu系统,新手也能轻松复刻。
核心作用前置:主从复制是Redis高可用架构的基础,主节点(Master)负责写操作,从节点(Slave)负责读操作,既能分摊读写压力,又能实现数据多副本备份,主节点宕机后从节点可快速顶替,避免服务中断。
一、Redis主从复制核心原理
1. 基础角色定义
- 主节点(Master):核心节点,负责处理客户端的写请求(增删改),同步数据到所有从节点,一个集群只有一个主节点
- 从节点(Slave):副本节点,默认只处理读请求(查询),实时同步主节点数据,可配置多个,实现读负载均衡
2. 复制流程(白话讲解)
- 从节点启动后,主动向主节点发送同步请求,建立连接
- 主节点通过bgsave生成RDB快照文件,发送给从节点
- 从节点清空本地数据,加载主节点的RDB快照,完成全量同步
- 主节点后续的写命令,实时增量同步给从节点,保证数据一致
- 同步完成后,主从节点数据保持实时一致,实现读写分离
3. 核心优势
- 读写分离:主写从读,大幅提升Redis并发读取能力
- 数据备份:多副本存储,避免单节点硬盘损坏导致数据丢失
- 故障兜底:主节点宕机,从节点可快速升级为主节点,保障服务可用
- 横向扩展:增加从节点数量,轻松提升读性能
二、搭建前准备:环境规划
本次搭建一主一从架构(生产可扩展为一主多从),采用两台独立服务器,IP和端口规划如下(可根据实际服务器IP修改):
| 节点角色 | 服务器IP | Redis端口 | 备注 |
|---|---|---|---|
| 主节点(Master) | 192.168.1.100 | 6379 | 负责写操作 |
| 从节点(Slave) | 192.168.1.101 | 6379 | 负责读操作 |
前置要求:两台服务器均已按前篇教程安装Redis、配置防火墙开放6379端口、设置Redis密码、开启持久化,且能互相ping通。
三、主节点(Master)配置
主节点无需特殊修改,仅需确保允许远程连接、密码配置正确,检查并修改redis.conf配置:
# 编辑主节点Redis配置
vim /usr/local/redis/redis.conf
# 允许所有IP访问
bind 0.0.0.0
# 关闭保护模式
protected-mode no
# 设置Redis连接密码(主从密码需一致)
requirepass 123456
# 开启后台运行
daemonize yes
# 开启持久化(推荐混合持久化)
appendonly yes
save 900 1
save 300 10
save 60 10000
修改完成后,重启主节点Redis服务:
systemctl restart redis
# 查看主节点状态
systemctl status redis
四、从节点(Slave)配置
从节点需额外配置主从关联参数,指定主节点IP、端口、密码,修改redis.conf配置:
# 编辑从节点Redis配置
vim /usr/local/redis/redis.conf
# 基础配置(与主节点一致)
bind 0.0.0.0
protected-mode no
requirepass 123456
daemonize yes
appendonly yes
# 核心主从配置
# 指定主节点IP和端口
replicaof 192.168.1.100 6379
# 主节点Redis密码(必须与主节点一致)
masterauth 123456
# 从节点只读模式(禁止写操作,生产必开)
replica-read-only yes
版本提示:Redis 5.0+用 replicaof 替代旧版 slaveof,功能一致,推荐使用新版命令。
修改完成后,重启从节点Redis服务:
systemctl restart redis
# 查看从节点状态
systemctl status redis
五、主从复制验证:检查同步状态
1. 主节点状态检查
连接主节点Redis客户端,查看主从信息:
# 连接主节点
redis-cli
# 输入密码
auth 123456
# 查看主节点复制信息
info replication
出现以下结果,代表主节点正常,且已识别从节点:
role:master:当前角色为主节点connected_slaves:1:已连接1个从节点- 显示从节点IP、端口、同步状态
2. 从节点状态检查
连接从节点Redis客户端,查看复制信息:
# 连接从节点
redis-cli
# 输入密码
auth 123456
# 查看从节点复制信息
info replication
出现以下结果,代表从节点同步成功:
role:slave:当前角色为从节点master_link_status:up:主从连接正常master_sync_in_progress:0:同步完成
3. 数据同步测试
在主节点写入数据,从节点读取验证:
# 主节点写入
set test:key hello_redis
# 从节点读取
get test:key
从节点能正常读取到主节点写入的数据,说明主从复制搭建成功!
六、主从复制常用运维命令
1. 查看复制状态
# 主/从节点通用
info replication
2. 手动触发全量同步
# 从节点执行
replicaof 主节点IP 端口
3. 解除主从关系(从节点变主节点)
# 从节点执行(故障切换时用)
replicaof no one
4. 查看主从同步延迟
info replication | grep lag
七、主从复制常见问题与避坑指南
1. 主从连接失败(master_link_status:down)
- 排查:防火墙未开放6379端口、主节点IP/端口填写错误、主从密码不一致
- 解决:放行防火墙端口、核对配置参数、重启Redis服务
2. 从节点可写入,读写分离失效
- 排查:未开启
replica-read-only yes - 解决:开启从节点只读模式,重启服务
3. 主从同步延迟过大
- 原因:网络延迟、主节点写并发过高、从节点性能不足
- 解决:优化服务器网络、升级从节点配置、开启增量同步
4. 主节点宕机,如何手动切换
- 在从节点执行
replicaof no one,升级为主节点 - 修改业务代码Redis连接地址,指向新主节点
- 原主节点修复后,配置为新主节点的从节点
八、生产环境优化建议
- 架构:一主多从(2-3个从节点),实现读负载均衡
- 安全:主从节点设置复杂密码,禁止公网直接访问
- 性能:从节点关闭持久化,减少磁盘IO开销
- 监控:实时监控主从同步状态、延迟时间,及时告警
总结与下篇预告
本篇我们完成了Redis主从复制架构的搭建、验证与运维,实现了读写分离和数据多副本备份,彻底解决了单机Redis的单点故障和性能瓶颈问题。主从复制是Redis高可用的基础,也是后端工程师必备的实战技能。