Redis复制功能简述
来源:互联网 发布:python写爬虫 编辑:程序博客网 时间:2024/06/07 22:38
目录 (Table of Contents)
[TOCM]
- 介绍
- 流程
- 旧版功能实现
- 同步
- 命令传播
- 功能缺陷
- 新版本功能实现
- 重同步的实现
- 复制偏移量
- 复制积压缓冲区
- 服务器运行ID
- 重同步的实现
- 心跳检测
介绍
在Redis中,用户可以通过执行SLAVEOF命令或者设置salveof选线,让一个从服务器去复制主服务器。进行复制中的主从服务器双方的数据将保存相同的数据。
流程
旧版功能实现
Redis的复制功能分为同步和命令传播两个操作。
同步
同步就是从服务器根据获得的主服务其的RDB文件文件,将数据库状态跟新到和主服务器一致。
命令传播
在同步流程之后,主服务器讲自己执行的写命令发送给从服务器执行。
功能缺陷
旧版本能很好完成初次复制工作,但是对于短线后重复制来说,效率很低,因为每次都要重新导入RDB文件
新版本功能实现
新版本的PSYNC命令具有完整重同步和部分重同步两种模式。
完整重同步:用于初次处理复制情况,和SYNC命令执行步骤基本一致
部分重同步:在SYNC命令的基础上,当服务器断线重连之后,如果条件允许,主服务器可以将从服务器连接断开期间的执行的写命令发送给从服务器。
重同步的实现
复制偏移量
主从服务器维护一个偏移量,偏移量用来记录主服务器发送给从服务器的命令的字节数。这样通过判断偏移量就知道主从服务器是否一致。
复制积压缓冲区
由主服务器维护的一个固定长度,先进先出的队列(结构是list),默认大小1M(可配置)。保存了一部分最近传播的写命令,并为每个字节记录相应的复制偏移量。
当服务器重新连上时,从服务器会通过PSYNC命令将自己的偏移量发送给主服务,如果两者偏移量不一致,主服务器就会检查积压缓冲区中是否还保存的丢失的那些命令。如果有就向从服务器发送+CONTINUE回复,表示数据同步将以部分重同步模式来进行,然后把哪些命令发送给从服务器。
服务器运行ID
每个服务器有一个自己的运行ID,重连之后,从服务器会给主服务器发送之前保存的主服务器的运行ID,这样主服务就知道之前的ID是不是自己的,如果是的话就执行部分重同步。如果不是的话执行完整重同步。
心跳检测
主服务器通过发送和接收REPLCONF ACK命令来检查两者之间的网络是否正常:如果主服务器超过一秒钟没有收到从服务器发送的REPLCONF ACK命令,那么主服务器就知道出问题了。
当我们想了解连接状态时,可以向主服务器发送INFO replication命令,会显示出从服务器信息,lag字段表明了距离从服务器最后一次向主服务器发送REPLCONF ACK命令距离现在多少秒。超过1秒说明出现连接故障。
- Redis复制功能简述
- Redis的复制功能
- Redis简述
- Redis简述
- Redis简述
- Redis简述
- Redis 简述
- Redis 学习笔记(十二)Redis 复制功能详解
- redis学习系列(十一)--redis-复制功能
- redis学习系列(十一)--redis-复制功能实践
- Redis 学习笔记(十二)Redis 复制功能详解
- Redis的复制功能以及Redis复制机制本身的优缺点以及集群搭建问题
- redis 复制功能测试(转阿辉的百度空间)
- Redis 事件简述
- Redis集群原理简述
- redis简述及安装
- Redis复制
- redis复制
- 获取Jenkins project build结果
- Java和PHP在Web开发方面的八大对比
- bootstrap-suggest-plugin (bsSuggest) 联想搜索插件之——中文字符在IE下POST 时乱码现象解决方案
- 把排序数组转换为高度最小的二叉搜索树
- grails框架下修改acegi权限框架的加密方式
- Redis复制功能简述
- typedef相关
- Python函数调用“传引用”还是”传值“
- Qt下使用OpenCV2.3.1静态编译报错,解决过程记录
- 计算机基础之牛客网刷题第二篇
- For artifact {null:null:null:jar}: The groupId cannot be empty解决办法
- OV9712+3518EV200
- 哈希标记取代(KMP和AC自动机)poj3690
- swift3.0 closure 闭包 定义属性 赋值 调用