图解-Redis主从复制原理

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

大家好,我是「云舒编程」,今天我们来Redis主从复制原理。

文章首发于微信公众号:云舒编程

关注公众号获取:
1、大厂项目分享
2、各种技术原理分享
3、部门内推

Redis主从复制

一、什么是主从复制

主从复制是指用户可以搭建多个服务器,其中几个服务器当做主服务器,提供写功能。其余的服务器当做从服务器,提供读功能。每当主服务器收到写请求时,同时需要把数据发送给从服务器。保证主从服务器的数据保持最终一致性。利用这个机制,可以利用廉价的服务器搭建高可用,高并发集群。主从复制是搭建高可用集群的必备利器。

二、Redis怎么实现主从复制

2.1 slaveof

在Redis中可以使用slaveof命令让一个Redis实例去复制另一个Redis实例的内容。这里需要注意当A实例执行该命令去复制B实例的内容后,以前A实例的内容都将被B实例的内容覆盖。同时在从服务器将被设置为只读,向从服务器发送写命令时,将被拒绝。(也可以在redis.conf中配置该命令,启动时就发起主从同步)

2.2 主从复制的原理V1

当从服务器发起slaveof命令后,主从服务器之间通过TCP长连接进行通信,主要是以下步骤:

图解-Redis主从复制原理,redis,数据库,缓存

第一次完整的主从同步就完成了。然后主从之间会维持TCP连接,每次master收到新的写命令后,都会发给从服务器。

如果期间连接断了,当从服务器重新连上主服务器后,上述的步骤会重新来一遍。可以发现这是很低效的,因为主服务器只需要把断连期间的写入命令发给从服务器就可以了,不需要重新生成RDB文件。(生成RDB文件是一个耗时操作,设计磁盘的读写)。

注意:从服务器在加载RDB文件过程中是阻塞的,无法处理客户端的请求。

2.3 主从复制的原理V2

基于上述原因(特别是断线时间特别短时),Redis推出了新的同步命令psync

psync将同步过程分为了两块:1、完整同步;2、部分同步。

完整同步也叫初次同步,也就是第一次主从同步。步骤跟v1上述是一致的。

部分同步主要用户断线重连后的同步,它可以将断线期间的写入命令发送给从服务器,而不需要整个RDB文件,极大的节约了资源。当从服务器重新连接了主服务器后,会发送psync命令,然后主服务器回复continue命名,并且发送缺少的写入命令到从服务器。

2.3.1 部分同步原理

redis完成部分同步功能主要依赖于以下部分:

1、主服务器的复制偏移量

2、从服务器的复制偏移量

3、命令缓存区(FIFO队列,默认大小1MB)

4、服务器运行Id

每次主服务器向从服务器传递N个字节命令后,就在把自己的偏移量+N。从服务器同理。同时主服务器还会将命令写入到命令缓存区里。当从服务器重连是发生如下步骤:

图解-Redis主从复制原理,redis,数据库,缓存

每个Redis都有自己的唯一标识Id。在启动时自动生成,由40个随机的十六进制字符组成。当发送第一次主从同步时,master会将自己的id发送会从服务器,从服务器会将其保存起来。断线重连时,从服务器请求同步时还会将这个id发送给主服务器,主服务器判断该id与自己的id是否一致,如果一致则继续执行部分同步的剩余步骤。否则执行完整同步。

2.4 心跳检测

主从服务器建立连接后,默认每隔1秒,从服务器会想主服务器发送REPLCONF_ACK <offset>报告自己的状态。

主服务器可以从这个命令中检测出几个问题:

1、主从之间的网络连接状态

​ 如果主服务器在规则时间内没有收到从服务器的心跳命令,就可以认为主从之间出现了问题。这个时候如果配置了

min-slaves-to-write 3
min-slaves-max-lag 10

//如果从服务器数小于3或者3个服务器的心跳检测延迟值都大于等于10秒,主服务器将拒绝写命令

2、检测新的写命令是否丢失

​ 每次主服务器收到从服务器心跳命令里的offset时,都会与自己的offset进行比较,如果小于自己的。那么可以知道某次传递的写命令在网络上丢失或者从服务器加载失败,这个时候主服务器会主动将这部分缺少的命令发送给从服务器(需要缺失命令还在缓存区,如果不在猜测应该是发起一次完整同步,未验证过)。

3、辅助实现min-slaves

2.5 备注

主从服务器建立套接字连接后,从服务器首先会发起Ping命令检测套接字的读写是否正常。收到主服务器的Pong命令后证明正常。然后在判断主服务器是否需要身份认证,发起密码。然后进行复制流程。

推荐阅读

1、原来阿里字节员工简历长这样

2、一条SQL差点引发离职

3、MySQL并发插入导致死锁


如果你也觉得我的分享有价值,记得点赞或者收藏哦!你的鼓励与支持,会让我更有动力写出更好的文章哦!
更多精彩内容,请关注公众号「云舒编程」文章来源地址https://www.toymoban.com/news/detail-824485.html

到了这里,关于图解-Redis主从复制原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL高级第十七篇:数据库主从复制原理及保证数据一致性

    MySQL高级第十七篇:数据库主从复制原理及保证数据一致性

    在实际工作中,我们常常将Redis作为缓存与MySQL来配合使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出,如果不存在再访问数据库。 这样就提升了读取的效率,也减少了对后端数据库的访问压力。 此外,对于一般数据库应用而言,都是 读多写少 的,

    2023年04月25日
    浏览(8)
  • ​Redis主从复制模式原理及演进​

    ​Redis主从复制模式原理及演进​

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能

    2023年04月15日
    浏览(7)
  • MySQL数据库——主从复制

    MySQL数据库——主从复制

    在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似

    2024年02月11日
    浏览(8)
  • mysql 数据库主从复制搭建

    MySQL 主从复制主要用于实现高可用性和备份。在主从复制中,一个 MySQL 实例(称为主节点)将其数据更改复制到至少一个其他 MySQL 实例(称为从节点)上。主要借助于数据库二进制日志binlog进行数据的复制。 主从数据库对应的操作系统、数据库版本要一致。 1、主库配置 设

    2024年02月20日
    浏览(9)
  • 【MySQL数据库】主从复制与读写分离

    【MySQL数据库】主从复制与读写分离

    读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。 但是数据库

    2024年02月11日
    浏览(11)
  • 【数据库】mysql主从复制与读写分离

    【数据库】mysql主从复制与读写分离

      读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE ),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。   因为数据库的\\\"写”(写10000条数据可能要3分钟)操作是比较耗时的。   

    2024年02月11日
    浏览(12)
  • MySQL数据库 主从复制与读写分离

    读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。 但是数据库

    2024年02月10日
    浏览(12)
  • Redis如何实现主从复制?有没有办法保证数据一致性?

    Redis通过主从复制(Master-Slave Replication)实现数据复制和高可用性。主节点负责接收和处理写操作,并将数据同步到从节点上。 主从复制的实现步骤如下: 配置主从关系:在从节点上的配置文件中配置主节点的IP地址和端口号。 从节点连接主节点:从节点启动时会自动连接主

    2024年02月13日
    浏览(9)
  • 【数据库】详解数据库架构优化思路(两主架构、主从复制、冷热分离)

    【数据库】详解数据库架构优化思路(两主架构、主从复制、冷热分离)

    对数据库架构进行优化是为了提高数据库系统的性能、可扩展性、稳定性和可维护性。MySQL官方说:单表2000万数据,性能就达到瓶颈了,为了保证查询效率需要让每张表的大小得到控制。 再来说,为什么要提高查询效率呢? 除了普通的用户查询操作,增、删、改操作都包含

    2024年02月11日
    浏览(8)
  • 实现↝Mysql数据库主从复制搭建与同步

    实现↝Mysql数据库主从复制搭建与同步

    一般数据库都是读取压力大于写数据压力,主从复制即为了实现数据库的负载均衡和读写分离。通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,主服务器只负责写,而从服务器只负责读。 如生产环境中,使用redis数据库作为缓存数据库,用户访问业务数据时,先

    2024年02月10日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包