Redis主从复制原理和复制方式详解(4)
Redis主从复制原理和复制方式详解

增量复制
我们知道在第一次全量复制后,主从之间使用长连接进行命令传播,但是如果网络出现问题,出现闪断(断了一会又恢复了)那麻烦了,用户可能从salve读到旧数据。
这种情况下Redis 2.8开始会采用增量复制的方式继续同步,如下图流程:

问题的关键在于如何知道哪些数据作为增量发送给slave,在分析之前我们先了解几个概念:
- •复制偏移量 (replication offset)
- •复制积压缓冲区 (replication backlog)
- •服务器运行ID (runID)
复制偏移量 ( replication offset)
主从节点都维护这一个复制偏移量,它代表着当前节点接受数据的字节数,注意这里表示的是【字节数】

上图中master和slave的offset一开始是相等的,可以理解为数据一致,但是master此时增加了6个字节数据,此时需要向salve传播长度为6字节的数据,从而保持主从数据的一致,offset一致。
⏰ 想要知道主从是否一致,通过对比offset,也能知道
复制积压缓冲区 ( replication backlog buffer )
复制积压缓冲区是由master维护的一个固定长度的环形缓冲区、是先进先出(FIFO)队列,默认大小为 1MB。

在命令传播阶段,除了发送命令给salve之外,还会写入到复制积压缓冲区,此时salve还会做一个重要的事情,发送 REPLCONF ACK 命令给master,传递 replication_offset(slave当前的复制偏移量),这个命令有三个作用:
- 检测主从服务器的网络状态
- 辅助实现 min-slaves 选项
- 检测命令丢失
服务器运行ID (runID)
不论主从都会有自己的运行ID,在Redis服务器启动时会自动生成,由40个随机16进制字符组成,第一次复制master会发送这个ID给到slave,而断线重连时slave会带上这个ID发送给master!
了解这些知识后,我们再理一理,在网络短暂断开后,salve重新连上master时,salve会通过 psync 命令将自己的复制偏移量 offset 发送给master,而master根据自己的offset 和 slave的offset 之间的差距,然后来决定对salve执行哪种同步操作。
- 判断出salve要读取的数据还在 replication_backlog_buffer 里,那么主服务器将采用增量同步的方式;
- 判断出读取的数据已经不存在 replication_backlog_buffer 里 (比如被覆盖掉了),那么主服务器将采用全量同步的方式
replication_backlog_buffer 大小只有1M,数据被覆盖的概率挺大,该如何配置避免呢?
replication_backlog_buffer 最小的大小可以这样估算
repl_backlog_buffer = second * write_size_per_second
- second 为salve断线后重新连接上master所需的平均 时间(以秒计算)。
- write_size_per_second 则是master平均每秒产生的写命令数据量大小
这个配置我们看情况去定,这个参数在配置文件中如下,我们可以去修改它
repl-backlog-size 1mb
主从复制配置
配置方式
进行配置主从复制还是比较简单的,可以用 两种方式:
- 1.在从服务器中添加配置 slaveof选项,不过在5.0版本中使用了replicaof 代替了slaveof,虽然 slaveof可以继续使用,建议使用 replicaof
- 2.直接使用 slaveof命令
# redis.conf文件进行主从配置
# replicaof <masterip><masterport>
replicaof 192.168.127.20 6379
配置好 redis.conf之后,我们分别启动主从服务器,可以用户命令info replication查看复制信息
AUTH设置密码
如果需要在 slave对master的建立连接是进行验证,可以在master中配置requirepass选项设置密码
那么需要在从服务器salve中使用该密码,可以使用命令config set masterauth,或者在配置文件中设置masterauth
总结
进行主从复制之前需要master和slave进行连接,只有连接成功之后才能进行后续的复制动作。
在主从服务器发送 pysnc 进行第一次同步的时候,采用的是全量复制,而在同步完成之后,主从服务器都会维护着一个长连接,主服务器在接收到新的写操作命令后,通过这个连接发送给从服务器,从而保持数据的一致性。
如果遇到网络闪断情况,此时就进行增量复制,不过需要确定复制积压缓冲区是否覆盖等情况才决定是进行全量还是增量复制
以上IT袋网网介绍的Redis主从复制原理和复制方式详解的IT小知识讲解,希望为您的生活带来一点小帮助!
相关阅读
-
Redis面试宝典:热门面试问题及答案解析
一篇IT技术小知识,为您介绍Redis面试宝典IT技巧方面的经验,下面为详细的介绍。 在许多软件工程面试中,Redis是一个常见的主题。 作为一种高性能的键值数据库,了解Redis的核心概念和使用
-
什么是服务降级和熔断
为网友解答什么是服务降级和熔断的相关经验,接下来IT袋网小编就来介绍。 降级 降级是解决系统资源不足和海量业务请求之间的矛盾 在暴增的流量请求下,对一些非核心流程业务、非关键业
-
深圳建设网站公司有哪些 关于深圳网站设计推荐
为网友们详解深圳建设网站公司有哪些和关于深圳网站设计推荐方面的知识,很不错的方法小知识,建议收藏哦! 网站已是一个企业数字营销的核心部件,甚至是一家企业的战略资产,所有企
-
mysql数据库同步流程步骤 数据库同步差异化处理方法
全面为您解析mysql数据库同步流程步骤的话题,接下来IT袋网小编就来介绍。 MySQL数据库同步通常指将一个数据库服务器(称为主服务器)上的数据同步到另一个或多个数据库服务器(称为从服


