作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。
热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。
2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人
InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家
如果此文还不错的话,还请关注、点赞、收藏三连支持一下博主~
文末获取联系 精彩专栏推荐订阅收藏
专栏系列(点击解锁)
学习路线(点击解锁)
知识定位
Redis从入门到精通与实战
Redis从入门到精通与实战
围绕原理源码讲解Redis面试知识点与实战
MySQL从入门到精通
MySQL从入门到精通
全面讲解MySQL知识与企业级MySQL实战 计算机底层原理
深入理解计算机系统CSAPP
以深入理解计算机系统为基石,构件计算机体系和计算机思维
Linux内核源码解析
围绕Linux内核讲解计算机底层原理与并发
数据结构与企业题库精讲
数据结构与企业题库精讲
结合工作经验深入浅出,适合各层次,笔试面试算法题精讲
互联网架构分析与实战
企业系统架构分析实践与落地
行业最前沿视角,专注于技术架构升级路线、架构实践
互联网企业防资损实践
互联网金融公司的防资损方法论、代码与实践
Java全栈白宝书
精通Java8与函数式编程
本专栏以实战为基础,逐步深入Java8以及未来的编程模式
深入理解JVM
详细介绍内存区域、字节码、方法底层,类加载和GC等知识
深入理解高并发编程
深入Liunx内核、汇编、C++全方位理解并发编程
Spring源码分析
Spring核心七IOC/AOP等源码分析
MyBatis源码分析
MyBatis核心源码分析
Java核心技术
只讲Java核心技术
本文目录
本文导读
一、主从模式解析
1、什么是主从复制
2、主从复制主要的作用
二、Redis主从模式几种常见的拓扑结构
1、一主一从结构
2、一主多从结构
3、树状主从结构
三、Redis的主从复制原理
四、主从数据同步的方式
1、全量复制(完全重同步)
2、部分复制(部分重同步)
五、主从复制的不足
总结
本文讲解Redis高可用之Cluster主从模式详解,首先讲解什么是主从复制,主从复制主要的作用,Redis主从模式三种常见的拓扑结构,一主一从、一主多从、树状主从。
Redis的主从复制原理,两种主从数据同步的方式的原理,全量复制原理和部分复制原理,最后总结主从复制的不足。
主从复制,是指将一个Redis服务器的数据复制到其他Redis服务器。
前者称为主节点(master),后者称为从节点(slave)。在此过程中,只有 master 机可以执行写命令,而 salve 机只能执行读命令。这种读写分离模式可以大大降低 Redis 主机的数据读取压力,从而提高 Redis 的效率,同时提供多个数据备份,主从模式是构建Redis集群的最简单方法。
数据冗余:主从复制实现了数据的热备份(数据冗余模式)。
故障恢复:当主节点出现问题时,从节点可以提供服务以实现快速故障恢复(服务冗余模式)。
负载均衡:在主从复制的基础上,结合读写分离,主节点可以提供写服务,从节点可以提供读服务(即应用程序在写Redis数据时连接到主节点,应用程序在读Redis数据的时候连接到从节点),以分担服务器负载。特别是在少写多读的情况下,通过在多个从节点之间共享读负载,可以大大提高Redis服务器的并发性。
高可用性:主从复制是Sentinel(哨兵)和集群模式实现的基础,因此主从复制是Redis高可用性的基础。
Redis主从模式拓扑结构可以支持一主一从、一主多从、树状主从结构。
一主一从结构是最简单的复制拓扑结构,用于主节点出现宕机时从节点提供故障转移支持。
一主多从结构(又称为星形拓扑结构)使得应用端可以利用多个从节点实现读写分离(见图6-5)。
对于读占比较大的场景,可以把读命令发送到从节点来分担主节点压力。
树状主从结构(又称为树状拓扑结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。
通过引入复制中间层,可以有效降低主节点负载和需要传送给从节点的数据量。
Redis主从复制的工作流程大概可以分为如下几步:
1、保存主节点(master)信息的步骤是保存主节点的信息,包括主节点的IP和端口。
2、从节点(slave)发现新的主节点之后,它尝试与主节点建立网络连接。
3、发送ping命令连接成功后,从节点发送第一次通信的ping请求,主要是检测主从节点之间的网络套接字是否可用,以及主节点当前是否可以接受处理命令。
4、权限验证,如果主节点需要密码验证,则从节点必须具有正确的密码才能通过验证。
5、同步数据集,当主复制连接和从复制连接正常通信后,主节点将向从节点发送其保存的所有数据。
6、命令连续复制,主节点将连续向从节点发送写命令,以确保主数据和从数据的一致性。
Redis在2.8及以上版本使用psync命令完成主从数据同步,同步过程分为:全量复制和部分复制。
如果是第一次同步(初始复制场景),从服务器尚未复制任何主服务器,或者从服务器要复制的主服务器与上次要复制的主服务器不同,则将使用完全重同步模式进行复制(完全复制)。
全量复制将主节点的所有数据一次性发送到从节点,当数据量很大时,会给主节点和从节点以及网络造成大量开销。
全量复制的完整运行流程如下:
1、将数据从主服务器复制到从服务器,第一步是建立 Socket 连接,这个过程将进行一些信息验证、身份验证和其他事情
2、然后从服务器将向主服务器发送 PSYNC 命令以请求同步,此时,将带来服务器ID RUNID和复制进度 offset参数(偏移参数)
3、当主服务器发现这是一个新的从服务器(因为参数没有带来)时,它将采用完全重新同步模式,并将服务器ID(runld)和复制进度(offset)发送到从服务器
4、从服务器就会保存这些信息
5、主服务器将在后台生成RDB文件,并通过先前建立的连接将其发送到从服务器。从服务器接收RDB文件后,主服务器将首先清除自己的数据,然后加载并恢复RDB文件。在此过程中,主服务器继续从客户端接收请求
6、主服务器将使用 buffer 缓冲区来记录RDB文件中生成的修改命令。在从服务器加载RDB后,主服务器将向从服务器发送 buffer 中记录的命令
7、主服务器和从服务器实现数据一致性(复制过程是异步的,因此数据是最终一致性)
部分复制是Redis针对完全复制的高成本而采取的一种优化措施,它是使用psync {runId} {offset} 命令实现的。
当从节点复制主节点时,如果出现网络闪存或命令丢失等异常,则从节点将请求主节点重新发布丢失的命令数据。
如果这部分数据存在于主节点的复制积压缓冲区中,它将直接发送到从节点,这样可以保持主节点和从节点复制的一致性。
部分复制的完整运行流程如下:
使用 offset 执行部分重新同步。主服务器每次发送命令时,都会将 offset 发送到从服务器。主服务器和从服务器将保存 offset。
如果两侧的 offset 不同,则表示主服务器和从服务器的数据没有完全同步。在从服务器断开连接后,PSYNC 命令将发送到主服务器,主服务器还将携带 RUNID 和 offset。
主服务器收到命令后,检查RUNID是否正确。它表明这可能是以前复制的。检查主服务器记录的offset 中是否仍存在 offset。
主服务器记录 offset 使用环形 buffer 。如果缓冲区已满,它将覆盖以前的记录。如果找到它,它将从报价的缺失部分开始,并向从服务器发送相应的修改命令。如果未找到从环形 buffer,则只能使用完全复制模式再次复制主缓冲区和从缓冲区。
1、一旦主节点发生故障,Redis 主从模式不具备自动容错和恢复功能,Redis集群将无法工作,需要手动将从节点升级为主节点,同时,需要修改应用程序的主节点地址。还需要命令其他从节点复制新的主节点。整个过程需要人工干预。
2、主节点的写和存储受单机限制。
3、如果同步的数据量很大,可能会导致卡滞现象。
4、如果主机宕机前有一部分数据未能及时同步到从机,即使切换主机后也会造成数据不一致的问题。
本文讲解Redis高可用之Cluster主从模式详解,首先讲解什么是主从复制,主从复制主要的作用,Redis主从模式三种常见的拓扑结构,一主一从、一主多从、树状主从。
Redis的主从复制原理,两种主从数据同步的方式的原理,全量复制原理和部分复制原理,最后总结主从复制的不足。