Redis主从复制与哨兵集群

在分布式系统中,Redis 的高可用性至关重要。本文将详细介绍 Redis 主从复制的原理、部署以及哨兵(Sentinel)集群的部署与配置,帮助你构建稳定可靠的 Redis 高可用架构。

一、Redis 主从复制

1. 主从复制的意义

主从复制是 Redis 高可用的基础,通过将主节点的数据复制到从节点,实现数据备份和读写分离,不仅提高了系统的可用性,还能分担主节点的读压力。

2. 主从结构类型

  • 一主一从:最简单的拓扑结构,用于主节点故障时从节点提供故障转移支持。可在从节点开启 AOF 持久化,避免影响主节点性能。
  • 一主多从:主节点连接多个从节点,适合读占比较大的场景,通过读写分离分担主节点压力。但需注意写并发高时可能消耗过多主节点带宽。
  • 树状主从:从节点可作为其他从节点的主节点,降低主节点负载,适用于主节点挂载多个从节点的场景。

3. 主从复制原理

3.1 复制流程
  1. 保存主节点信息 :从节点执行 slaveof 命令后,保存主节点地址信息。
  2. 建立 socket 连接:从节点通过定时任务与主节点建立网络连接。
  3. 发送 ping 命令:检测主从网络及主节点可用性,失败则重连。
  4. 权限验证 :若主节点设置密码,从节点需通过 masterauth 配置验证。
  5. 同步数据集:首次复制时通常进行全量同步,后续通过部分同步补充数据。
  6. 持续复制:主节点将写命令异步发送给从节点,保持数据一致。
3.2 复制类型
  • 全量复制:初次复制时主节点发送全部数据给从节点,耗时较长,对网络和节点压力大。
  • 部分复制:用于网络闪断等场景,主节点通过复制积压缓冲区补发丢失数据,降低开销(需 Redis 2.8+ 支持)。
3.3 关键组件
  • 复制偏移量:主从节点分别记录已复制数据的字节长度,用于判断数据一致性。
  • 复制积压缓冲区:主节点上的固定长度队列,保存最近写命令,用于部分复制。
  • 主节点运行 ID:唯一标识主节点,从节点通过此 ID 识别主节点,主节点重启后 ID 改变会触发全量复制。

4. 主从复制部署步骤

  1. 环境准备:关闭防火墙、SELinux,确保主从节点网络互通。

  2. 安装 Redis

    bash

    复制代码
    wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    tar xf redis-4.0.10.tar.gz -C /usr/src/
    cd /usr/src/redis-4.0.10/
    make && make install  # 可通过 PREFIX 指定安装路径
  3. 生成配置文件和启动脚本

    bash

    复制代码
    cd utils/
    ./install_server.sh  # 按提示设置端口、配置文件路径等
  4. 配置主从关系

    • 主节点:无需特殊配置,确保监听正确 IP。
    • 从节点:修改配置文件,添加 slaveof 主节点IP 主节点端口,并配置 masterauth(若主节点有密码)。
  5. 验证主从复制:主节点写入数据,从节点可读取即表示成功。

二、Redis Sentinel 哨兵集群

1. 哨兵的作用

主从复制存在手动故障转移的问题,哨兵集群通过自动监控、判断主节点故障并执行故障转移,解决了 Redis 的高可用问题。

2. 哨兵工作原理

  1. 监控:每个哨兵节点监控主从节点及其他哨兵节点。
  2. 判断故障:当主节点不可达时,哨兵节点协商达成一致后标记主节点为下线。
  3. 选举领导者:哨兵节点选举出一个领导者负责故障转移。
  4. 故障转移:领导者将一个从节点晋升为主节点,其他从节点改为复制新主节点,并通知应用方。

3. 哨兵集群部署步骤

3.1 环境说明
角色 端口 IP 地址
master 6379 192.168.115.111
slave1 6380 192.168.115.111
slave2 6381 192.168.115.111
Sentinel1 26379 192.168.115.111
Sentinel2 26380 192.168.115.111
Sentinel3 26381 192.168.115.111
3.2 部署步骤
  1. 安装 Redis:同主从复制步骤(示例使用 Redis 7.2.3)。

  2. 配置主从集群

    • 主节点配置:min-slaves-to-write 2(确保至少 2 个从节点正常才允许写)。
    • 从节点配置:slaveof 192.168.115.111 6379 及密码。
  3. 配置哨兵节点

    bash

    复制代码
    mkdir -p /var/log/redis/
    vim /etc/redis/redis-sentinel-26379.conf  # 其他哨兵节点类似,修改端口即可

    配置内容:

    conf

    复制代码
    port 26379
    dir "/var/log/redis"
    logfile "26379.log"
    daemonize yes
    protected-mode no
    sentinel monitor mymaster 192.168.115.111 6379 2  # 2 表示至少 2 个哨兵认为主节点故障
    sentinel down-after-milliseconds mymaster 30000  # 30秒未响应标记为下线
    sentinel parallel-syncs mymaster 1  # 故障转移时同时同步的从节点数
    sentinel failover-timeout mymaster 180000  # 故障转移超时时间
    sentinel auth-pass mymaster 123456  # 主节点密码
  4. 启动哨兵集群

    bash

    复制代码
    redis-sentinel /etc/redis/redis-sentinel-26379.conf
    redis-sentinel /etc/redis/redis-sentinel-26380.conf
    redis-sentinel /etc/redis/redis-sentinel-26381.conf
  5. 验证哨兵状态

    bash

    复制代码
    redis-cli -h 192.168.115.111 -p 26379 info Sentinel

    输出中可查看主节点状态、从节点数及哨兵数。

4. 哨兵配置说明

  • daemonize yes:以守护进程模式运行。
  • protected-mode no:关闭保护模式,允许跨网络访问。
  • sentinel monitor:指定监控的主节点及故障判断阈值。
  • sentinel down-after-milliseconds:主节点无响应的超时时间。
  • sentinel parallel-syncs:故障转移时同步从节点的数量,影响转移效率。
  • sentinel auth-pass:主从节点的访问密码(需一致)。
相关推荐
一 乐1 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
C_心欲无痕2 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫2 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
yinuo2 小时前
前端跨页面通信终极指南:方案拆解、对比分析
前端
yinuo3 小时前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
xkxnq3 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
烛阴3 小时前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js
xkxnq4 小时前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
草梅友仁4 小时前
墨梅博客 1.0.0 发布与更新 | 2026 年第 2 周草梅周报
github·ai编程·nuxt.js
anyup5 小时前
2026第一站:分享我在高德大赛现场学到的技术、产品与心得
前端·架构·harmonyos