上一篇我们深入讲解了Redis持久化机制(RDB+AOF),彻底解决了断电丢数据的问题,让单机Redis具备了生产级数据安全性。但单机Redis依旧存在致命短板:单点故障风险、读写压力集中、并发性能瓶颈

想要让Redis支撑更大流量、更稳定运行,就必须搭建主从复制架构。本篇就从零开始,手把手带你搭建Redis主从集群,实现读写分离、数据备份、故障兜底,全程实操无废话,适配CentOS/Ubuntu系统,新手也能轻松复刻。

核心作用前置:主从复制是Redis高可用架构的基础,主节点(Master)负责写操作,从节点(Slave)负责读操作,既能分摊读写压力,又能实现数据多副本备份,主节点宕机后从节点可快速顶替,避免服务中断。

一、Redis主从复制核心原理

1. 基础角色定义

  • 主节点(Master):核心节点,负责处理客户端的写请求(增删改),同步数据到所有从节点,一个集群只有一个主节点
  • 从节点(Slave):副本节点,默认只处理读请求(查询),实时同步主节点数据,可配置多个,实现读负载均衡

2. 复制流程(白话讲解)

  1. 从节点启动后,主动向主节点发送同步请求,建立连接
  2. 主节点通过bgsave生成RDB快照文件,发送给从节点
  3. 从节点清空本地数据,加载主节点的RDB快照,完成全量同步
  4. 主节点后续的写命令,实时增量同步给从节点,保证数据一致
  5. 同步完成后,主从节点数据保持实时一致,实现读写分离

3. 核心优势

  • 读写分离:主写从读,大幅提升Redis并发读取能力
  • 数据备份:多副本存储,避免单节点硬盘损坏导致数据丢失
  • 故障兜底:主节点宕机,从节点可快速升级为主节点,保障服务可用
  • 横向扩展:增加从节点数量,轻松提升读性能

二、搭建前准备:环境规划

本次搭建一主一从架构(生产可扩展为一主多从),采用两台独立服务器,IP和端口规划如下(可根据实际服务器IP修改):

节点角色服务器IPRedis端口备注
主节点(Master)192.168.1.1006379负责写操作
从节点(Slave)192.168.1.1016379负责读操作

前置要求:两台服务器均已按前篇教程安装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. 主节点宕机,如何手动切换

  1. 在从节点执行 replicaof no one,升级为主节点
  2. 修改业务代码Redis连接地址,指向新主节点
  3. 原主节点修复后,配置为新主节点的从节点

八、生产环境优化建议

  • 架构:一主多从(2-3个从节点),实现读负载均衡
  • 安全:主从节点设置复杂密码,禁止公网直接访问
  • 性能:从节点关闭持久化,减少磁盘IO开销
  • 监控:实时监控主从同步状态、延迟时间,及时告警

总结与下篇预告

本篇我们完成了Redis主从复制架构的搭建、验证与运维,实现了读写分离和数据多副本备份,彻底解决了单机Redis的单点故障和性能瓶颈问题。主从复制是Redis高可用的基础,也是后端工程师必备的实战技能。

发表回复