【Redis】Redis的复制
Redis支持简单的主从(master-slave)复制功能,当主Redis服务器更新数据时能将数据同步到从Redis服务器
配置
在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服务器,保证主从数据一致。
增量复制
在Redis2.8之前,主从断开重连后,一定会进行一次快照操作然后将快照发送给从数据库,即使断开期间只有几条命令被执行,这就使得断开重连后的数据恢复过程效率很低。在Redis2.8之后,主从断开重连后会根据断开之前最新的命令偏移量进行增量复制
1)主服务器在同步命令到从服务器的时候,会先将命令放入一个缓冲队列中并记录一个复制偏移量,同时主从服务器都会记录一个主服务器的运行ID。
2)当主从断开重连后,会判断主服务器保存的运行ID和从服务器发送过来的运行ID是否相同,相同则将从复制偏移量开始往后的所有命令一并发送给从服务器。如果不同,则进行一次复制初始化(将RDB快照和和这期间缓存起来的命令一并发送给主服务器)。
3)缓冲队列的大小默认是1MB,可以在redis.conf中的配置项repl-backlog-size进行设置,还有一个配置项repl-backlog-ttl,表示当主从断开后,缓冲队列的缓存时间。
命令传播
当完成了同步之后,主从服务器就会进入命令传播阶段,这时候主服务器只要一直将自己执行的写命令发送给从服务器,而从服务器只要一直接受并执行主服务器发来的写命令,就可以保证主从服务器一直保持一致了
心跳检测
在命令传播阶段,从服务器默认会以每秒一次的频率,向主服务器发送命令: REPLCONF ACK < replication offset>,其中 replication offset就是从服务器当前的复制偏移量.
总结
部分重同步通过复制偏移量、复制挤压缓冲区、服务器运行ID
- 三个部分来实现
- 在复制操作刚刚开始的时候,从服务器会成为主服务器的客户端,并通过向主服务器发送命令请求来执行复制步骤,而在复制操作的后期,主从服务器会互相成为对方的客户端。
- 主服务器通过向从服务器传播命令来更新从服务器的状态,保持主从服务器的一直,而从服务器则通过向主服务器发送命令来进行心跳检测,以及命令丢失检测。
相关文章
- Redis Desktop Manager连接Redis
- Redis安装完后redis-cli无法使用(redis-cli: command not found)
- PHP操作Redis数据库常用方法
- 使用 python 操作 redis
- Redis学习(8)-redis持久化
- Redis学习(3)-redis启动
- 3类数据库的联动:mysql、mongodb、redis
- spring boot单元测试之十:用embedded-redis库做Redis的mock(spring boot 2.4.3)
- 单点登录实现(spring session+redis完成session共享)
- 深入理解Spring Redis的使用 (一)、Spring Redis基本使用
- redis-cli -h xxxxx -p xxxx monitor 监控host为xxxx,端口为xxx,redis连接及读写操作
- Redis 客户端的管理 输入缓冲区
- Redis实战总结-配置、持久化、复制
- Redis广电直播行业解决方案,轻松应对业务高峰
- 常用网络js链接大全(jQuery(3.4.1)、bootstrap、vue、ECharts、easyUI、React、maven、Mybatis、Spring、SpringMVC、Redis)
- 【服务器安装Redis】Centos7离线安装redis
- 〖Python 数据库开发实战 - Python与Redis交互篇⑦〗- 利用 redis-py 实现缓存学生考试信息
- redis启动报错,需要关闭快照,报错-MISCONF Redis is configured to save RDB snapshots-解决
- Redis 和 Memcached 的区别 Tair
- redis扩展
- ASP.NET Core教程:ASP.NET Core中使用Redis缓存
- Redis Save 命令
- C/C++编程操作Redis数据库,hiredis包装redis数据库操作接口及测试(增删改查与连接)
- ASP.NET Core微服务(六)——【.Net Core操作redis】StackExchange.Redis
- Redis学习笔记
- Redis Cluster集群原理+三主三从交叉复制实战+故障切换(十)