Redis(四)------redis主从复制原理

一、为什么需要主从复制

1.1、单一的redis节点储存数据主要存在两个问题:

节点故障或数据丢失问题。

节点性能不足:随着请求量和数据量的增加单一节点不能提供足够的服务能力。

1.2、主从复制优势

主从模式指的是使用一个redis实例作为主机,其余的实例作为备份机。

数据备份:主机和从机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取,也就是说,客户端可以将数据写入到主机,由主机自动将数据的写入操作同步到从机。

读写分离:【读写分离比较适合读远大于写的应用】,由于主从服务数据几乎是一致的,因而可以将写入数据的命令发送给主机执行,而读取数据的命令发送给不同的从机执行,也就是说,master用来写数据,slave用来读数据。从而达到读写分离的目的。

主从复制配合Sentinel 哨兵机(后续说明)
解决了单一节点故障后的数据丢失等问题,主从复制中通过Sentinel 哨兵机制,当主节点宕机后,可以自动选举新的主节点,无需人为参与提供不间断的服务。

二、主从复制原理

在这里插入图片描述

如上图所示 主机redis分别有redis1、redis2两个从机,redis1具有redis3一个从机

1、⼀个master可以拥有多个slave
2、多个slave链接同一个master,也可以链接其它slave
3、主 redis 中的数据和从 redis 上的数据保持实时同步,当主 redis 写入数据时通过主从复制机制会复制到两个从 redis 服务上。
4、主从复制不会阻塞 master,在同步数据时,master 可以继续处理 client 请求。

扫描二维码关注公众号,回复: 8501325 查看本文章

2.1、主从复制的概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

2.2、主从复制的作用主要包括:

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

三、主从复制工作过程

3.1、Redis的主从复制数据同步模式

Redis的主从复制功能分为两种数据同步模式进行:全量数据同步和增量数据同步。

、全量复制

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

具体步骤如下:

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

增量同步

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。

增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

具体步骤如下:

  • redis 2.8前,当主从服务器之间的连接断掉之后,master服务器和slave服务器之间都是进行全量数据同步。
  • 从redis2.8开始,引入了部分同步的概念,即使主从连接中途断掉,slave服务器不需要进行全量同步。
  • 部分同步的实现依赖于在master服务器内存中给每个slave服务器维护了一份同步日志和同步标识,每个slave服务器在跟master服务器进行同步时都会携带自己的同步标识和上次同步的最后位置。
  • 当主从连接断掉之后,slave服务器隔断时间(默认1s)主动尝试和master服务器进行连接。
  • 如果从服务器携带的偏移量标识还在master服务器上的同步备份日志中,那么就从slave发送的偏移量开始继续上次的同步操作。
  • 如果slave发送的偏移量已经不再master的同步备份日志中(可能由于主从之间断掉的时间比较长或者在断掉的短暂时间内master服务器接收到大量的写操作),则必须进行一次全量更新。在部分同步过程中,master会将本地记录的同步备份日志中记录的指令依次发送给slave服务器从而达到数据一致。

3.2、Redis主从同步策略

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步

下一节:Redis(四)------redis主从复制的实现


如果你觉得本篇文章对你有所帮助的话,麻烦请点击头像右边的关注按钮,谢谢!

技术在交流中进步,知识在分享中传播

发布了166 篇原创文章 · 获赞 212 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/qq_29914837/article/details/103580655