【Redis】Redis的复制

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis】Redis的复制

Redis支持简单的主从(master-slave)复制功能,当主Redis服务器更新数据时能将数据同步到从Redis服务器

image.png

配置

在Redis中使用复制功能非常容易


在从Redis服务器的redis.conf中写入slaveof masterip

masterport即可,主Redis服务器不需要做任何配置

在启动Redis服务器的时候,指定主服务器,redis-server --slaveof masterip masterport

在客户端指定主服务器,redis> SLAVEOF masterip

masterport,SLAVEOF命令会停止与原有主服务器的同步,转而向新主服务器进行同步

复制到 运行原理

当从Redis服务器启动时会向主Redis服务器发送SYNC命令,主Redis服务器接收到SYNC命令后开始进行RDB持久化,并将这期间接收到的写入操作命令都缓存起来,等RDB持久化完成后,将快照和缓存起来的命令一并发送给从Redis服务器,从Redis服务器接收到后开始载入快照和命令,这一过程称之为复制初始化。复制初始化完成后,每当主Redis接收到写入命令后,就会将命令同步给从Redis服务器,保证主从数据一致。

image.png

增量复制

在Redis2.8之前,主从断开重连后,一定会进行一次快照操作然后将快照发送给从数据库,即使断开期间只有几条命令被执行,这就使得断开重连后的数据恢复过程效率很低。在Redis2.8之后,主从断开重连后会根据断开之前最新的命令偏移量进行增量复制

1)主服务器在同步命令到从服务器的时候,会先将命令放入一个缓冲队列中并记录一个复制偏移量,同时主从服务器都会记录一个主服务器的运行ID。

2)当主从断开重连后,会判断主服务器保存的运行ID和从服务器发送过来的运行ID是否相同,相同则将从复制偏移量开始往后的所有命令一并发送给从服务器。如果不同,则进行一次复制初始化(将RDB快照和和这期间缓存起来的命令一并发送给主服务器)。

3)缓冲队列的大小默认是1MB,可以在redis.conf中的配置项repl-backlog-size进行设置,还有一个配置项repl-backlog-ttl,表示当主从断开后,缓冲队列的缓存时间。

image.png

命令传播

当完成了同步之后,主从服务器就会进入命令传播阶段,这时候主服务器只要一直将自己执行的写命令发送给从服务器,而从服务器只要一直接受并执行主服务器发来的写命令,就可以保证主从服务器一直保持一致了


心跳检测

在命令传播阶段,从服务器默认会以每秒一次的频率,向主服务器发送命令: REPLCONF ACK < replication offset>,其中 replication offset就是从服务器当前的复制偏移量.


总结

部分重同步通过复制偏移量、复制挤压缓冲区、服务器运行ID


三个部分来实现

在复制操作刚刚开始的时候,从服务器会成为主服务器的客户端,并通过向主服务器发送命令请求来执行复制步骤,而在复制操作的后期,主从服务器会互相成为对方的客户端。

主服务器通过向从服务器传播命令来更新从服务器的状态,保持主从服务器的一直,而从服务器则通过向主服务器发送命令来进行心跳检测,以及命令丢失检测。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 运维 负载均衡
Redis Cluster集群原理+三主三从交叉复制实战+故障切换
Redis Cluster集群原理+三主三从交叉复制实战+故障切换
2051 0
Redis Cluster集群原理+三主三从交叉复制实战+故障切换
|
NoSQL Redis
Redis下Lua脚本的复制模式
假设我们的Redis选择了主从架构, 和AOF持久化方式。我们执行一条写命令时, 该条命令会被发送到从服务器, 和追加到AOF文件中。当我们执行的不是一条命令, 而是Lua脚本时, 默认情况下, 整个Lua脚本的内容会进行复制, 但是存在一些特殊情况。
2203 0
Redis下Lua脚本的复制模式
|
存储 缓存 NoSQL
Redis学习 - 复制以及三种部署模式(下)
Redis学习 - 复制以及三种部署模式(下)
152 0
|
存储 运维 负载均衡
Redis Cluster集群原理+三主三从交叉复制实战+故障切换(十)
Redis Cluster集群原理+实战+故障切换 文章目录 Redis Cluster集群原理+实战+故障切换 1.redis cluster原理概念 1.1.cluster架构概念 1.2.redis cluster不合理的架构图 1.3.部署一个cluster三主三从集群具体步骤 1.4.环境准备 2.部署redis cluster节点 2.1.redis-1配置 2.2.redis-2配置 2.3.redis-3配置 2.4.查看redis cluster进程 2.5.查看集群信息文件内容 3.配置cluster集群互相发现 3.1.互相发现概念 3.2.将集群的所有节点进行互相发现
3952 0
Redis Cluster集群原理+三主三从交叉复制实战+故障切换(十)
|
存储 运维 监控
Redis学习 - 复制以及三种部署模式(上)
Redis学习 - 复制以及三种部署模式(上)
162 0
|
存储 NoSQL Redis
​Redis:在集合中复制键
问题描述: 由于某种原因,我必须需要将某个集合的键(Key)复制一份副本。并移动到目标库
231 0
​Redis:在集合中复制键
|
存储 NoSQL Redis
【Redis】全量复制和部分复制
【Redis】全量复制和部分复制
363 0
【Redis】全量复制和部分复制
|
JSON NoSQL 关系型数据库
JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。
309 0
JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
|
NoSQL Shell Redis
shell脚本一键部署——Redis(直接复制执行)亲测100% 有效
首先所需软件包拖进目录,然后编辑一个脚本,复制一下脚本,source执行一下即可
shell脚本一键部署——Redis(直接复制执行)亲测100% 有效