Redis持久化和集群架构

这篇具有很好参考价值的文章主要介绍了Redis持久化和集群架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Redis持久化

RDB快照(snapshot)

RDB优点

RDB缺点

RDB的触发机制

AOF持久化

AOF文件重写

 AOF触发机制

混合模式

Redis主从架构

 Redis哨兵高可用架构

Redis Cluster架构

槽位定位算法

跳转重定位

Redis集群节点间的通信机制


Redis持久化

RDB快照(snapshot)

       RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是4.0之前默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

RDB优点

1. RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。

2. 生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。

3. RDB 在恢复大数据集时的速度比AOF的恢复速度要快。

RDB缺点

1. RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。

2. 当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。

RDB的触发机制

RDB持久化的触发机制有三种:save、bgsave、自动化

save

       该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程:执行完成时候如果存在老的RDB文件,就把新的替代掉旧的。当客户端数量较多时,这种方式不可取。

Redis持久化和集群架构,分布式中间件,redis,架构,java,后端

 bgsave

       执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体流程:在Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。基本上Redis内部所有的RDB操作都是采用bgsave命令。

Redis持久化和集群架构,分布式中间件,redis,架构,java,后端

自动触发

      在配置中集中配置 save m n 的方式,表示 m秒内数据集存在n次修改时,系统自动触bgsave操作。


AOF持久化

       全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。然后在服务重启以后,会执行这些命令来恢复数据。

AOF文件重写

        AOF的方式也同时带来了另一个问题。持久化文件会变的越来越大。为了压缩AOF的持久化文件。redis提供了bgrewriteaof命令。将内存中的数据以命令的方式保存到临时文件中,同时会fork出一条新进程来将文件重写。AOF文件重写就是把 Redis 进程内的数据转化为写命令,然后同步到新的AOF文件中。在重写的过程中,Redis 服务器会创建一个新的AOF文件来替代现有的AOF 文件,新、旧两个AOF文件所保存的数据库状态相同,但是新的AOF文件不会包含冗余命令。

 AOF触发机制

appendfsync always:每次收到写命令就立即强制写入磁盘

appendfsync everysec:每秒钟强制写入磁盘一次,在性能和持久化方面做平衡,推荐该方式。

appendfsync no:完全依赖OS的写入,一般为30秒左右一次,性能最好但是持久化最没有保证,不推荐。


混合模式

      重启Redis时,我们很少使用RDB来恢复内存状态,因为会丢失大量数据。我们通常使用AOF日志重放,但是重放AOF日志性能相对 RDB来说要慢很多,这样在Redis实例很大的情况下,启动需要花费很长的时间。 Redis 4.0 为了解决这个问题,带来了一个新的持久化选项混合持久化。

通过如下配置可以开启混合持久化(必须先开启aof)

# aof-use-rdb-preamble yes   

       如果开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。

混合持久化AOF文件结构如下

                               Redis持久化和集群架构,分布式中间件,redis,架构,java,后端


Redis主从架构

                             Redis持久化和集群架构,分布式中间件,redis,架构,java,后端

       如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。

       master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。

       当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。

主从复制(全量复制)流程图

     Redis持久化和集群架构,分布式中间件,redis,架构,java,后端

 数据部分复制

       当master和slave断开重连后,一般都会对整份数据进行复制。但从redis2.8版本开始,redis改用可以支持部分数据复制的命令PSYNC去master同步数据,slave与master能够在网络连接断开重连后只进行部分数据复制(断点续传)。

        master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master和它所有的slave都维护了复制的数据下标offset和master的进程id,因此,当网络连接断开后,slave会请求master继续进行未完成的复制,从所记录的数据下标开始。如果master进程id变化了,或者从节点数据下标offset太旧,已经不在master的缓存队列里了,那么将会进行一次全量数据的复制。

主从复制(部分复制,断点续传)流程图

      Redis持久化和集群架构,分布式中间件,redis,架构,java,后端

 Redis哨兵高可用架构

              Redis持久化和集群架构,分布式中间件,redis,架构,java,后端

       sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。

       哨兵架构下client端第一次从哨兵找出redis的主节点,后续就直接访问redis的主节点,不会每次都通过sentinel代理访问redis的主节点,当redis的主节点发生变化,哨兵会第一时间感知到,并且将新的redis主节点通知给client端(这里面redis的client端一般都实现了订阅功能,订阅sentinel发布的节点变动消息)

Redis Cluster架构

Redis持久化和集群架构,分布式中间件,redis,架构,java,后端

        Redis Cluster 将所有数据划分为16384个slots(槽位),每个节点负责其中一部分槽位。槽位的信息存储于每个节点中。 当 Redis Cluster 的客户端来连接集群时,它也会得到一份集群的槽位配置信息并将其缓存在客户端本地。这样当客户端要查找某个key时,可以直接定位到目标节点。同时因为槽位的信息可能会存在客户端与服务器不一致的情况,还需要纠正机制来实现槽位信息的校验调整。

槽位定位算法

        Cluster 默认会对 key 值使用 crc16 算法进行 hash 得到一个整数值,然后用这个整数值对 16384 进行取模 来得到具体槽位。 HASH_SLOT = CRC16(key) mod 16384

跳转重定位

       当客户端向一个错误的节点发出了指令,该节点会发现指令的 key 所在的槽位并不归自己管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据。客户端收到指令后除了跳转到正确的节点上去操作,还会同步更新纠正本地的槽位映射表缓存,后续所有key将使用新的槽位映射表。

Redis集群节点间的通信机制

       redis cluster节点间采取gossip协议进行通信,维护集群的元数据(集群节点信息,主从角色,节点数量,各节点共享的数据等)有两种方式:集中式和gossip

集中式

      优点在于元数据的更新和读取,时效性非常好,一旦元数据出现变更立即就会更新到集中式的存储中,其他节点读取的时候立即就可以立即感知到;不足在于所有的元数据的更新压力全部集中在一个地方,可能导致元数据的存储压力。 很多中间件都会借助zookeeper集中式存储元数据。

Gossip

     gossip协议是一种去中心化、随机化的节点通信协议,用于在分布式系统中传播信息。gossip协议包含多种消息,包括ping,pong,meet,fail等等。

meet:某个节点发送meet给新加入的节点,让新节点加入集群中,然后新节点就会开始与其他节点进行通 信;

ping:每个节点都会频繁给其他节点发送ping,其中包含自己的状态还有自己维护的集群元数据,互相通过 ping交换元数据(类似自己感知到的集群节点增加和移除,hash slot信息等);

pong: 对ping和meet消息的返回,包含自己的状态和其他信息,也可以用于信息广播和更新;

fail: 某个节点判断另一个节点fail之后,就发送fail给其他节点,通知其他节点,指定的节点宕机了。

       gossip协议的优点在于元数据的更新比较分散,不是集中在一个地方,更新请求会陆陆续续,打到所有节点上 去更新,有一定的延时,降低了压力;缺点在于元数据更新有延时可能导致集群的一些操作会有一些滞后。

gossip的通信端口

       每个节点都有一个专门用于节点间gossip通信的端口,就是自己提供服务的端口号+10000,比如7001,那么 用于节点间通信的就是17001端口。 每个节点每隔一段时间都会往另外几个节点发送ping消息,同时其他几 点接收到ping消息之后返回pong消息。文章来源地址https://www.toymoban.com/news/detail-811146.html

到了这里,关于Redis持久化和集群架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Redis 持久化及集群架构

    本篇技术博文将深入探讨 Redis 持久化机制的原理、配置和使用方式。我们将介绍两种常用的持久化方式:RDB 持久化和 AOF 持久化。您将了解到它们的工作原理、优缺点以及如何根据需求选择合适的持久化方式。 通过深入学习 Redis 持久化及集群架构,您将能够构建稳定、可靠

    2024年02月13日
    浏览(12)
  • Redis持久化和集群架构

    Redis持久化和集群架构

    目录 Redis持久化 RDB快照(snapshot) RDB优点 RDB缺点 RDB的触发机制 AOF持久化 AOF文件重写  AOF触发机制 混合模式 Redis主从架构  Redis哨兵高可用架构 Redis Cluster架构 槽位定位算法 跳转重定位 Redis集群节点间的通信机制 Redis持久化 RDB快照(snapshot)        RDB持久化是指在指定的

    2024年01月21日
    浏览(15)
  • Redis学习(三)持久化机制、分布式缓存、多级缓存、Redis实战经验

    Redis学习(三)持久化机制、分布式缓存、多级缓存、Redis实战经验

    单节点Redis存在着: 数据丢失问题:单节点宕机,数据就丢失了。 并发能力和存储能力问题:单节点能够满足的并发量、能够存储的数据量有限。 故障恢复问题:如果Redis宕机,服务不可用,需要一种自动的故障恢复手段。 RDB持久化 RDB(Redis database backup file,Redis数据库备份

    2024年02月16日
    浏览(16)
  • 微服务 - Redis缓存 · 数据结构 · 持久化 · 分布式 · 高并发

    微服务 - Redis缓存 · 数据结构 · 持久化 · 分布式 · 高并发

    系列目录 微服务 - 概念 · 应用 · 架构 · 通讯 · 授权 · 跨域 · 限流 微服务 - Consul集群化 · 服务注册 · 健康检测 · 服务发现 · 负载均衡 微服务 - Redis缓存 · 数据结构 · 持久化 · 分布式 · 高并发 微服务 - Nginx网关 · 进程机制 · 限流熔断 · 性能优化 · 动态负载 · 高可用

    2023年04月18日
    浏览(11)
  • Redis持久化说明及其单台Linux服务器搭建Redis集群架构

    Redis持久化说明及其单台Linux服务器搭建Redis集群架构

    说明:RDB快照主要以二进制文件的形式进行存储数据,主要以文件名dump.rdb进行存储,主要设置redis.conf里面设置’save 60 1000’命令可以开启, 表示在60秒内操作1000次进行一次备份数据。在客户端执行save(同步)和bgsave(异步操作)。 redis.conf 启动redis相关命令 说明:主要把文件生

    2024年02月10日
    浏览(19)
  • .NET分布式Orleans - 5 - 持久化

    在分布式系统中,数据的持久化是至关重要的一环。 Orleans 7 引入了强大的持久化功能,使得在分布式环境下管理数据变得更加轻松和可靠。 本文将介绍什么是 Orleans 7 的持久化,如何设置它以及相应的代码示例。 什么是 Orleans 7 的持久化? Orleans 7 的持久化是指将 Orleans 中的

    2024年03月27日
    浏览(10)
  • redis持久化、主从和哨兵架构

    redis持久化、主从和哨兵架构

    1、RDB快照(snapshot) redis配置RDB存储模式,修改redis.conf文件如下配置:  也可以在连接redis时手动输入save或者bgsave命令都会将所有redis内存快照生成到一个新的dump.rdb文件,并覆盖原来的rdb文件 bgsave写时复制(COW)机制 主线程在执行redis命令,在内存中生成副本的同时由主线

    2024年02月09日
    浏览(10)
  • Redis持久化、主从与哨兵架构详解

    Redis持久化、主从与哨兵架构详解

    在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。 比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时

    2024年02月09日
    浏览(9)
  • 【Redis专题】Redis持久化、主从与哨兵架构详解

    【Redis专题】Redis持久化、主从与哨兵架构详解

    【持久化】这个单词我想大家都不陌生吧。什么是持久化?我们知道,Redis的数据是存储在内存里面的,所以在Redis这里,其实是指把内存中的数据,通过一些策略写到磁盘中,方便因为宕机、或者重启Redis服务的时候,再次把数据加载到内存中。 那么,Redis中持久化策略(方

    2024年02月09日
    浏览(12)
  • Sentinel nacos spring cloud 持久化配置---分布式/微服务流量控制

    Sentinel nacos spring cloud 持久化配置---分布式/微服务流量控制

    下载地址:https://github.com/alibaba/Sentinel/releases 本次版本:1.8.6 上一篇文章已介绍 我们先说目标,为各位看官节省不匹配的时间 0、使用sentinel流控中心 1、使用nacos做配置中心 5、使用spring-cloud-starter-alibaba-sentinel做持久化配置 https://github.com/OrderDong/microservice-boot 分支:microserv

    2024年02月16日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包