当前位置: 首页 > news >正文

Redis 高可用架构全解析:主从复制、哨兵与集群模式

文章目录

  • 前言
  • 一、Redis 三种模式概述
  • 二、Redis 主从复制
    • 2.1 什么是主从复制?
    • 2.2 主从复制的作用
    • 2.3 主从复制流程
    • 2.4 搭建主从复制(示例)
  • 三、Redis 哨兵模式
    • 3.1 哨兵模式概述
    • 3.2 哨兵的作用
    • 3.3 故障转移机制
    • 3.4 搭建哨兵模式(示例)
  • 四、Redis 集群模式
    • 4.1 集群模式概述
    • 4.2 集群的作用
    • 4.3 数据分片与哈希槽
    • 4.4 搭建集群模式(示例)
    • 五、总结


前言

Redis 作为高性能的键值数据库,广泛应用于缓存、会话存储、消息队列等场景。随着业务规模的扩大,单机 Redis 在性能、可用性和数据安全性方面逐渐成为瓶颈。为此,Redis 提供了多种集群化方案来实现高可用与分布式存储。本文将系统介绍 Redis 的三种核心架构模式:主从复制哨兵模式集群模式,深入解析其原理、优缺点及搭建方法,帮助开发者根据实际业务需求选择合适的架构。


一、Redis 三种模式概述

Redis 支持三种主要的集群模式,分别适用于不同场景:

  • 主从复制:实现数据的多机备份和读写分离,是高可用的基础。
  • 哨兵模式:在主从复制基础上引入自动故障转移,提高系统的可用性。
  • 集群模式:通过数据分片和分布式存储,解决写负载均衡和存储扩展问题。

这三种模式层层递进,共同构建了 Redis 的高可用生态系统。


二、Redis 主从复制

2.1 什么是主从复制?

主从复制是指将一台 Redis 服务器(主节点)的数据复制到其他 Redis 服务器(从节点)。数据复制是单向的,只能由主节点流向从节点。

2.2 主从复制的作用

  • 数据冗余:实现数据热备份,提高数据安全性。
  • 故障恢复:主节点故障时,可从节点快速接管服务。
  • 负载均衡:实现读写分离,提升读并发能力。
  • 高可用基石:是哨兵和集群模式的基础。

2.3 主从复制流程

  1. 从节点向主节点发送 SYNC 命令请求同步。
  2. 主节点执行 BGSAVE 生成 RDB 快照,并缓存期间的写命令。
  3. 主节点将 RDB 文件和缓存的命令发送给从节点。
  4. 从节点加载数据至内存,完成同步。

2.4 搭建主从复制(示例)

# Master 配置
vim /etc/redis/6379.conf
bind 0.0.0.0						#70行,修改监听地址为0.0.0.0
daemonize yes						#137行,开启守护进程
logfile /var/log/redis_6379.log		#172行,指定日志文件目录
dir /var/lib/redis/6379				#264行,指定工作目录
appendonly yes						#700行,开启AOF持久化功能# Slave 配置
replicaof 192.168.172.150 6379        #288行,指定要同步的Master节点IP和端口

配置完成重启:

/etc/init.d/redis_6379 restart

验证命令:

redis-cli info replication

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


三、Redis 哨兵模式

3.1 哨兵模式概述

哨兵模式用于监控主从节点,并在主节点故障时自动进行故障转移,实现高可用。

3.2 哨兵的作用

  • 监控:定期检查节点状态。
  • 自动故障转移:主节点宕机时,选举新主节点。
  • 通知:将故障转移结果通知客户端。

3.3 故障转移机制

  1. 哨兵通过心跳检测判断主节点是否下线。
  2. 超过半数哨兵认为主节点下线,则触发客观下线。
  3. 通过 Raft 算法选举 Leader 哨节点执行故障转移。
  4. 将最优从节点提升为主节点,并通知其他从节点切换。

3.4 搭建哨兵模式(示例)

# sentinel.conf
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no								#17行,关闭保护模式
port 26379										#21行,Redis哨兵默认的监听端口
daemonize yes									#26行,指定sentinel为后台启动
logfile "/var/log/sentinel.log"					#36行,指定日志存放路径
dir "/var/lib/redis/6379"						#65行,指定数据库存放路径
sentinel monitor mymaster 192.168.172.150 6379 2	#84行,修改 指定该哨兵节点监控192.168.172.150:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
sentinel down-after-milliseconds mymaster 30000	#113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000		#146行,故障节点的最大超时时间为180000(180秒)

启动命令:

redis-sentinel sentinel.conf &

查看哨兵信息:

redis-cli -p 26379 info Sentinel

在这里插入图片描述


四、Redis 集群模式

4.1 集群模式概述

Redis Cluster 通过数据分片(sharding)实现分布式存储,支持横向扩展和高可用。

4.2 集群的作用

  • 数据分区:将数据分散到多个节点,突破单机内存限制。
  • 高可用:支持主从复制和自动故障转移。

4.3 数据分片与哈希槽

Redis 集群使用 16384 个哈希槽,每个键通过 CRC16 取模决定所属槽位。节点负责一部分槽位,实现数据分布。

4.4 搭建集群模式(示例)

redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:

#复制6个节点文件
cd /etc/redis/
mkdir -p redis-cluster/redis600{1..6}for i in {1..6}
do
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis600$i
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis600$i
done# 配置示例(以6001端口为例)
vim redis.conf
#bind 127.0.0.1							#69行,注释掉bind 项,默认监听所有网卡
protected-mode no						#88行,修改,关闭保护模式
port 6001								#92行,修改,redis监听端口,
daemonize yes							#136行,开启守护进程,以独立进程启动
cluster-enabled yes						#832行,取消注释,开启群集功能
cluster-config-file nodes-6001.conf		#840行,取消注释,群集名称文件设置
cluster-node-timeout 15000				#846行,取消注释群集超时时间设置
appendonly yes							#700行,修改,开启AOF持久化
#启动redis节点
分别进入那六个文件夹,执行命令:redis-server redis.conf ,来启动redis节点
# 启动集群
redis-cli --cluster create \127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 \127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 \--cluster-replicas 1

测试命令:

redis-cli -p 6001 -c
cluster slots

在这里插入图片描述


五、总结

模式优点缺点适用场景
主从复制简单易用,读写分离无法自动故障转移,写负载集中读多写少,容灾备份
哨兵模式自动故障转移,高可用写负载集中,存储受单机限制对可用性要求较高的场景
集群模式数据分片,写负载均衡,横向扩展部署复杂,客户端需支持集群协议大数据量、高并发场景

在实际项目中,应根据业务需求选择合适的架构。若只需读写分离和备份,主从复制即可;若需自动故障转移,可选择哨兵模式;若数据量大且需横向扩展,则应使用集群模式。

Redis 的高可用架构为我们提供了灵活而强大的解决方案,合理运用这些模式,可以有效提升系统的稳定性、可用性和扩展性。

http://www.dtcms.com/a/393457.html

相关文章:

  • Redis全面解析:从基础配置到高可用集群
  • Redis:高性能Key-Value存储与缓存利器
  • Redis 三种核心服务架构详解:主从复制、哨兵模式与集群模式
  • Redis 三种服务架构详解:主从复制、哨兵模式与集群
  • 速通ACM省铜第十一天 赋源码(Gellyfish and Flaming Peony)
  • JAVA八股文——JAVA堆
  • Spark专题-第二部分:Spark SQL 入门(7)-算子介绍-Windows
  • JavaScript 闭包(Closure)深度讲解
  • QT与Spring Boot通信:实现HTTP请求的完整指南
  • 服务器ubuntu 22.04装nvidia驱动
  • nginx流量复制
  • spring-ai-alibaba-nl2sql 学习(五)——python 分析
  • 分布式链路追踪关键指标实战:精准定位服务调用 “慢节点” 全指南(三)
  • SimpleVLA-RL:通过 RL 实现 VLA 训练的 Scaling
  • Java 大视界 -- 基于 Java 的大数据可视化在企业供应链动态监控与优化中的应用
  • 《Linux 进程控制完全指南》
  • GitHub 热榜项目 - 日榜(2025-09-21)
  • 鹿鼎记豪侠传:Rust 重塑 iOS 江湖(上)
  • echarts监听dataZoom拖动缩放事件
  • Chrome学习小记3:基于Chrome Views框架创建最小示例窗口A(从Example分析开始)
  • Chrome学习小记2:GN构建系统小记
  • Chrome性能优化指南大纲
  • 【iOS】AFNetworking学习
  • Kafka 分层存储(Tiered Storage)原理、配置、快速上手与生产落地
  • 多元函数微分学核心概念辨析:连续、偏导与可微
  • 9.21 快选|倍增|栈+贡献法
  • AI.工作助手.工作提效率.AI应用开发平台
  • 【名人简历】鲁迅
  • linux文件系统基本管理
  • 2.1 进程与线程 (答案见原书 P57)