Redis主从复制

发布于:2025-08-09 ⋅ 阅读:(13) ⋅ 点赞:(0)

Redis 主从复制

1. 概念

主从复制指将一个 Redis 服务器(主节点,master/leader )的数据复制到其他 Redis 服务器(从节点,slave/follower ),数据复制单向,只能从主节点到从节点,主节点以写为主,从节点以读为主 。
默认每台 Redis 服务器都是主节点,一个主节点可有多个从节点,一个从节点只能有一个主节点。
主从复制作用:

  • 数据冗余:实现数据热备份,是持久化外的数据冗余方式。
  • 故障恢复:主节点故障时,从节点可提供服务,实现快速故障恢复(服务冗余 )。
  • 负载均衡:配合读写分离,主节点提供写服务,从节点提供读服务,分担服务器负载,提升并发量(写少读多场景适配 )。
  • 高可用基石:是哨兵、集群实现的基础,保障 Redis 高可用。

工程不用单台 Redis 原因:

  • 结构风险:单点故障,单台服务器处理所有请求,压力大。
  • 容量限制:单台 Redis 内存容量有限(一般单台最大用内存不超 20G ),无法存放大体量数据。

一般来说,用将Redis运用于工程项目中,只使用一台Redis是万万不可能的,原因如下:

1. 从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;

2. 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所 有内存用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。

电商网站上的商品,一般都是一次上传,无数次浏览,也就是“多读少写”。对于这种场景,我们可 以使用如下的架构:

2. 环境配置

  • 查看主库信息
    127.0.0.1:6379> info replication  # 查看当前库复制信息
    # Replication
    role:master  # 角色为主节点 
    connected_slaves:0  # 无从机 
    # 其他复制相关信息...
    
  • 复制配置文件:复制 3 个 Redis 配置文件,修改端口号、pid 名字、log 文件名字、dump.rdb 名字。
  • 启动服务器:修改后启动 3 个 Redis 服务器,通过进程查看:
    root@chen-PC:/usr/local/bin# ps -ef | grep redis
    root       8713      1  0 16:02 ?        00:00:00 redis-server 127.0.0.1:6379
    root       8719      1  0 16:02 ?        00:00:00 redis-server 127.0.0.1:6380
    root       8725      1  0 16:02 ?        00:00:00 redis-server 127.0.0.1:6381
    root       8731   8601  0 16:02 pts/3    00:00:00 grep redis
    

3. 一主二从

一个主机有两个从机

链路模式

默认 Redis 服务器是主节点,配置从机即可。

  • 两种模式
    • 一个主机连两个从机(星型拓扑 )。
    • 链路模式(主 -> 从 1 -> 从 2 链式拓扑 )。
  • 配置从机
    127.0.0.1:6380> SLAVEOF 127.0.0.1 6379  # 从机6380 认主节点6379 
    OK
    127.0.0.1:6380> info replication  # 查看从机复制信息
    # Replication
    role:slave  # 角色为从机 
    master_host:127.0.0.1  # 主节点地址 
    master_port:6379  # 主节点端口 
    # 其他复制相关信息...
    
  • 查看主机信息:主节点执行 info replication,可见 connected_slaves:2 及从机详情。

细节:主机可写,从机只读(写操作报错 (error) READONLY You can't write against a read only replica. ),主机数据自动同步到从机。

4. 复制原理

  • 全量复制:从机启动连主机后发 sync 命令,主机启动存盘进程,收集修改数据集命令,完毕后传全量数据文件给从机,从机存盘加载到内存。
  • 增量复制:主机继续传新修改命令给从机,保持同步。重新连主机时,自动触发全量复制。

5. 从机恢复主机

从机执行 SLAVEOF no one 可恢复为主机,脱离主从复制关系。

哨兵模式(Sentinel)

1. 概述

主从切换需手动操作,低效且影响服务。Redis 2.8+ 提供哨兵模式,自动监控主节点状态,故障时自动选新主节点,保障高可用。

2. 哨兵作用

  • 发命令监控 Redis 主、从服务器运行状态。
  • 主节点宕机时,自动将从节点切换为主节点,通过发布 / 订阅模式通知其他从机换主机。

多哨兵模式:单个哨兵监控有风险,多哨兵互相监控,形成集群。主节点宕机时,哨兵先 “主观下线”(单哨兵认为主节点不可用 ),多数哨兵确认后 “客观下线”,发起投票选新主节点,执行故障转移(failover )。

3. 测试

  • 配置哨兵文件:编辑 sentinel.conf,配置监控主节点:
    sentinel monitor myredis 127.0.0.1 6379 1  # 监控名为myredis的主节点,1表示至少1个哨兵同意就切换 
    
  • 启动哨兵
    redis-sentinel sentinel.conf  # 启动哨兵进程 
    

主节点断开,哨兵从从机选新主节点;原主节点恢复后,成为新主节点的从机。

4. 优缺点

  • 优点
    • 基于主从复制,继承主从优点。
    • 自动主从切换、故障转移,提升系统可用性。
    • 主从模式升级,手动转自动,更健壮。
  • 缺点
    • 扩展困难:Redis 在线扩容麻烦,集群容量到上限难处理。
    • 配置复杂:哨兵模式配置项多,搭建维护有一定成本。

网站公告

今日签到

点亮在社区的每一天
去签到