目录

  • 1. 为何 `Redis` 要采用主从架构
  • 2. `Redis` 的主从同步架构模式
  • 3. `Redis` 的哨兵架构模式
  • 4. `Redis` 的主从复制原理
    • 4.1. 全量同步
    • 4.2. 增量同步
  • 5. 主从复制的特点
  • 6. `Redis` 的主从同步是怎么实现的
    • 6.1. 全量同步
    • 6.2. 增量同步

1. 为何 Redis 要采用主从架构

  • 尽管 Redis 的性能很好,对于一些热门网站的某个时刻(比如促销商品的时候)每秒成千上万的请求是司空见惯的,这个时候大量的读操作就会到达 Redis 服务器,触发许许多多的操作,显然单靠一台 Redis 服务器是完全不够用的
  • 一些服务网站对安全性,可用性有较高的要求,当主服务器不能正常工作的时候,也需要从服务器代替原来的主服务器,作为灾备,以保证系统可以继续正常的工作。因此更多的时候我们更希望可以读/写分离,读/写分离的前提是读操作远远比写操作频繁得多,如果把数据都存放在多台服务器上那么就可以从多台服务器中读取数据,从而消除了单台服务器的压力,读/写分离的技术已经广泛用于数据库中了

2. Redis 的主从同步架构模式

所谓主从架构设计的思路大概是

  • 在多台数据服务器中,只有一台主服务器,而主服务器只负责写入数据,不负责让外部程序读取数据
  • 在多台从服务器中,从服务器不写入数据,只负责同步主服务器的数据,并让外部程序读取数据
  • 主服务器在写入数据后,即刻将写入数据的命令发送给从服务器,从而使得主从数据同步
  • 应用程序可以任意读取某一台从服务器的数据,这样就分摊了读数据的压力
  • 当从服务器不能工作的时候,整个系统将不受影响;当主服务器不能工作的时候,可以方便地从从服务器中选举一台来当主服务器

这个时候读数据就可以随机从服务器上读取,当从服务器是多台的时候,那么单台服务器的压力就大大降低了,这十分有利于系统性能的提高,当主服务器出现不能工作的情况时,也可以切换为其中的一台从服务器继续让系统稳定运行,所以也有利于系统运行的安全性。当然由于 Redis 自身具备的特点,所以其也有实现主从同步的特殊方式

3. Redis 的哨兵架构模式

主从切换技术的方法是:当主服务器宕机后,需要 手动 把一台从服务器切换为主服务器,这就需要人工干预,既费时费力,还会造成一段时间内服务不可用,这不是一种推荐的方式。更多的时候,我们 优先考虑哨兵模式,它是当前企业应用的主流方式

哨兵模式概述:Redis 可以存在多台服务器,并且实现了主从复制的功能。哨兵模式是一种特殊的模式,首先 Redis 提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行

其原理是:哨兵通过发送命令,等待 Redis 服务器响应,从而监控运行的多个 Redis 实例


这里的哨兵有两个作用:

  • 通过发送命令,让 Redis 服务器返回监测其运行状态,包括主服务器和从服务器
  • 当哨兵监测到 master 宕机,会自动将 slave 切换成 master,然后通过发布订阅模式通知到其他的从服务器,修改配置文件,让它们切换主机

只是现实中一个哨兵进程对 Redis 服务器进行监控,也可能出现问题,为了处理这个问题,还可以使用多个哨兵的监控,而各个哨兵之间还会相互监控,这样就变为了多个哨兵模式。多个哨兵不仅监控各个 Redis 服务器,而且哨兵之间互相监控,看看哨兵们是否还“活”着


论述一下故障切换(failover)的过程。假设主服务器宕机,哨兵 1 先监测到这个结果,当时系统并不会马上进行 failover 操作,而仅仅是哨兵 1 主观地认为主机已经不可用,这个现象被称为主观下线

当后面的哨兵监测也监测到了主服务器不可用,并且有了一定数量的哨兵认为主服务器不可用,那么哨兵之间就会形成一次投票,投票的结果由一个哨兵发起,进行 failover 操作,在 failover 操作的过程中切换成功后,就会通过发布订阅方式,让各个哨兵把自己监控的服务器实现切换主机,这个过程被称为客观下线。这样对于客户端而言,一切都是透明的

4. Redis 的主从复制原理

Redis 支持主从复制,Redis 的主从架构可以采用一主多从或者级联架构

Redis 主从复制可以根据是否是全量分为 全量同步增量同步

4.1. 全量同步

Redis 全量复制一般发生在 Slave 初始化阶段,这时 Slave 需要将 Master 上的所有数据都复制一份。具体步骤如下

  1. 从服务器连接主服务器,发送 SYNC 命令;
  2. 主服务器接收到 SYNC 命名后,开始执行 BGSAVE 命令生成 RDB 文件并使用缓冲区记录此后执行的所有写命令;
  3. 主服务器 BGSAVE 执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  4. 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  5. 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  6. 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令

完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求

4.2. 增量同步

Redis 增量复制是指 Slave 初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令

5. 主从复制的特点

如果多个 Slave 断线了,需要重启的时候,因为 只要 Slave 启动,就会发送 sync 请求和主机全量同步,当多个同时出现的时候,可能会导致 Master IO 剧增宕机

Redis 主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝

需要清楚 Redis 主从复制的几点重要内容:
-从服务器也可以接受其他从服务器的连接。除了多个从服务器连接到一个主服务器之外,多个从服务器也可以连接到一个从服务器上,形成一个树状架构

  • Redis 主从复制不阻塞主服务器端。也就是说当若干个从服务器在进行初始同步时,主服务器仍然可以处理请求
  • 主从复制也不阻塞从服务器端
  • 主从复制可以用来增强扩展性,使用多个从服务器来处理只读的请求
  • 每个从 redis 服务器可以接收来自其他从 redis 服务器的连接
  • 采用异步的方式进行复制

6. Redis 的主从同步是怎么实现的

6.1. 全量同步

  1. master 服务器会开启一个后台进程用于将 redis 中的数据生成一个 rdb文件,与此同时,服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改)
  2. 当后台保存进程处理完毕后,会将该 rdb 文件传递给 slave 服务器,而 slave 服务器会将 rdb文件保存在磁盘并通过读取该文件将数据加载到内存
  3. 在此之后 master 服务器会将在此期间缓存的命令通过 redis 传输协议发送给 slave 服务器,然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性

6.2. 增量同步

redis 2.8 版本以前,并不支持增量同步,当主从服务器之间的连接断掉之后,master 服务器和 slave 服务器之间都是进行全量数据同步

redis 2.8 开始,即使主从连接中途断掉,也不需要进行全量同步,因为从这个版本开始融入了增量同步的概念。增量同步的实现依赖于在 master 服务器内存中给每个 slave 服务器维护了一份同步日志和同步标识,每个 slave 服务器在跟 master 服务器进行同步时都会携带自己的同步标识和上次同步的最后位置

当主从连接断掉之后,slave 服务器隔断时间(默认是1s)主动尝试和 master 服务器进行连接

  • 如果从服务器携带的偏移量标识还在 master 服务器上的同步备份日志中,那么就从 slave 发送的偏移量开始继续上次的同步操作
  • 如果 slave 发送的偏移量已经不再 master 的同步备份日志中(可能由于主从之间断掉的时间比较长或者在断掉的短暂时间内 master 服务器接收到大量的写操作),则必须进行一次全量更新

在增量同步过程中,master 会将本地记录的同步备份日志中记录的指令依次发送给 slave 服务器从而达到数据一致

参考:Redis主从复制原理总结

Redis主从架构和哨兵架构模式相关推荐

  1. Redis深入理解五 :Redis主从架构、哨兵架构、高可用集群模式

    redis主从架构 redis主从架构搭建,配置从节点步骤: 复制一份redis.conf文件 将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.p ...

  2. redis主从配置+sentinel哨兵模式

    redis版本:redis-2.8.19.tar.gz 架构:2个节点 节点1: 10.10.10.10 节点2: 10.10.10.20 节点1部署redis实例,角色master,部署sentin ...

  3. 【redis学习篇】哨兵架构详解

    一.哨兵架构概要 sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点. sentinel实时监视主从集群,能实时知道哪个节点是主节点,哪些是从节点,哨兵架构下c ...

  4. Redis主从搭建(哨兵模式),springboot整合redis主从

    相关文章: redis主从复制(读写分离) redis哨兵模式 Redis配置详解 一.Redis主从搭建 本文讲解用的是Redis5.0.10搭建一主二从 Redis官方下载连接:http://do ...

  5. Redis学习(一)之 持久化、主从与哨兵架构

    jiaruredis持久化 RDB快照:在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中. 你可以对 Redis 进行设置, 让它在" N 秒内数据 ...

  6. Redis高可用之哨兵模式

    我们前面学习了Redis的主从模式,可以实现读写分离和数据备份,减轻Redis中master节点的压力.但是主从模式仅仅是减轻了master节点的读压力和做数据备份,一旦master节点挂了之后,我们 ...

  7. redis集群之哨兵模式【原】

    redis集群之哨兵(sentinel)模式 哨兵模式理想状态 需要>=3个redis服务,>=3个redis哨兵,每个redis服务搭配一个哨兵. 本例以3个redis服务为例: 一开始 ...

  8. redis主从配置之持久化配置

    环境描述: centos:7.6docker:19.03.1redis:6.0.9 对于centos怎么装docker,docker又怎么装redis镜像等等内容就不做概述了.如果还不会这个,就先去百 ...

  9. 【Redis】Redis主从架构和哨兵模式

    文章目录 主从架构 为什么需要Redis主从架构? 搭建主从架构(一主二从) 主从一致原理 复制积压缓冲区 全量复制 增量复制 在主从架构中出现了宕机的情况 为什么主从库之间的复制不使用 AOF? 哨 ...

  10. Day267.预约系统的性能瓶颈、营销活动无缝切换秒杀活动、预约系统数据迁移方案、高流量下预约系统搭建熔断机制、预约系统redis集群主从哨兵架构 -Redis的高并发预约抢购系统

    一.预约系统的性能瓶颈 1.预约系统应对热门爆品时的缺陷 用户进行预约会涉及到两个维度的数据变更一个是用户信息,一个是SKU信息,如图↓所示: 正常来说这么搞一点问题没有,即便涉及到写数据库,但是每个 ...

最新文章

  1. 当IntelliJ IDEA2020.1遇上JDK14:所有美好环环相扣
  2. 当javaScript从入门到提高前需要注意的细节:变量部分
  3. 【安利向】入坑半年的GPU云平台,三分钟训练起飞!xiu~
  4. 国产数据库发展十策(三):是走MySQL路线还是PostgreSQL路线?
  5. 【Node】—接收参数 插入数据 实现注册功能
  6. 基于Servlet的学生管理系统
  7. SuperMap矢量瓦片优化方案
  8. android apk结构,APK文件结构详解
  9. 《数据通信与网络》笔记--广域网SONET/SDH
  10. 摆扫式(whisk broom)和推扫式(push broom)卫星传感器
  11. ubuntu20.04新系统安装网卡驱动显卡驱动等问题汇总
  12. 使用超临界二氧化碳进行精密表面清洁
  13. Antd table组件样式去除背景色
  14. 基于大数据的英语学习利器
  15. JAVA获取ip的地址信息
  16. CAKEPHP3.7安装
  17. matlab随机信号分析,基于MATLAB的随机信号分析方法.ppt
  18. 数字货币一元夺宝系统:赋予平台代币新价值
  19. 用VMware-workstation虚拟苹果雪豹操作系统遇到的问题
  20. C语言当中的实际参数及形式参数

热门文章

  1. html不用ajax怎么提交,停止HTML中JS AJAX功能提交按钮
  2. 局部敏感哈希(Locality Sensitive Hashing,LSH)
  3. 591. 标签验证器
  4. 115.不同的子序列
  5. sas导出数据串行解决方案
  6. 算法萌新如何学好动态规划(一)
  7. Flume 1.8.0 开发者指南(中文教程)-个人翻译版
  8. 667.优美的数列II(力扣leetcode) 博主可答疑该问题
  9. 坐标c语言输入数组中,求助 C语言中如何利用二维数组计算多个坐标之间的距离...
  10. java对谷歌不兼容_谷歌浏览器不兼容的一些Js