【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵

文章目录

  • 【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵
  • 一、Redis 的持久化
  • 二、Redis 的主从复制和集群
  • 三、哨兵

一、Redis 的持久化

Redis 的持久化分为 RDB 持久化和 AOF 持久化,其中 RDB 持久化是镜像全量持久化,AOF 是增量持久化。在 Redis 的实际运行过程中,因为 RDB 需要做全量持久化,所以会耗费很长时间,导致服务阻塞,因此需要配合 AOF 使用,当然也可以使用 BGSAVE 命令另外开一个子进程来进行 RDB 持久化,但是这种方式实际上是采用的 CopyOnWrite 的思想,只能持久化当前的数据库状态,无法完全同步,想要完全同步还是需要使用 AOF。在 Redis 实例重启的时候,会使用 RDB 文件重新构建内存,然后加载 AOF 文件重新执行近期的指令来完整地恢复重启之前的状态

Redis 服务器突然宕机怎么办?

对于 Redis 来说,把数据库从内存持久化到磁盘上的 AOF 文件需要经过两层缓存,先是由 Redis 管理的 AOF 缓存,然后是由操作系统管理的系统缓存区。Redis 可以控制 AOF 缓存区实时地写入系统缓存区,但是想要让系统缓存区的数据真正写入硬盘需要调用 fsync 系统函数。我们可以通过 Redis 配置文件中的 appendfsync 选项来设置调用该函数的频率,分别是 always、everysec 和 no,宕机时丢失数据的多少就取决于这个选项

RDB 与 AOF 的区别

  1. RDB 是通过保存数据库中的键值对来记录数据库状态;AOF 是通过保存 Redis 服务器所执行的写命令来记录数据库状态
  2. RDB 持久化的频率没有 AOF 持久化的频率高

注意点

BGSAVE 和 BGREWRITEAOF 不能同时执行,因为同时开启两个子进程执行大量的磁盘写入操作,会非常耗费系统性能,也没有这个必要

二、Redis 的主从复制和集群

Redis 的主从复制是怎么实现的?

用户可以通过执行 SLAVEOF 命令来让一个服务器去复制另一个服务器。在第一次同步的时候,主节点会进行一次 BGSAVE,并同时将后续的写操作记录到 AOF 日志中,BGSAVE 执行完毕后再将 RDB 文件全部同步到从节点,待从节点同步完成后,再通知主节点同步 AOF 日志

Redis 的集群是怎么实现的?

用户可以通过执行 CLUSTER MEET 命令让当前节点与指定节点进行握手,握手成功后,这两个节点就形成了一个集群。Redis 集群是通过分片的方式来保存数据库中的键值对,集群的整个数据库背分为 16384 个槽,数据库中的某个键值对就存放在这 16384 个槽中的其中一个里面。用户可以通过执行 CLUSTER ADDSLOT 命令进行槽指派,将指定序号的槽指派给集群中的某个节点。每个节点都会存储集群中所有节点的信息,以及槽指派的信息,这样就可以通过键值对所在槽来定位到实际存储的节点地址

主从复制和集群有什么联系?

主从复制中,主节点和从节点存储着相同的数据,可以看作是一种数据备份,主节点宕机,从节点可以顶上去。集群是让多个节点合作,一起做一件事情,各有各的分工,一个节点宕机了,如果该节点没有做主从复制,那么整个集群就无法正常运作

三、哨兵

哨兵是 Redis 的高可用解决方案,用于监视任意多个主服务器以及这些主服务器的所有从服务器,并且在主服务器故障时,自动将从服务器升级为新的主服务器,以达到故障转移的效果

哨兵的原理是什么?

哨兵实现故障转移的原理是 Raft 算法,Raft 算法是一种选举算法。假如有 A、B、C、D、E 五个节点,其中 A 是主节点。正常情况下,主节点 A 会向从节点发送心跳信息来同步数据,当主节点 A 宕机后,B、C、D、E 就无法收到 A 的心跳信息,超过设定的时间从节点就会自动成为候选人,向其余节点发起拉票请求,并且投自己一票,其余节点收到拉票请求就会自动投该候选人一票,当其中一个候选人得票超过半数就会成为新的主节点

如何处理脑裂?

脑裂是指由于网络故障,导致一个主从集群中出现了两个主节点,客户端会同时向两个主节点写入数据或者只向其中一个主节点写入数据,当故障排排除后,哨兵将其中一个主节点降级为从节点,这样就会导致这个主节点的数据无法同步到其他从节点,造成数据的大量丢失

应对脑裂问题的最好办法就是防止脑裂,通过 Redis 配置文件中的 min-slaves-to-write 和 min-slaves-max-lag 来设置主节点能进行数据同步的最少从节点数量和主从复制时确认消息允许的最大延迟,不满足条件的主节点不能接收客户端的请求

选举领头 Sentinel

当一个主节点下线时,监视这个主节点的各个 Sentienl 会进行协商,选举一个零头 Sentienl,并由领头 Sentinel 对下线主节点执行故障转移操作

以下是 Redis 选举领头的规则和方法:

  • 所有在线的 Sentinel 中的任意一个都有可能成为领头 Sentinel
  • 每次进行领头 Sentinel 选举之后,不论选举是否成功,所有 Sentinel 的配置纪元都会自增
  • 在一个配置纪元内,所有 Sentinel 都有一次设置局部领头的机会
  • 每个发现主节点下线的 Sentinel 要求其他 Sentinel 将自己设置为局部领头
  • Sentinel 设置局部领头的规则是先到先得
  • Sentinel 将源 Sentinel 设置为局部领头后会给源 Sentinel 返回一条信息,信息中记录了当前 Sentienl 的运行 ID 和配置纪元
  • 源 Sentinel 收到超过半数的 Sentinel 发来的返回信息就会成为领头

【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵相关推荐

  1. 尚硅谷Redis尚硅谷学习汇总_事务_持久化_主从复制_集群_穿透_雪崩_击穿

    前言 该文章是我在学习Redis过程中写的学习汇总,包括了基本使用和常用命令.RDB和AOF.配置文件.事务.击穿.穿透.雪崩.集群等,都记录了详细过程,不管是新手学习还是有基础的同学拿来回顾都是可以 ...

  2. 【Redis】Redis安装、应用场景、数据类型、配置文件(很全)、发布订阅、事务、分布式锁、持久化、主从复制、集群等

    文章目录 Redis笔记 Redis 介绍 应用场景 相关技术 安装 Redis 操作及数据类型 Redis 键操作(Key) Redis 字符串(String) Redis 列表(List) Red ...

  3. Redis集群-哨兵模式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/liuzhixiong_521/article/details/84797609 文章目录 概述    ...

  4. redis在Windows下以后台服务一键搭建集群(多机器)

    redis在Windows下以后台服务一键搭建集群(多机器) 一.概述 此教程介绍如何在windows系统中多台机器之间布置redis集群,同时要以后台服务的模式运行.布置以脚本的形式,一键完成.多台 ...

  5. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

  6. Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?

    文章目录 Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构? 配置环境 构建 RedisSharding1 安装 Redis 配置 RedisSharding1 构建 ...

  7. Redis主从复制和集群配置系列之四

    非常感谢  http://blog.csdn.net/dc_726/article/details/48552531 Redis技术学习 https://www.itkc8.com 全面剖析Redis ...

  8. Day80.Redis 事物、乐观|悲观锁、秒杀、持久化{RDB|AOF}、主从复制、集群

    目录 一.Redis的事务 (Multi.Exec.discard) 1. 悲观锁 - 安全.性能低 2. 乐观锁 - 安全.性能高 ★ 3. WATCH key [key ...] 实现乐观锁的效果 ...

  9. redis进阶持久化、事务、主从复制、集群高可用

    一.redis持久化 1 Rdb方式 Rdb方式一般为redis的默认数据持久化方式.默认开启,是通过手动(save-阻塞式,bgsave-异步)或周期性方式保存redis中key/value的一种机 ...

最新文章

  1. 【luogu 2709 / BZOJ 3781】小B的询问
  2. JSR303自定义校验注解
  3. 密码学系列之:twofish对称密钥分组算法
  4. 【Boost】Boost使用几条简单笔记
  5. Linux程序包管理2
  6. ~~Trie树(数据结构)(附题目:AcWing 835. Trie字符串统计)
  7. ComponentPattern (组合模式)
  8. 解决Layui表格需表头固定悬浮的问题
  9. (9)Redis-Cluster集群理论及实践【下】
  10. 计算机运行速度靠什么,怎么让电脑运行速度变快?一招搞定
  11. Unity 2D打地鼠游戏
  12. Js-Html转文本
  13. java操作es聚合操作并显示其他字段_深入浅析Elasticsearch中的聚合操作
  14. Jlink v9仿真器PCB原理图自动升级固件
  15. Android 文件系统获取root权限和重新挂载根目录为可读写
  16. 实践 | Face-API实现人脸识别(附源代码)
  17. 零基础HTML入门教程(11)--初识VSCode
  18. 华为手机升级回退_华为荣耀手机系统回退
  19. I06-python菜鸟教程查漏补缺
  20. C# 调用大漠插件的方法

热门文章

  1. mysql启动失败 linux_如何解决MySQL内存不足启动失败的问题
  2. 计算机键盘大赛活动总结,参加技能大赛的活动总结
  3. matlab数字调音台,软件说明
  4. ppk on javascript 笔记(六)--BOM
  5. PHP之常用设计模式
  6. 奖品好low !! -- 说说开源中国oschina的年度评选
  7. 分享一张oracle scan图
  8. windows api 每日一练(5)基本内存操作
  9. HDFS小文件问题解决方案
  10. (88)FPGA乘法器设计(移位相加乘法器)