2023.1.21 关于 Redis 主从复制详解

目录

引言

单点问题

分布式系统

主从模式

配置 Redis 主从结构

断开主从关系

切换主从关系

补充知识点一

只读

网络延迟

 拓扑结构

一主一从

一主多从

树形主从结构

主从复制的基本流程 

数据同步

replicationid

offset

pzync 运行流程

具体流程

 补充知识点二

replicationid 与 runId 区别

全量复制流程

部分复制流程

实时复制流程

心跳包机制

总结

主从复制解决的问题

主从复制的特点

主从复制配置的过程

主从复制的缺点

从节点是否晋升成主节点问题

补充知识点三


引言

单点问题

  • 单点 ——> 某个服务器只有一个节点,即只搞一个物理服务器来部署这个服务器程序​​​​​​​

问题:

  1. 可用性:如果该机器挂了,便意味着服务器中断
  2. 性能、支持的并发量:十分有限

解决方案:

  • 引入分布式系统,主要也就是为了解决单点问题​​​​​​​​​​​​​​

分布式系统

  • 在分布式系统中,往往有多个服务器来部署 Redis 服务,从而构成一个 Redis 集群
  • 此时便可以让该集群给整个分布式系统服务,以便提供更稳定 和 更高效的数据存储功能

三种部署方式:

  1. 主从模式
  2. 主从 + 哨兵模式
  3. 集群模式

  • 本文主要详解 Redis 部署方式中的 主从模式

​​​​​​​​​​​​​​主从模式

  • 在若干个 Redis 节点中,有的是 主节点,有的是 从节点

实例理解

  • 假设有三个物理服务器,即三个节
  • 这三个节点​​​​​​​分别部署 redis-server 进程
  • 此时就可以将其中的一个节点,作为 主节点,另外两个节点作为 从节点

  • 从节点上的数据跟随主节点变化,从节点的数据要和主节点保持一致

具体理解:

  • 本来主节点上保存一堆数据,在引入从节点后,便需要将主节点上的数据复制出来,放到从节点中
  • 后续主节点对数据如果有任何修改,都需将修改给同步到从节点
  • 即 从节点就是主节点的副本

问题:

  • 如果修改了 从节点 的数据,是否还需要将 从节点 所修改的数据往 主节点 上同步呢?

回答:

  • 在 Redis 主从模式下,从节点上的数据,不允许修改!只能读取数据!

优势:

  • Redis 主从结构可有效改善 可用性问题、性能、支持并发量有限 问题,即 单点问题

具体理解:(性能、并发量)

  • 由于 从节点数据 时时刻刻与 主节点 保持一致
  • 因此其他的客户端在 从节点读取的数据,和在 主节点读取的数据没有任何区别!
  • 即 其他客户端如需读取数据,可随机挑选一个从节点,给该客户端提供读取数据的服务
  • 引入了更多的计算资源,自然能够支持的并发量也便大幅提高了!

具体理解:(可用性)

  • 相较于单个 Redis 服务器节点,如果该节点挂了,整个 服务也便中断了
  • 而主从结构的 Redis 服务器节点是不太可能 同时挂了的!

问题一:

  • 是否存在整个机房同时挂了的情况呢?

回答:

  • 也是可能会存在的!
  • 这个时候如果考虑到更高的可用性,便可以将这些机器分散到多个不同的机房中
  • 即 异地多活

问题二:

  • 如果是挂掉了某个从节点呢?

回答:

  • 没啥影响
  • 此时继续到 主节点或其他从节点 获取数据即可
  • 因为得到的效果完全相同

问题三:

  • ​​​​​​​如果是挂掉了主节点呢?

回答:

  • 还是有一定影响的
  • 因为从节点只能读取数据,却无法写数据
  • 即 可用性虽然是提高了,但是还没到非常理想的程度

问题四:

  • 是否可以引入多个主节点呢?

回答:

  • 一山不能容二虎
  • 如果存在两个主节点,这两个主节点之间如何互相同步数据呢?
  • 所以引入多个主节点,也并不能很好的解决上述问题

总结:

  • 准确来说,主从模式主要是针对 "读操作" 来进行 并发量 和 可用性 的提高
  • 而写操作,无论是可用性还是并发,均十分依赖主节点,而主节点又不能搞多个

注意点一:

  • 实际业务场景中,读操作往往就是比写操作更频繁

注意点二:

  • 主从结构是分布式系统中一种 比较典型的结构
  • 不仅仅是 redis 支持,像 MySQL 等其他的常用组件 同样也是支持的

配置 Redis 主从结构

  • 配置 Redis 主从结构,首先需要启动多个 Redis 服务器

注意:

  • 正常来说,每个 Redis 服务器程序,都应该在一个单独的主机上
  • 因为这才符合 分布式

问题一:

  • 仅有一个云服务器,不能部署分布式系统吗?

回答:

  • 一个云服务器上 是可以运行多个 redis-server 进程的
  • 但是需要保证这多个 redis-server 端口需不同
  • 本来 redis-server 默认的端口为 6379
  • 此时便不能让新启动的 redis-server 再继续使用 6379 端口了

问题二:

  • 如何指定 redis-server 的端口呢?

回答:

  1. 在启动程序时,通过命令行来指定端口号,即添加 --port 选项
  2. 直接在配置文件中设定端口(下文实例将通过该方式来完成)

实例理解

  •  假设我要配置一个主节点和两个从节点

1、主节点配置不变,复制两份主节点配置文件,并修改这两份文件的端口和后台运行方式

  • 此时我们便得到了两份 从节点 的配置文件,端口分别为 6380、6381

2、启动两个从节点的 Redis 服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

茂大师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值