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:主从节点的访问密码(需一致)。
相关推荐
LaughingZhu4 小时前
Product Hunt 每日热榜 | 2026-05-21
前端·人工智能·经验分享·chatgpt·html
怕浪猫4 小时前
Electron 开发实战(一):从零入门核心基础与环境搭建
前端·electron·ai编程
小鹏linux5 小时前
Ubuntu 22.04 部署开源免费具有精美现代web页面的Casdoor账号管理系统
linux·前端·ubuntu·开源·堡垒机
前端若水6 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Bigger6 小时前
mini-cc:一个轻量级 AI 编程助手的诞生
前端·ai编程·claude
涵涵(互关)6 小时前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态6 小时前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态7 小时前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart7 小时前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe57 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架