分布式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会将后续的数据继续同步,从而完成了断点续传。

Android 系统(273)---分布式Redis主备复制相关推荐

  1. MySQL主备复制原理、实现及异常处理

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. MySQL建立双向主备复制server配置方法

    1.环境描写叙述 serverA(主) 192.85.1.175 serverB(从) 192.85.1.176 Mysql版本号:5.1.61 系统版本号:System OS:ubuntu 10.1 ...

  3. mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

    数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境. 主要思路 简单说,实现mysql主备复制-->利用mycat实现负载均衡. 比较了 ...

  4. Linux下Redis-3.0.7版本的安装以及Redis主备的部署(二)

    在上一篇文章中,我们介绍了redis的安装以及开机自启动的设置和测试等工作,在接下来将要介绍redis主备的部署,同时将对上面有些遗漏的问题进行补充说明. (1)redis在直接make完就可以使用的 ...

  5. Redis主备+哨兵

    虽然Redis有持久化功能保障Redis服务器宕机也能恢复并且只有少量数据损失,但由于所有数据都在一台服务器上,如果服务器出现硬盘故障,那就算有备份也不能避免数据丢失的问题.而且在实际生产环境中,我们 ...

  6. redis主备同步(使用)

    2019独角兽企业重金招聘Python工程师标准>>> 本文演示了一个最简单的主备同步的例子, 在一台服务器上,启动两个redis服务,一个master,一个slave. 一.配置文 ...

  7. 分布式Redis深度历险-复制

    Redis深度历险分为两个部分,单机Redis和分布式Redis. 更多文章见个人博客:github.com/farmerjohng- 本文为分布式Redis深度历险系列的第一篇,主要内容为Redis ...

  8. Linux下Redis-3.0.7版本的安装以及Redis主备的部署(一)

    一.基本工具 (1)      虚拟机两台(做好快照) CentOS 6.6   192.168.1.146 CentOS 6.7   192.168.1.147 (2)      软件包 redis ...

  9. ODPS主备集群双向数据复制导致主备中心网络打爆问题

    简介:ODPS主备集群双向数据复制导致主备中心网络打爆问题 1. 故障问题描述 客户现场发生了ODPS主备机房相互数据全量复制导致的主备中心网络被打爆的问题,严重影响了日常运行的ODPS任务.在ODP ...

最新文章

  1. GridView自定义分页导航
  2. RDKit | 基于RDKit和化学信息学探索化学空间
  3. 英语影视台词---八、the shawshank redemption
  4. .net微信公众号开发——基础接口
  5. pip 换清华源 更新所有库 windows
  6. Android 学习之路
  7. 单例模式的懒汉模式和饿汉模式
  8. android抠图软件,手机抠图软件
  9. 串联型直流稳压电源制作(800个电子设计案例)
  10. 服务器linux杀网页木马,一次Linux服务器木马查杀经历
  11. 服务器被ddos攻击,防止DDOS攻击?
  12. pytest tox.ini使用
  13. 上亿用户,如何高效统计独立用户访问量?
  14. 卡尔曼(Kalman)滤波 C++
  15. 二元选择模型:Probit还是Logit?
  16. codeforces C. Ehab and Path-etic MEXs
  17. uni-app - 拨打电话功能(在不同平台下,点击按钮触发一键拨号功能)
  18. 大数据分析师的卓越之道
  19. 如何用Python检查回文对联(字符串)
  20. 给在北漂准备租房的菜鸟一点建议

热门文章

  1. php5.4 升级,centos上PHP5.3升级到PHP5.4及更高版本方法
  2. JavaScript重难点解析2(立即执行函数IIFE,this关键字)
  3. php易错,PHP学习1:几种常见数据类型及其易错点
  4. 【重难点】【Redis 03】缓存雪崩、缓存穿透、缓存击穿、Redis 的内存过期策略、并发读写和双写
  5. 《深入理解 Spring Cloud 与微服务构建》第一章 微服务简介
  6. 【小项目】Axios 实现前后端交互
  7. SqlServer显示“正在还原...”
  8. Inside ARC — to see the code inserted by the compiler
  9. ruby-gems 常用命令笔记
  10. Powershell调用静态方法