Redis的主从复制-概述篇

Redis主从复制是为了解决数据备份、高可用性和读写分离等问题。它包括建立连接、数据同步和命令传播三个阶段。在数据不一致、网络中断等场景下,可以通过调整配置参数和监控来优化。常见问题如从节点网络中断可能导致全量复制,可通过增大复制缓冲区避免。此外,设置超时释放和监控主从节点偏移量能有效应对故障和数据一致性挑战。
摘要由CSDN通过智能技术生成

一、什么是Redis主从复制?

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

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

二、为什么使用Redis主从复制?

假设只有一台Redis服务,这就是单机模式。

第一个问题是当服务器宕机,数据丢失,如果数据很重要,那会造成很大的损失。

第二个问题是内存问题,一台服务器的内存是会达到峰值的,一台服务器也不可能无限升级。

针对上述问题,我们需要准备多台服务器,配置主从复制。将数据保存在多台服务器上,并且保证每台服务器的数据是同步的。即使有一台服务器宕机,也不影响用户的使用。redis可以继续实现高可用,同时实现数据的冗余备份。

三、使用Redis主从复制的作用是?

1,数据冗余,实现数据的热备份,这也是持久化实现的另一种方式。

2,针对单机故障问题,一个节点故障,其他节点可以提供服务,不影响用户使用。实现了快速恢复故障,这也是服务冗余。

3,读写分离,master服务主要用来写,slave服务主要用来读数据。可以提高服务器的负载能力,可以根据需求的变化,添加从节点的数量。

4,负载均衡,同时配合读写分离,由主节点提供写服务,从节点提供读服务,分担服务器的负载。在写少读多的情况下,通过多个从节点分担读负载,能够大大提高Redis服务的并发量和负载。

5,高可用的基石,主从复制是哨兵和集群模式能够实施的基础。

四、配置Redis主从复制

具体配置过程可以网上借鉴。

五、主从复制的工作原理

1,主从复制的三个阶段

Redis主从复制的完整工作流程有以下三个阶段。

  • 建立连接过程:这个是slave跟master建立连接的过程。
  • 数据同步的过程:是maser同步数据给slave的过程。
  • 命令传播过程:是反复同步数据的过程。

2,第一阶段,建立连接过程

上图是完整介绍了主从复制建立建立工作流程。通过简短的话语来描述上述的工作流程。

1,设置master的地址和端口,保存master的信息。

2,建立socket连接。

3,持续发送ping命令。

4,身份验证。

5,发送slave端口信息。

在建立连接的工作中,从节点保存主节点master的地址和端口,主节点master保存从节点的端口信息。

3,第三阶段:数据同步阶段

这张图详细的描述了从节点第一次连接到主节点的数据同步过程。

当slave从节点第一次连接到master主节点时,先会执行一次全量复制,这一次全量复制是无法避免的。

全量复制完成后,主节点会发送复制缓存区的数据给从节点。然后从节点就会执行bgrewriteaof恢复数据,这就是部分复制。

这一阶段,提到了三个知识点,全量复制,部分复制,复制缓存区。

4,第三阶段:命令传播阶段

当master服务的数据发生修改后,主从服务数据就会不一致,此时就会让主从服务的数据同步到一致,这个过程叫命令传播。

master会将接收到的数据变更命令发送给slave,slave接收到命令后会去执行,从而让主从数据达到一致。

命令传播阶段的部分复制

  • 在出现断网的情况下,或者网络抖动会导致连接断开
  • 这种情况下主节点master还是会往复制缓冲挤压区写数据
  • 从节点会继续尝试连接主节点
  • 当从节点把自己的runid和复制偏移量发送给主节点,并开始执行pysnc命令同步
  • 如果主节点判断复制偏移量在复制缓冲区范围内,就会发送continue命令,将复制缓冲区的数据发送给从节点
  • 从节点接收到数据执行bgrewriteaof命令,同步数据

六、图解主从复制的原理

1-4是全量复制,5-8是部分复制

七、主从复制的常见问题

1,从节点网络中断偏移量越界导致全量复制

由于网络的不佳,从节点中断连接。复制缓冲区内存太小导致数据溢出,随着从节点偏移量越界,导致全量复制,有可能反复的全量复制。

解决方案:修改复制缓冲区内存大小,repl-backlog-size

2,频繁的网络中断

由于主节点cpu占用过高,或者从节点频繁连接。出现这种情况的结果是,主节点各种资源被严重占用,包括但不限于缓冲区,宽带,连接等。

解决方案:

设置从节点超时释放,

设置参数:repl-timeout

这个参数默认为60秒,超过60秒,释放slave。

3,数据不一致问题

由于网络因素,多个节点存在数据不一致问题,这个问题是不可避免的。

这里提供两个可供参考的解决方案:

第一个,如果数据需要高度一致,那么配置一台Redis服务器,读写都是在一台服务器上。这种方式仅限于少量数据,并且数据高度一致。

第二个,监控主从节点的偏移量,如果从节点的延迟过大,暂时屏蔽客户端对此从节点的访问。

设置参数 slave-serve-stale-data yes|no,这个参数一旦设置,就只能响应info slaveof等少数命令。

4,从节点故障

这个问题直接在客户端维护一个可用节点列表,当从节点故障,切换到另一个可用从节点来进行工作。

学习记录回顾总结。

参考资料:https://www.cnblogs.com/fkaka/p/13029853.html

感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值