百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

详解redis的主从复制模式(redis的主从复制原理)

mhr18 2024-10-25 12:41 29 浏览 0 评论

在有一定规模的系统中,引入缓存是必须的。目前,redis已经成为分布式缓存领域事实上的霸主,其他的如memcached等则逐渐的退出了历史舞台。redis已如此重要,如果在系统中仍然以单点的形式存在,那么一旦发生故障,轻则可导致数据库压力倍增,重则让系统崩溃,产生重大损失。为了避免单点故障,提高可用性,redis提供了主从复制的集群模式。

主从复制模式是一种基本的集群模式。集群中包含两种角色,主节点和从节点。它通过把数据从主节点复制到从节点的方式,实现集群中所有节点都拥有同一份数据。

1、主从复制集群的结构

在主从复制模式中,集群的主从节点的结构通常有两种。

一种是从节点全部从主节点同步数据。结构如下图:

这个结构的优点是:所有从节点都从主节点同步数据,步调基本一致,延迟较少。但缺点也很明显,就是主节点的压力较大。

另外一种结构是只有少量的从节点直接从主节点同步数据,其他的从节点从从节点同步数据,形成一种级联结构,结构如下图:

这种结构的优缺点基本与前一种结构相反,主节点由于只有一个从节点,所以压力较小,但同时,只有主节点的直接从节点的数据同步延迟较小,其他的从节点,越往后,延迟越大。当然,这里也有其他的变种,比如如图中的红色虚线表示的,其他从节点直接作为第一个从节点的从节点。

2、主从复制的过程

redis的主从复制支持两种方式,全量复制和增量复制。

全量复制

全量复制一般发生在从节点的初始化节点,此时从节点没有数据,需要从主节点同步全部数据。过程如下:

(1)从(节点)服务器连接主(节点)服务器,发送SYNC命令

(2)主服务器收到SYNC命令后,执行BGSAVE命令生成RDB快照文件并使用缓冲区记录随后的所有写命令

(3)主服务器执行BGSAVE完成后,向所有从服务器发送RDB快照文件(每次生成磁盘文件,效率较低,在2.8以后做了优化,可以不生成文件),并继续记录所有的写命令

(4)从服务器收到RDB快照文件后,清除所有旧数据,载入快照中的新数据

(5)主服务器在快照文件发送完成后,向所有从服务器发送缓冲区中的写命令

(6)从服务器完成RDB快照的载入后,开始接收命令请求,并同时接收来自主服务器的写命令

时序图如下:

全量同步有一些缺点:

(1)同步的数据量大,性能影响比较大。在初次同步的时候是必要的,但是有些时候则有点多余,比如从服务器开启了持久化,因某种原因停机重启。

(2)有一个隐含的重大隐患,比如主服务器没有开启持久化,由于某种原因重启,此时主服务器没有数据,从服务器重连上来后,要开启同步,可能导致从服务器的所有数据被清空。

所以需要一种只同步少量数据的机制,那就是增量同步。

增量同步

过程如下:

(1)从服务器连接主服务器,发送PSYNC命令,带上主服务器的runid(机器标识)和offset(数据偏移量)

(2)主服务器验证runid和offset是否有效,无效则开启全量同步,有效则从offset处同步增量数据

3、主从复制的优缺点

主从复制有如下优点:

(1)配置简单,易于实现(2)实现数据备份和冗余,提高数据可靠性(3)实现读写分离,提高系统性能

但也有如下缺点:

(1)在主节点发生故障时,只能手动切换,故障恢复时间长,必须借助其他手段完成自动切换

(2)所有的写操作都在主节点上,主节点的压力大,会成为性能瓶颈

(3)所有节点都保持同一份数据,不能进行数据分片,单机容量即为整个集群的容量

4、主从复制的使用场景

(1)数据备份和恢复:通过从节点备份主节点的数据,实现数据备份。

(2)读写分离:主节点承担写操作或部分读操作,从节点执行读操作,减轻主节点压力,提高系统性能

(3)提高可扩展性:在不影响主节点的情况下,通过增加从节点来扩展系统的读取能力。

5、总结

主从复制模式适合数据备份和恢复、读写分离和平滑扩展等场景,但在主节点故障时需要手动切换,不能自动实现故障转移,我们以后在讲到哨兵(sentinel)模式的时候,会发现可以用sentinal来实现这一点,从而实现更高的可用性。


相关推荐

订单超时自动取消业务的 N 种实现方案,从原理到落地全解析

在分布式系统架构中,订单超时自动取消机制是保障业务一致性的关键组件。某电商平台曾因超时处理机制缺陷导致日均3000+订单库存锁定异常,直接损失超50万元/天。本文将从技术原理、实现细节、...

使用Spring Boot 3开发时,如何选择合适的分布式技术?

作为互联网大厂的后端开发人员,当你满怀期待地用上SpringBoot3,准备在项目中大显身手时,却发现一个棘手的问题摆在面前:面对众多分布式技术,究竟该如何选择,才能让SpringBoot...

数据库内存爆满怎么办?99%的程序员都踩过这个坑!

你的数据库是不是又双叒叕内存爆满了?!服务器监控一片红色警告,老板在群里@所有人,运维同事的电话打爆了手机...这种场景是不是特别熟悉?别慌!作为一个在数据库优化这条路上摸爬滚打了10年的老司机,今天...

springboot利用Redisson 实现缓存与数据库双写不一致问题

使用了Redisson来操作Redis分布式锁,主要功能是从缓存和数据库中获取商品信息,以下是针对并发时更新缓存和数据库带来不一致问题的解决方案1.基于读写锁和删除缓存策略在并发更新场景下,...

外贸独立站数据库炸了?对象缓存让你起死回生

上周黑五,一个客户眼睁睁看着服务器CPU飙到100%——每次页面加载要查87次数据库。这让我想起2024年Pantheon的测试:Redis缓存能把WooCommerce查询速度提升20倍。跨境电商最...

手把手教你在 Spring Boot3 里纯编码实现自定义分布式锁

为什么要自己实现分布式锁?你是不是早就受够了引入各种第三方依赖时的繁琐?尤其是分布式锁这块,每次集成Redisson或者Zookeeper,都得额外维护一堆配置,有时候还会因为版本兼容问题头疼半...

如何设计一个支持百万级实时数据推送的WebSocket集群架构?

面试解答:要设计一个支持百万级实时数据推送的WebSocket集群架构,需从**连接管理、负载均衡、水平扩展、容灾恢复**四个维度切入:连接层设计-**长连接优化**:采用Netty或Und...

Redis数据结构总结——面试最常问到的知识点

Redis作为主流的nosql存储,面试时经常会问到。其主要场景是用作缓存,分布式锁,分布式session,消息队列,发布订阅等等。其存储结构主要有String,List,Set,Hash,Sort...

skynet服务的缺陷 lua死循环

服务端高级架构—云风的skynet这边有一个关于云风skynet的视频推荐给大家观看点击就可以观看了!skynet是一套多人在线游戏的轻量级服务端框架,使用C+Lua开发。skynet的显著优点是,...

七年Java开发的一路辛酸史:分享面试京东、阿里、美团后的心得

前言我觉得有一个能够找一份大厂的offer的想法,这是很正常的,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司...

mysql mogodb es redis数据库之间的区别

1.MySQL应用场景概念:关系型数据库,基于关系模型,使用表和行存储数据。优点:支持ACID事务,数据具有很高的一致性和完整性。缺点:垂直扩展能力有限,需要分库分表等方式扩展。对于复杂的查询和大量的...

redis,memcached,nginx网络组件

1.理解阻塞io,非阻塞io,同步io,异步io的区别2.理解BIO和AIO的区别io多路复用只负责io检测,不负责io操作阻塞io中的write,能写多少是多少,只要写成功就返回,譬如准备写500字...

SpringBoot+Vue+Redis实现验证码功能

一个小时只允许发三次验证码。一次验证码有效期二分钟。SpringBoot整合Redis...

AWS MemoryDB 可观测最佳实践

AWSMemoryDB介绍AmazonMemoryDB是一种完全托管的、内存中数据存储服务,专为需要极低延迟和高吞吐量的应用程序而设计。它与Redis和Memcached相似,但具有更...

从0构建大型AI推荐系统:实时化引擎从工具到生态的演进

在AI浪潮席卷各行各业的今天,推荐系统正从幕后走向前台,成为用户体验的核心驱动力。本文将带你深入探索一个大型AI推荐系统从零起步的全过程,揭示实时化引擎如何从单一工具演进为复杂生态的关键路径。无论你是...

取消回复欢迎 发表评论: