分布式Redis主备复制
当数据落在不同节点上时,如何保证数据节点之间的一致性是非常关键的
Redis采用主备复制的方式保证一致性,所有节点中,只有一个节点为主节点(master),它对外提供写服务,然后异步的将数据复制到其他节点上
主备复制流程
Redis包含master 和slave 2种节点:
master 对外提供写服务
slave 节点作为master的数据备份,不可以提供写服务
主备复制由master 主动触发
1、首先slave向master发起SYNC命令。这一步在slave启动后触发,master 被动的将新slave节点加入主备复制集群
2、master收到SYNC后,开启BGSAVE 操作。BGSAVE 是Redis的一种全量持久化机制(RDB)
3、BGSAVE完成后,master将快照信息发送给slave
4、发送期间,master收到来自Client的新写入命令,除了正常响应外,再存入一份到backlog队列
5、快照信息发送完成后,master继续发送backlog队列中的信息
6、backlog发送完成之后,后续的操作同时发给slave,保持实时的异步复制
对于上面的slave节点,处理逻辑如下:
发送完SYNC后,继续对外提供服务
开始接受master的快照信息,此时会清空slave现有数据,并将master快照写入
接收backlog 并执行(回放),期间对外提供读服务
继续接受master的命令副本,并继续回放,从而保持和master的数据一致性
如果有多个slave 同时发送SYNC 命令
只要第2个slave的SYNC 命令发生在master 完成BGSAVE之前,第2个slave 将和第1个收到相同的快照和backlog
否则第2个slave的SYNC将触发master的第2次BGSAVE
断点续传
当每次slave 通过SYNC 和master同步数据时,master都会dump 全量数据并发送
当一个已经和master 完成了同步,并且并保持了长时间的slave,当网络断开很短时间再重新连上时,master不得不重新做一次全量的dump传送。这种无疑会增加大量的无效开销,最好的方式是只同步网络断开期间的增量数据。
Redis的 PSYNC(Partial Sync)可以用于代替SYNC,做到master-slave基于断点续传的主备同步协议。master-slave 2端通过维护一个offset记录当前已经同步的命令,slave断开期间,master的增量命令会保存在缓存中。当slave重连后,告知master断开时的offset,master会将后续的数据继续同步,从而完成了断点续传。
分布式Redis主备复制的更多相关文章
- Redis主备复制
Redis 支持 Master-Slave(主从)模式,Redis Server 可以设置为另一个 Redis Server 的主机(从机),从机定期从主机拿数据.特殊的,一个从机同样可以设置为一个 ...
- 搭建和测试 Redis 主备和集群
本文章只是自我学习用,不适宜转载. 1. Redis主备集群 1.1 搭建步骤 机器:海航云虚机(2核4GB内存),使用 Centos 7.2 64bit 操作系统,IP 分别是 192.168.10 ...
- 如何在DCS管理控制台将两个Redis主备实例建立全球灾备。
华为云分布式缓存服务DCS,具有强大的功能,现在小编教大家如何在DCS管理控制台将两个Redis主备实例建立全球灾备. 建立全球灾备,会对主实例和备实例进行升级,实例进程会重启,连接会中断.同时备实例 ...
- mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...
- MySQL主备复制原理、实现及异常处理
复制概述 MySQL支持三种复制方式:基于行(Row)的复制.基于语句(Statement)的复制和混合类型(Mixed)的复制. 基于语句的复制早在3.23版本中就存在,而基于行的复制方式在5.1版 ...
- MySQL建立双向主备复制server配置方法
1.环境描写叙述 serverA(主) 192.85.1.175 serverB(从) 192.85.1.176 Mysql版本号:5.1.61 系统版本号:System OS:ubuntu 10.1 ...
- 阿里云ECS部署Redis主备哨兵集群遇到的问题
一.部署 详细部署步骤:https://blog.csdn.net/lihongtai/article/details/82826809 Redis5.0版本需要注意的参数配置:https://www ...
- 分布式Redis深度历险-复制
Redis深度历险分为两个部分,单机Redis和分布式Redis. 本文为分布式Redis深度历险系列的第一篇,主要内容为Redis的复制功能. Redis的复制功能的作用和大多数分布式存储系统一样, ...
- 【MySQL】主备复制
复制对于mysql的重要性不言而喻,mysql集群的负载均衡,读写分离和高可用都是基于复制实现.下文主要从4个方面展开,mysql的异步复制,半同步复制和并行复制,最后会简单聊下第三方复制工具.由于生 ...
随机推荐
- Hive JOIN使用详解
转自http://shiyanjun.cn/archives/588.html Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL.有了Hive,如果使用过SQL语言,并且不理解 ...
- HOJ 2226&POJ2688 Cleaning Robot(BFS+TSP(状态压缩DP))
Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4264 Accepted: 1713 Descri ...
- CodeForces 17D Notepad(同余定理)
D. Notepad time limit per test 2 seconds memory limit per test 64 megabytes input standard input out ...
- 导出Excel过程中遇到的问题java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException
尝试实现java导出功能时遇到如下报错: org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.No ...
- HDU_3193_Find the hotel
Find the hotel Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Android NDK 导出独立工具链
传统方式调试 NDK 开发的程序比较麻烦,先要编译成 JNI,又要导出 java接口,还要再写一个 java 工程,改一个地方又要连续改几处,这样效率是很低的.最频繁使用的关键工作路径(编译/调试环节 ...
- modelform动态显示select标签的对象范围
既根据当前登录人,动态显示对象相关的的select的选项,例如 A登录,只显示A的客户,B登录,只显示B自己的客户 先了解form的ModelChoiceField字段(这个表格没意义,就是引出参数q ...
- SQL: 查找空值
①用 IS NULL ②NULL 不能用 “=” 运算符 ③NULL 不支持加.减.乘.除.大小比较.相等比较 ④不同的函数对NULL的支持不一样,在遇到NULL时最好测试一下结果会受什么影响,不能仅 ...
- http://www.kankanews.com/ICkengine/archives/18078.shtml
https://github.com/lealife/WeiXin-Private-API
- Union、Union All、Intersect、Minus用法和区别
假设我们有一个表Student,包括以下字段与数据: [c-sharp] view plain copydrop table student; create table student ( ...