Redis主从架构记录一下

本文详细介绍了如何搭建Redis主从架构,包括配置步骤、数据同步原理以及全量和增量复制。通过实例演示了主从架构的运作,还探讨了如何缓解主从复制压力和高级架构设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  • redis在项目中是经常会使用的一种缓存数据库,了解其一些配置和设计思路有利于我们更有效安全的使用它
  • 这次分析一下Redis的主从架构机制,所谓知其然知其所以然。

搭建过程

  • 想要了解Redis的主从架构机制,最好的办法是自己搭建一套Redis主从架构。
  • 下面我们搭建一个redis一主二从的主从架构。

image.png

  • 首先下载一个单机redis服务器,然后复制两份 redis-6380.conf和redis-6381.conf文件,分别更改以下相关配置从节点:
port 6380                      # 从节点6380 (下同)
replicaof 192.168.0.60 6379    # 配置从节点访问主节点(下同)
slave-read-only yes            # 配置从节点只读操作(下同)
port 6381
replicaof 192.168.0.60 6379 
slave-read-only yes
  • 在控制台执行 redis‐server redis-6379.conf、redis‐server redis-6380.conf、redis‐server redis-6381.conf。命令启动redis一主二从服务。
  • 启动成功后,测试一下在主节点添加数据,从节点是否会同步主节点数据。
    image.png

image.png

image.png

  • 往从节点添加数据是否会插入成功。
    image.png

image.png

  • 看上图,往主节点set数据后,在从节点能get到数据。往从节点set数据会提示read only。

分析主从一致原理

  • 当我们为master节点配置了一个slave节点,不管slave是否是第一次链接上master,它都会发送一个psync命令给master请求复制数据。
  • master收到psync命令后,会在后台进行数据持久化通过bgsave生成最近的rdb快照文件(关于Redis持久化可以看我这篇文章 Redis持久化记录一下),期间Redis会继续接收其它客户端的请求,并把这些新的数据集请求缓存在内存中。当持久化完成后,master会把这份rdb文件发送给slave,slave会把接收到的数据进行持久化生成RDB文件并加载到内存,然后master再将之前缓存在内存中最新的数据发送给slave。
  • 当slave与master再次断开链接后,slave能自动重连master,如果master收到了多个slave并发连接请求,那它也只会持久化一次,而不是一个连接持久化一次,再把这个持久化文件发送给其他slave。
Redis的master和slave第一次数据全量复制:

image.png

再次链接的增量复制:
  • 当master和slave断开重连后,一般会全量复制数据。当在Redis 2.8版本后,redis支持增量复制数据到slave。
  • master会在内存创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master和它所有的slave都维护了复制的数据下标offset和master进程ID。所以当slave断开连接后,slave会发送命令到master请求进行未完成的复制,从记录的数据下标开始。当master的进程ID或从节点数据下标太旧,都不在master的缓存队列里了,那么就会进行一次数据的全量复制。

image.png

  • 如果有很多slave,那为了缓解主从复制风暴(多个slave同时复制master数据,导致master压力过大),可以做下列架构,让部分slave与slave进行同步数据

image.png

最后

  • 虚心学习,共同进步 -_-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值