Redis(主从模式)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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
目录
相关文章
|
6月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
6月前
|
NoSQL Java Redis
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
分布式锁实现原理问题之使用Redis的setNx命令来实现分布式锁问题如何解决
104 0
|
7月前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
136 4
|
7月前
|
缓存 运维 NoSQL
Redis主从模式部署
Redis主从模式部署
73 4
|
7月前
|
运维 监控 NoSQL
Redis Sentinel哨兵模式部署
Redis Sentinel哨兵模式部署
135 2
|
7月前
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
89 0
|
7月前
|
缓存 NoSQL Redis
Redis主从架构
当看到图示中红色标记的,就代表从节点挂载成功了。
49 0
|
2月前
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis消息的生产者消费者模式
消息队列在Redis中可通过List数据结构实现,支持发布者订阅者和生产者消费者两种模式。生产者通过`lpush`向List添加消息,消费者通过`rpop`或`brpop`消费消息,后者支持阻塞等待。示例代码展示了如何使用Redis的生产者消费者模式。
|
3月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
98 4
|
3月前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
38 2