【Redis】Redis高可用之Cluster主从模式详解(Redis专栏启动)

📫作者简介:小明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的主从复制原理,两种主从数据同步的方式的原理,全量复制原理和部分复制原理,最后总结主从复制的不足。

一、主从模式解析

1、什么是主从复制

主从复制,是指将一个Redis服务器的数据复制到其他Redis服务器。

前者称为主节点(master),后者称为从节点(slave)。在此过程中,只有 master  机可以执行写命令,而 salve 机只能执行读命令。这种读写分离模式可以大大降低 Redis 主机的数据读取压力,从而提高 Redis 的效率,同时提供多个数据备份,主从模式是构建Redis集群的最简单方法。

2、主从复制主要的作用

数据冗余:主从复制实现了数据的热备份(数据冗余模式)。

故障恢复:当主节点出现问题时,从节点可以提供服务以实现快速故障恢复(服务冗余模式)。

负载均衡:在主从复制的基础上,结合读写分离,主节点可以提供写服务,从节点可以提供读服务(即应用程序在写Redis数据时连接到主节点,应用程序在读Redis数据的时候连接到从节点),以分担服务器负载。特别是在少写多读的情况下,通过在多个从节点之间共享读负载,可以大大提高Redis服务器的并发性。

高可用性:主从复制是Sentinel(哨兵)和集群模式实现的基础,因此主从复制是Redis高可用性的基础。

二、Redis主从模式几种常见的拓扑结构

Redis主从模式拓扑结构可以支持一主一从、一主多从、树状主从结构。

1、一主一从结构

一主一从结构是最简单的复制拓扑结构,用于主节点出现宕机时从节点提供故障转移支持。

2、一主多从结构

一主多从结构(又称为星形拓扑结构)使得应用端可以利用多个从节点实现读写分离(见图6-5)。

对于读占比较大的场景,可以把读命令发送到从节点来分担主节点压力。

3、树状主从结构

树状主从结构(又称为树状拓扑结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。

通过引入复制中间层,可以有效降低主节点负载和需要传送给从节点的数据量。

三、Redis的主从复制原理

Redis主从复制的工作流程大概可以分为如下几步:

​1、保存主节点(master)信息的步骤是保存主节点的信息,包括主节点的IP和端口。

2、从节点(slave)发现新的主节点之后,它尝试与主节点建立网络连接。

3、发送ping命令连接成功后,从节点发送第一次通信的ping请求,主要是检测主从节点之间的网络套接字是否可用,以及主节点当前是否可以接受处理命令。

4、权限验证,如果主节点需要密码验证,则从节点必须具有正确的密码才能通过验证。

5、同步数据集,当主复制连接和从复制连接正常通信后,主节点将向从节点发送其保存的所有数据。

6、命令连续复制,主节点将连续向从节点发送写命令,以确保主数据和从数据的一致性。

四、主从数据同步的方式

Redis在2.8及以上版本使用psync命令完成主从数据同步,同步过程分为:全量复制和部分复制。

1、全量复制(完全重同步)

如果是第一次同步(初始复制场景),从服务器尚未复制任何主服务器,或者从服务器要复制的主服务器与上次要复制的主服务器不同,则将使用完全重同步模式进行复制(完全复制)。

全量复制将主节点的所有数据一次性发送到从节点,当数据量很大时,会给主节点和从节点以及网络造成大量开销。

全量复制的完整运行流程如下:

1、将数据从主服务器复制到从服务器,第一步是建立 Socket 连接,这个过程将进行一些信息验证、身份验证和其他事情

2、然后从服务器将向主服务器发送 PSYNC 命令以请求同步,此时,将带来服务器ID RUNID和复制进度 offset参数(偏移参数)

3、当主服务器发现这是一个新的从服务器(因为参数没有带来)时,它将采用完全重新同步模式,并将服务器ID(runld)和复制进度(offset)发送到从服务器

4、从服务器就会保存这些信息

5、主服务器将在后台生成RDB文件,并通过先前建立的连接将其发送到从服务器。从服务器接收RDB文件后,主服务器将首先清除自己的数据,然后加载并恢复RDB文件。在此过程中,主服务器继续从客户端接收请求

6、主服务器将使用 buffer 缓冲区来记录RDB文件中生成的修改命令。在从服务器加载RDB后,主服务器将向从服务器发送 buffer 中记录的命令

7、主服务器和从服务器实现数据一致性(复制过程是异步的,因此数据是最终一致性)

2、部分复制(部分重同步)

部分复制是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的主从复制原理,两种主从数据同步的方式的原理,全量复制原理和部分复制原理,最后总结主从复制的不足。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小 明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值