Redis(主从模式)

本文详细介绍了Redis主从模式的工作原理,包括可用性、性能提升、异地多活策略,以及如何配置主从结构、数据同步流程(全量、部分、实时复制)和心跳包机制。还讨论了从节点晋升为主节点的情况。
摘要由CSDN通过智能技术生成

什么是 Redis 主从模式?

在若干个 Redis 节点中, 其中一个是主节点, 其余是从节点
从节点上的数据随主节点变化, 从节点与主节点保持一致
主节点数据允许修改和读取, 从节点数据只允许读取,不允许修改

tips: 由于数据的同步, 主节点只能同时存在一个, 不然会出现 谁跟谁同步, 谁与谁保持一致等问题 (这就是集群的内容了)


Redis 主从模式主要解决 可用性和性能问题

可用性

挂掉某个从节点, 对客户端基本无影响 (客户端读取数据时, Redis 会随机挑选一个节点分配给客户端使用, 如果当前从节点挂掉了, 再换一个从节点也是一样可以读取数据)
挂掉唯一的主节点, 会对写操作造成影响

性能

针对 “读操作”, 进行并发量的提高


异地多活机制

当随机挂掉一个从节点, 对客户端的影响微乎其微
但是如果部署众多节点的机房挂掉了呢?
那就寄了, 肯定是完犊子了
因此我们可以把众多子节点存放于不同的机房, 这就是异地多活机制
北京机房部署两个节点, 杭州机房部署两个节点 …
这些机房不太可能同时挂掉 (如果同时挂掉了, 不是核武就是世界末日, 这时候还是考虑该怎么保住自己的小命吧)


配置主从结构

三种方式:

  1. 在配置文件中加入配置: slaveof {masterHost} {masterPort}, 该方法可以保证持久性, 重启 Redis 仍然生效
  2. redis-server 启动命令时, 加入 slaveof {masterHost} {masterPort} 命令
  3. 在 Redis 子节点 的命令行中输入命令 slaveof {masterHost} {masterPort}即可建立主从结构连接, 输入命令 slaveof no one 即可断开主从结构

主节点和从节点之间通过 TCP 来进行数据传输
TCP 内部自带 nagle 算法, 默认开启

  • nagle 算法会增加 TCP 的传输延迟, 但是可以节省网络带宽

拓扑结构

拓扑结构即若干个节点之间如何进行组织连接.大体上分为三种形式.

一主一从

在这里插入图片描述

一主多从

在这里插入图片描述
树形结构

在这里插入图片描述

一主多从结构如果子节点过多, 会让主节点的网络带宽压力很大, 但是可以把读命令负载均衡到不同从节点上来分担压力
树形结构能够减少主节点的网络带宽压力, 但是如果层级过高, 会使得数据同步延迟更高


主从复制基本流程

在这里插入图片描述

  1. 从节点调用 slaveof 命令, 开始配置主从同步关系, 从节点保存主节点的地址信息 (master_host, master_port)
  2. 主从节点建立 TCP 连接
  3. 连接建立完成后, 从节点发送 ping 命令, 主节点想用 pong 命令, 确定主从节点在应用层上能够良好工作
  4. 如果主节点设置了 requirepass 参数, 则需要进行密码校验
  5. 同步数据集, 首次连接会进行全量复制或者部分复制
  6. 增量复制, 即主节点的实时复制

数据同步

分为全量复制, 部分复制, 实时复制三种方式
全量复制和部分复制作用于主从节点首次连接, 进行的数据同步初始化工作
实时复制作用于数据初始化之后, 主节点将收到的新的修改数据同步给从节点

Redis 提供 psync 命令, 来完成 数据初始化 (Redis 会在服务器建立好主从同步关系后, 自动调用 psync 命令)
命令格式: psync replid ( replication id ) offset

  • replication id / replid : 标识主节点 (数据从哪里同步)
  • offset : 已同步数据的偏移量 (数据同步到哪里了)(-1 表示获取全部数据/全量复制, 正整数表示从当前偏移量位置进行获取/部分复制)

replid 和 offset 标识了一个数据集合

在这里插入图片描述

从节点发送 psync 命令给主节点, replid 和 offset 的值默认是 ? 和 -1
主节点根据 psync 参数和自身数据情况决定响应结果

  • 如果回复 +FULLRESYNC replid offset , 则从节点需要进行全量复制流程
  • 如果回复 +CONTINEU , 从节点进行部分复制流程
  • 如果回复 -ERR , 说明出现版本不兼容命令 (新: psync , 旧: sync)

全量复制时机:

  1. 首次进行数据同步
  2. 主节点不方便进行数据同步

部分复制时机:

  • 已完成首次数据同步, 因网络抖动或服务器重启(或其他原因) 需从主节点同步部分数据

全量复制流程

在这里插入图片描述

有磁盘复制 vs 无硬盘模式 (diskless)

对于4,5步, 有生成 rdb 文件和不生成 rdb 文件两种方式.
diskless: 将生成的 rdb 二进制数据, 直接传输给从节点, 不借助硬盘(文件), 这样会节省一系列读磁盘和写磁盘操作.


部分复制流程

在这里插入图片描述


实时复制

完成数据初始化操作后, 主从节点建立 TCP 长连接, 然后每次主节点接收到修改命令, 同步命令, 从节点根据命令修改自身数据

实时复制时如何保证连接正常 ---- 心跳包机制

  • 主节点: 每隔 10s 向从节点发一个 ping 命令, 从节点若 60s 内没有返回 pong 命令, 则认为连接异常
  • 从节点: 每隔 1s 向主节点发送特定请求, 上报自身同步数据进度 (offset)
  • 具体时间可修改 (10s / 60s / 1s)

从节点晋升为主节点时机

主从节点断开连接有两种情况

  1. 从节点主动断开连接: slaveof no one 命令 — 此时从节点会晋升为主节点
  2. 主节点挂了 — 从节点不能晋升, 必须人工干预
  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值