前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式Redis主备复制主备复制流程断点续传

分布式Redis主备复制主备复制流程断点续传

作者头像
JavaEdge
发布2018-08-22 16:42:47
1.1K0
发布2018-08-22 16:42:47
举报
文章被收录于专栏:JavaEdge

当数据落在不同节点上时,如何保证数据节点之间的一致性是非常关键的 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会将后续的数据继续同步,从而完成了断点续传。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主备复制流程
    • 对于上面的slave节点,处理逻辑如下:
    • 断点续传
    相关产品与服务
    云数据库 Redis®
    腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档