Redis 数据同步

全量同步

redis 从节点第一次连接主节点采用的是全量同步,包括两个阶段:
第一阶段:

  • 从节点执行slaveof命令和主节点建立了连接,然后发送同步请求;
  • 主节点收到消息判断是否是第一次请求,如果是,将数据版本信息发送给从节点;
  • 从节点存储存储数据版本信息;

第二阶段:

  • 主节点后台 fork 子进程生成 RDB;
  • 将生产的 RDB 文件发送给从节点;
  • 由于在记录 RDB 的同时会生成指令,主节点将这部分指令存储到repl_baklog;
  • 将 repl_baklog 的指令发送到从节点;从节点进行存储;
数据同步原理

全量同步过程有一个问题:主节点如何判断一个从节点是第一次同步数据

实际上每一个 redis 节点都会有一个 replication id ,称为数据集ID。从节点第一次请求主节点,会带上 replication id,主节点收到从节点 replication id,和自己的 replication id 对比,如果不相同说明是第一次请求同步数据,主节点将自己的 replication id 发送给从节点,从节点存储主节点的 replication id,从节点后续请求再带上该 replication id。

此外,主节点如何知道每次从 repl_baklog 中获取哪部分数据同步从节点?

实际上主节点向从节点同步数据时,会带上两个个参数:replication id 和 offset, offset 标记每次复制数据的偏移量。往后同步从节点带上 replication id 和 offset 即可。

增量同步

增量同步一般发生在重启阶段:

  • 从节点带上 replication id 和 offset 向主节点请求同步;
  • 主节点根据 replication id 判断是否和自己的一致;如果一直则回复继续;
  • 主节点从 repl_baklog 中取出数据,同步到从节点;
  • 从节点接收之后存储指令;

增量同步过程中需要注意一个问题:repl_baklog 是一个循环数组,offset 是主节点和从节点同步内容的偏移量。由于 repl_baklog 是一个循环数组,当从节点停止过长时间,旧数据会被新数据覆盖,这时候只能做全量同步。

主从同步优化

可以从这几个方面来优化主从集群:

  • 在 master 中配置 repl-diskless-sync yes 启动无磁盘复制,避免全量同步时的磁盘IO;
  • Redis 单节点的内存占用不要太大,减少 RDB 导致的过多磁盘IO;
  • 适当提高repl_baklog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步;
  • 限制一个 master 的 slave 节点,如果需要较多的 slave,可以采用主-从-从链接模式;

Redis 主从数据同步相关推荐

  1. 生产环境主从数据同步不了?

    生产环境主从数据同步不了? 经历过程: 一般我们常常在做主从复制的时候,可能是很少遇到到错误,那都是因为,你做主从基本用的是,本地虚拟机做,或者一些测试环境做.但是当我们把主从复制部署到生成环境就出问 ...

  2. mysql主从同步默认延迟_减少mysql主从数据同步延迟问题的详解

    基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素: 1. 网络延迟 2. master负载 3. slave负载 一般的做法是 ...

  3. 减少mysql主从数据同步延迟问题的详解

    基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素:  1. 网络延迟 2. master负载 3. slave负载 一般的做法 ...

  4. DNS服务器(DNS服务器构建,特殊的解析记录,多域名DNS服务器架构,DNF主从架构,DNS主从数据同步)

    学前提示: 需要两台虚拟机 虚拟机A:主机名位svr7 IP:192.168.4.7 虚拟机B:主机名pc207 IP:192.168.207 一.进行环境的设置 1.修改两台虚拟机的SELinux ...

  5. Postgres主从数据同步

    目录 Postgres数据备份的三种方式及比较... 1 ① Archive. 1 ② 流复制... 1 ③ 逻辑复制... 1 流复制... 1 ① 原理... 1 ② 配置... 3 1. 修改主 ...

  6. Redis主从数据不一致及读取过期数据问题的解决方案

    主从数据不一致问题 因为主从库间的命令复制是异步进行的,所以有可能客户端从从库中读取到的值和主库中的最新值并不一致. 具体来说,在主从库命令传播阶段,主库收到新的写命令后,会发送给从库.但是,主库并不 ...

  7. Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

    目录 1, 环境 2, Redis简介 3, Gearman简介 4, MySQL - Redis配合使用方案 4, 软件安装 5, MySQL UDF + Trigger同步数据到Gearman 6 ...

  8. windows配置mysql8.0主从数据库,主从数据同步。

    本地配置两个mysql8.0数据库用作主从数据库,同一个服务器安装多个mysql服务,只要端口不一样. 1.下载安装包 mysql下载地址:https://dev.mysql.com/download ...

  9. gearman mysql redis_gearman redis mysql 数据同步

    一.mysql数据库操作: [root@localhost html]# mysql -u root -p mysql> create database mytest; mysql> CR ...

最新文章

  1. javascript tab切换类LixTabs最新版
  2. 观点 | 医疗AI:新瓶装旧酒VS新瓶装新酒?——道彤投资创始合伙人孙琦
  3. SAP SD基础知识之SD常见流程概述
  4. IBatis手动刷新缓存
  5. 博士在淘宝“扫垃圾”
  6. C#之foreach语句
  7. 读《我们应当怎样做需求分析》后
  8. hashcode值一样对象一定相同吗_硬核问题,为什么重写equals()就要重写hashCode()?
  9. ORL 人脸库 BP神经网络人脸识别
  10. WindowsBuilder安装使用
  11. PDF复制文本快速去除换行,解决段落错乱
  12. UE4 蓝图 循环调用
  13. 博思得标签打印机驱动_博思得打印机驱动
  14. python如何取消上一步操作的快捷键_ai返回上一步的快捷键是什么
  15. vivado仿真无法运行,停滞,跑不下去的一种解决办法
  16. h5调用Android、ios的方法
  17. html图片怎么做成链接,HTML的链接代码怎么做?HTML的图片链接怎么制作?
  18. php检测wifi,WFilter插件 - 随身wifi和私接路由检测
  19. java获得对象类名_获取Java中各种对象的类名
  20. 记录微信获取平台证书支付错误 错误的签名,验签失败

热门文章

  1. 图像传感器噪声建模与分析
  2. 360极速浏览器安装谷歌浏览器插件.CRX报CRX_VERSION_NUMBER_INVALID问题的解决
  3. 商业世界的革新,数字化转型的“顶层设计”
  4. 半导体材料 MOOC学习记录 第十四章 新型半导体材料SiC
  5. 企业架构治理指什么,如何做?
  6. ios h5 长按放大镜效果关闭
  7. Wireless Image Transmission Using Deep SourceChannel Coding With Attention Modules 阅读2021
  8. EPICS记录参考--Histogram记录(histogram)
  9. Word基础(七)文字添加拼音
  10. python 工具变量回归_stata工具变量法一例:使用2SLS进行ivreg2估计及其检验