分布式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的异步复制,半同步复制和并行复制,最后会简单聊下第三方复制工具.由于生 ...
随机推荐
- mysql如何查询日期的列表?
转自:http://blog.csdn.net/liufei198613/article/details/72643345 select @num:=@num+1,date_format(adddat ...
- angularJS的过滤器!
angularJS过滤器: filter currency date filter json limitTo lowercase number orderBy uppercase ...... Fil ...
- JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金)
第一: 限制只能是整数 <input type = "text" name= "number" id = 'number' onkeyup= " ...
- 安卓中通知(Notification)的基本使用方法
1. 通知的使用场合 当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的 ...
- java 中的& &&区别以及 C++ 中& &&的区别
java中的 & &&两个运算符 (1).&在java中称做: 逻辑与 判断boolean类型,只有两者都是true时,才会返回true 举例: boolean b1= ...
- 使用colmap进行稠密重建
colmap应该是目前state-of-art的增量式SFM方案,可以方便的对一系列二维图片进行三维重建 不用对摄像机进行标定,只需要从不同角度对重建场景或物体进行拍摄得到一系列图像作为输入 首先需要 ...
- handle exceptions, opening and closing database connections
https://www.tutorialspoint.com/spring/spring_jdbc_framework.htm Spring - JDBC Framework Overview Whi ...
- python为什么需要reload(sys)后设置编码
python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't deco ...
- 使用wireshark分析TLS
1.基本概念 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密 ...
- 第1章 1.3计算机网络概述--规划IP地址介绍MAC地址
IP地址的作用是:指定发送数据者和接收数据者. MAC地址的作用:指定数据包的下一跳转设备.就是说明数据下一步向谁发. 路由器的作用:在不同的网段中转发数据.路由器本质就是有2个网卡的设备. 网卡:用 ...