Redis(主从模式)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis(主从模式)

什么是 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 标识了一个数据集合

  • 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. 主节点挂了 — 从节点不能晋升, 必须人工干预

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
8天前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
31 4
|
8天前
|
缓存 运维 NoSQL
Redis主从模式部署
Redis主从模式部署
33 4
|
8天前
|
运维 监控 NoSQL
Redis Sentinel哨兵模式部署
Redis Sentinel哨兵模式部署
31 2
|
20小时前
|
NoSQL Java 关系型数据库
考考你Redis主从,就知道有没深入Redis
大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天继续给大家带来新的一篇Java进阶指南。如果是单机版的数据库,像MySQL、Redis,看起来实现并不复杂。只要支持保存一条数据,同时要能够查询出来。但如果是多机版的数据库呢,各个节点的配合联调是比较复杂的过程,看起来就不是那么简单喽。要考你对Redis深不深入理解,问问Redis多机版相关的问题就知道了。我们今天就来指南下Redis主从架构。
16 0
考考你Redis主从,就知道有没深入Redis
|
1月前
|
监控 NoSQL 算法
Redis集群模式:高可用性与性能的完美结合!
小米探讨Redis集群模式,通过一致性哈希分散负载,主从节点确保高可用性。节点间健康检测、主备切换、数据复制与同步、分区策略和Majority选举机制保证服务可靠性。适合高可用性及性能需求场景,哨兵模式则适用于简单需求。一起学习技术的乐趣!关注小米微信公众号“软件求生”获取更多内容。
203 11
Redis集群模式:高可用性与性能的完美结合!
|
25天前
|
存储 负载均衡 监控
redis 集群模式(redis cluster)介绍
redis 集群模式(redis cluster)介绍
|
11天前
|
NoSQL Redis
Redis主从结构,主库宕机,解决
Redis主从结构,主库宕机,解决
14 0
|
1月前
|
监控 NoSQL Redis
Redis分区容错秘诀:解密主从模式
Redis主从模式用于提高高可用性、负载均衡和数据备份。主节点处理写入,从节点复制数据并分担读取,实现故障切换和读写分离。配置主从关系后,从节点连接主节点进行全量和增量复制。当主节点故障,从节点可接管服务。然而,主从延迟和数据不一致性是挑战,可通过优化网络、使用Sentinel和Redis Cluster等解决。关注“软件求生”获取更多内容。
153 1
Redis分区容错秘诀:解密主从模式
|
1月前
|
缓存 NoSQL 中间件
【后端面经】【缓存】36|Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?epoll、poll和select + Reactor模式
【5月更文挑战第19天】`epoll`、`poll`和`select`是Linux下多路复用IO的三种方式。`select`需要主动调用检查文件描述符,而`epoll`能实现回调,即使不调用`epoll_wait`也能处理就绪事件。`poll`与`select`类似,但支持更多文件描述符。面试时,重点讲解`epoll`的高效性和`Reactor`模式,该模式包括一个分发器和多个处理器,用于处理连接和读写事件。Redis采用单线程模型结合`epoll`的Reactor模式,确保高性能。在Redis 6.0后引入多线程,但基本原理保持不变。
41 2
|
17天前
|
消息中间件 NoSQL Linux
详解Redis的主从同步原理
只不过在主节点中叫做master_repl_offset; 从节点也有一个偏移量叫做slave_repl_offset,用来记录从节点已经从主节点的repl_backlog_buffer中同步到的最新写指令的位置;
169 0

热门文章

最新文章