Redis主从模式以及数据同步原理:全量数据同步、增量数据同步

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis主从模式以及数据同步原理:全量数据同步、增量数据同步

Redis有三种集群模式,分别是:主从模式、哨兵模式、Cluster模式

主从模式是三种模式中最简单的,在主从复制中分为主数据库(master)和从数据库(slave),若master出现宕机,需要手动配置slave转为master。

后来为了高可用提出来哨兵模式,可以选择出slave转为master,提升可用性,但不能动态扩充。

后来又有了cluster集群模式。

本文介绍主从模式,以及如何数据同步

一、主从复制

命令:redis-server --replicaof 127.0.0.1 7001

执行该命令后,当前服务器得redis-server就会成为127.0.0.1 7001的从数据库了,使用从数据库可以使得数据更加安全。从数据库具有只读属性,不能写。

主数据库要给从数据库同步数据才能使用,下面将介绍同步数据的方式

二、数据同步

1、全量数据同步

  1. 从数据库连接到主数据库
  2. 从数据库发送ping命令,主数据库回复pong命令
    发送ping主要是为了(相当于tcp的 keepalive 心跳包)检测主数据库是否有响应
  3. 从数据库发送一个同步命令,主数据库进行异步发送数据
    无论主数据采用aof还是rdb的持久化方式,在主从复制的时候都以rdb的数据格式进行复制
  4. 从数据库根据rdb调整内存后,发送给主数据库完成同步命令

2、增量数据同步

在从数据库连接着主数据库情况下,由于网络原因,某些数据出现主从不一致的情况,这时候可以容忍数据不一致的情况,通过设置环形缓冲区,将网络抖动时候的数据先写入环形缓冲区,从数据库会记录一个偏移值,在主数据库发送数据前,从数据库先把偏移值发送给主数据库,看偏移值是否在环形缓冲区中,然后再将环形缓冲区中偏移值到起始地址的数据发送到从数据库中

3、服务器 RUN ID

无论主库还是从库都有自己的 RUN ID,RUN ID 启动时自动产生,RUN ID 由40个随机的十六进

制字符组成;

当从库对主库初次复制时,主库将自身的 RUN ID 传送给从库,从库会将 RUN ID 保存;

当从库断线重连主库时,从库将向主库发送之前保存的 RUN ID;

  • 从库 RUN ID 和主库 RUN ID 一致,说明从库断线前复制的就是当前的主库;主库尝试执行 增量同步操作;
  • 若不一致,说明从库断线前复制的主库并不时当前的主库,则主库将对从库执行全量同步操作;

相比全量数据同步,增量数据同步还多了数据检查。从数据库连接主数据库,使用了runid,而不仅仅是ip、port,因为如果从数据库所在服务器宕机了,换了另一台,使用ip、port,那又怎么知道该增量多少呢,复制到哪个阶段,而使用runid可以唯一标识从数据库。

4、复制偏移量 offset

主从都会维护一个复制偏移量;

  • 主库向从库发送N个字节的数据时,将自己的复制偏移量上加N;
  • 从库接收到主库发送的N个字节数据时,将自己的复制偏移量加上N;

通过比较主从偏移量得知主从之间数据是否一致;偏移量相同则数据一致;偏移量不同则数据不一

致;

5、环形缓冲区

本质:固定长度先进先出队列;

存储内容:如下图;

当因某些原因(网络抖动或从库宕机)从库与主库断开连接,避免重新连接后开始全量同步,在主

库设置了一个环形缓冲区;该缓冲区会在从库失联期间累计主库的写操作;当从库重连,会发送自

身的复制偏移量到主库,主库会比较主从的复制偏移量:

  • 若从库offset还在复制积压缓冲区中,则进行增量同步;
  • 否则,主库将对从库执行全量同步;
# redis.conf
# 环形缓冲区的大小 为1mb
repl-backlog-size 1mb
# 如果所有从库断开连接 3600 秒后没有从库连接,则释放环形缓冲区
repl-backlog-ttl 3600

大小确定: disconnect_time * write_size_per_second

disconnect_time :从库断线后重连主库所需的平均时间(以秒为单位);

write_size_per_second :主库平均每秒产生的写命令数据量;

偏移量会出现环绕回去,变成0的情况吗?偏移量最大为2 64 2^{64}264,就算一天增加1个亿,也要好几千年,不会存在这种问题。

三、何时使用全量还是增量数据同步

相关实践学习
基于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
相关文章
|
25天前
|
存储 NoSQL 定位技术
Redis geo原理
Redis的GEO功能基于Earth Mapper(http://earth-api.org/)库,它允许存储地理位置信息并执行一些基于该信息的操作。
25 3
|
9天前
|
消息中间件 NoSQL Redis
【赵渝强老师】Redis消息的生产者消费者模式
消息队列在Redis中可通过List数据结构实现,支持发布者订阅者和生产者消费者两种模式。生产者通过`lpush`向List添加消息,消费者通过`rpop`或`brpop`消费消息,后者支持阻塞等待。示例代码展示了如何使用Redis的生产者消费者模式。
|
1月前
|
设计模式 NoSQL 网络协议
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
大数据-48 Redis 通信协议原理RESP 事件处理机制原理 文件事件 时间事件 Reactor多路复用
37 2
|
1月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
57 1
|
1月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
131 0
|
存储 NoSQL 网络安全
Redis安装(单机、主从、哨兵、集群)
Redis安装(单机、主从、哨兵、集群)
164 1
|
NoSQL Redis 数据安全/隐私保护
redis高可用环境搭建(主从+哨兵)
redis高可用环境搭建(主从+哨兵)
114 0
|
6月前
|
缓存 NoSQL 应用服务中间件
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
分布式缓存之Redis(持久化、主从、哨兵、分片集群)
|
NoSQL 编译器 Redis
轻松掌握组件启动之Redis单机、主从、哨兵、集群配置
这篇文章介绍了Redis的单机配置启动和主从架构、哨兵、集群搭建方法。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供实用的指导,让你轻松掌握Redis的配置和架构搭建。
138 0
|
NoSQL Redis