一文带你深入理解Redis的主从架构

 更新时间:2023年09月12日 09:59:27   作者:半亩方塘立身  
Redis主从架构是一种分布式数据库架构,它包括一个主节点(Master)和一个或多个从节点(Slave),主节点处理所有写操作,从节点负责复制主节点的数据并处理读请求,本文将带大家深入理解Redis主从架构,需要的朋友可以参考下

Redis主从架构概述

Redis主从架构是一种分布式数据库架构,它包括一个主节点(Master)和一个或多个从节点(Slave)。主节点处理所有写操作,从节点负责复制主节点的数据并处理读请求。以下是主从架构的核心组件:

主节点(Master):

  • 主节点是Redis集群的核心,负责处理所有写操作。
  • 客户端连接到主节点,并向其发送写请求。
  • 主节点将写操作同步到所有连接的从节点,以保持数据一致性。

从节点(Slave):

  • 从节点是主节点的复制品,其数据与主节点保持同步。
  • 从节点可以处理读操作,但不允许进行写操作(只读)。
  • 如果主节点不可用,可以将从节点提升为新的主节点。

主从同步步骤

具体步骤如下:

1、从节点根据自身状态,发送 psync命令给 master:

  • 如果从实例从未执行过 replicaof ,则从节点发送 psync ? -1,代表全量,从 -1 处开始复制。
  • 如果从节点之前执行过 replicaof,则取当前实例中记录下 runID和 offset,执行命令 psync <runID> <offset>, runID 是主节点 runID,offset 是复制偏移量。

2、主节点根据接收到的psync命令及当前服务器状态,决定执行全量复制还是部分复制:

  • 对比主、从节点的 runID 一致,且从节点发送 slave_repl_offset 之后的数据在 repl_backlog_buffer缓冲区中均存在(队列是环形的,有可能被擦除重写了),则回复 CONTINUE,代表以追加模式进行部分复制。

  • runID 与从节点发送的 runID 不同,或者从节点发送的 slave_repl_offset 之后的数据已不在主节点的 repl_backlog_buffer缓冲区中 (因为队列是环形的,所以等待时间太长或者有断连的情况,有可能被擦除重写了),则回复从节点 FULLRESYNC <runid> <offset>,表示要进行全量复制,同时记下主节点的 runID 和offset。日志如下:

repl_backlog_buffer:它是为了从库断开之后,如何找到主从差异数据而设计的环形缓冲区,从而避免全量复制带来的性能开销。如果从库断开时间太久,repl_backlog_buffer环形缓冲区被主库的写命令覆盖了,那么从库连上主库后只能乖乖地进行一次全量复制,所以repl_backlog_buffer配置尽量大一些,可以降低主从断开后全量复制的概率。而在repl_backlog_buffer中找主从差异的数据后,如何发给从库呢?这就用到了replication buffer

replication buffer:Redis和客户端通信也好,和从库通信也好,Redis都需要给分配一个 内存buffer进行数据交互,客户端是一个client,从库也是一个client,我们每个client连上Redis后,Redis都会分配一个client buffer,所有数据交互都是通过这个buffer进行的:Redis先把数据写到这个buffer中,然后再把buffer中的数据发到client socket中再通过网络发送出去,这样就完成了数据交互。所以主从在增量同步时,从库作为一个client,也会分配一个buffer,只不过这个buffer专门用来传播用户的写命令到从库,保证主从数据一致,我们通常把它叫做replication buffer

repl_backlog_size环形缓冲区写满之后,从库是会丢失掉那部分被覆盖掉的数据,还是直接进行全量复制

  • 一个从库如果和主库断连时间过长,造成它在主库repl_backlog_bufferslave_repl_offset位置上的数据已经被覆盖掉了,此时从库和主库间将进行全量复制。
  • 每个从库会记录自己的slave_repl_offset,每个从库的复制进度也不一定相同。在和主库重连进行恢复时,从库会通过psync命令把自己记录的slave_repl_offset发给主库,主库会根据从库各自的复制进度,来决定这个从库可以进行增量复制,还是全量复制。

主从架构的优势

Redis主从架构具有多个关键优势:

  • 高可用性:通过故障转移机制,Redis主从架构提供了高可用性。如果主节点出现故障,可以快速切换到一个从节点,几乎没有停机时间。

  • 读写分离:Redis主从架构允许从节点处理读操作,从而减轻了主节点的读负载,提高了整体性能。

  • 数据冗余:从节点是主节点的复制,提供了数据冗余。即使主节点出现问题,数据仍然可用。

  • 灵活性:可以根据需要扩展从节点,以处理更多的读请求,从而提高系统的扩展性。

如何搭建Redis主从架构

本地搭建可以参考:Docker Compose搭建Redis主从复制环境的实现步骤_docker_脚本之家 (jb51.net)

要搭建Redis主从架构,需要执行以下步骤:

  • 安装和配置Redis:在主节点和从节点上安装Redis,并配置它们的redis.conf文件,确保允许数据复制。

  • 启动主节点:首先启动主节点,确保其正常运行。

  • 启动从节点:启动从节点,并在配置文件中指定主节点的IP地址和端口。这个跟MySQL很类似。

replicaof <masterip> <masterport>
  • 数据同步:从节点会自动连接到主节点并请求数据复制。可以使用INFO replication命令检查复制状态。

  • 测试和监控:验证主从架构是否正常工作,监控主节点和从节点的性能和状态。

结论

Redis主从架构是一种强大的架构模式,可用于提高Redis数据库的可用性、性能和可扩展性。它通过将写操作集中在主节点上,同时允许多个从节点处理读操作,为应对高负载和故障提供了解决方案。通过了解Redis主从架构的工作原理和配置方法,可以更好地利用Redis来构建强大的应用程序和服务。

以上就是一文带你深入理解Redis的主从架构的详细内容,更多关于Redis主从架构的资料请关注脚本之家其它相关文章!

相关文章

  • redis实现sentinel哨兵架构的方法

    redis实现sentinel哨兵架构的方法

    哨兵是一个分布式系统,可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossip protocols)来接收关于Master主服务器是否下线的信息,这篇文章主要介绍了redis实现sentinel哨兵架构,需要的朋友可以参考下
    2022-11-11
  • Redis远程字典服务器 hash类型示例详解

    Redis远程字典服务器 hash类型示例详解

    这篇文章主要介绍了Redis远程字典服务器 hash类型示例详解,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • redis命令行查看中文不乱码的方法(十六进制字符串处理)

    redis命令行查看中文不乱码的方法(十六进制字符串处理)

    这篇文章主要给大家介绍了关于redis命令行查看中文不乱码的方法,其中详细介绍了十六进制字符串处理的相关资料,文中给出了详细的示例代码,供大家参考学习,下面随着小编来一起学习学习吧。
    2017-10-10
  • 使用Redis实现秒杀功能的简单方法

    使用Redis实现秒杀功能的简单方法

    这篇文章主要给大家介绍了关于使用Redis实现秒杀功能的简单方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Redis安全策略详解

    Redis安全策略详解

    缓存穿透是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。用户拿不到数据时,就会一直发请求,查询数据库,这样会对数据库的访问造成很大的压力
    2022-07-07
  • Redis实现布隆过滤器的方法及原理

    Redis实现布隆过滤器的方法及原理

    布隆过滤器优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。本文将介绍布隆过滤器的原理以及Redis如何实现布隆过滤器,感兴趣的朋友跟随小编一起看看吧
    2019-12-12
  • Redis BigKey的问题解决

    Redis BigKey的问题解决

    本文主要介绍了Redis BigKey的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Redis事务处理的使用操作方法

    Redis事务处理的使用操作方法

    Redis保证一个事务中的所有命令要么都执行,要么都不执行(原子性),如果客户端发送了EXEC命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为Redis中已经记录了所有要执行的命令,下面通过本文给大家介绍Redis事务处理的使用操作,感兴趣的朋友一起看看吧
    2021-10-10
  • Linux服务器使用Redis作为数据缓存并用log4j2进行日志记录的过程分享

    Linux服务器使用Redis作为数据缓存并用log4j2进行日志记录的过程分享

    这篇文章主要介绍了Linux服务器使用Redis作为数据缓存并用log4j2日志记录,关于SpringBoot项目配置Redis与log4j2是查询官方文档,本文中的Redis配置类、Redis工具类以及log4j2.xml配置文件来自网络,查证源自何处比较麻烦,所以在此感谢所有人的分享
    2023-09-09
  • Redis生成分布式系统全局唯一ID的实现

    Redis生成分布式系统全局唯一ID的实现

    在互联网系统中,并发越大的系统,数据就越大,数据越大就越需要分布式,本文主要介绍了Redis生成分布式系统全局唯一ID的实现,感兴趣的可以了解一下
    2021-10-10

最新评论