Redis 主从复制架构搭建与原理_redis主从搭建原理

本文详细阐述了Redis主从复制的机制,包括slave与master之间的ping-pong心跳检测,密码验证,以及数据同步的全量和增量过程,重点讲解了偏移量和运行id在同步中的作用。
摘要由CSDN通过智能技术生成

5)slave与master之间周期性的发送ping心跳,检查slave与master之间是否通信正常。

6)master接收到slave的ping心跳后会给对应的slave响应pong。

7)slave发送本机设置的master密码masterauth来到master进行验证(master有设置密码的情况下)。

8)master进行身份识别,如果身份错误则端口此slave的socket通道,并尝试重新连接。服务器端报如下错误:

MASTER aborted replication with an error: NOAUTH Authentication required.

9)master身份识别成功后slave会将自己的ip、端口等信息发送到master,master将保存此slave的ip、端口以及一些其他状态信息,记录在info Replication。

  • 主从复制命令:

slave连接master,在slave的客户端输入如下命令:

slaveof <masterip> <masterport>

示例:

127.0.0.1:6379> slaveof 192.168.170.142 6379
OK
127.0.0.1:6379> 

如果master设置了密码,那么在slave服务器启动的时候就要指定master的密码:

redis-server ../config/redis-6379.conf --masterauth admin

分别查看slave与master启动日志:

  • master日志:
23305:M 11 Apr 10:24:20.225 * Slave 127.0.0.1:6479 asks for synchronization
23305:M 11 Apr 10:24:20.225 * Partial resynchronization not accepted: Replication ID mismatch (Slave asked for '18b61ced5990337dd8377e8bf81fcd2b20e7d399', my replication IDs are 'fa4d40f8562c10acbbd7a9955a88f7cd6dc33182' and '0000000000000000000000000000000000000000')
23305:M 11 Apr 10:24:20.225 * Starting BGSAVE for SYNC with target: disk
23305:M 11 Apr 10:24:20.225 * Background saving started by pid 23339
23339:C 11 Apr 10:24:20.227 * DB saved on disk
23339:C 11 Apr 10:24:20.227 * RDB: 2 MB of memory used by copy-on-write
23305:M 11 Apr 10:24:20.315 * Background saving terminated with success
23305:M 11 Apr 10:24:20.315 * Synchronization with slave 127.0.0.1:6479 succeeded

  • slave日志:
23279:S 11 Apr 10:24:20.224 * Connecting to MASTER 127.0.0.1:6379
23279:S 11 Apr 10:24:20.224 * MASTER <-> SLAVE sync started
23279:S 11 Apr 10:24:20.224 * Non blocking connect for SYNC fired the event.
23279:S 11 Apr 10:24:20.224 * Master replied to PING, replication can continue...
23279:S 11 Apr 10:24:20.224 * Trying a partial resynchronization (request 18b61ced5990337dd8377e8bf81fcd2b20e7d399:1).
23279:S 11 Apr 10:24:20.226 * Full resync from master: f1d39130cfadf4b3e0eb192e4143ae6bcb01677b:0
23279:S 11 Apr 10:24:20.226 * Discarding previously cached master state.
23279:S 11 Apr 10:24:20.315 * MASTER <-> SLAVE sync: receiving 176 bytes from master
23279:S 11 Apr 10:24:20.315 * MASTER <-> SLAVE sync: Flushing old data
23279:S 11 Apr 10:24:20.315 * MASTER <-> SLAVE sync: Loading DB in memory
23279:S 11 Apr 10:24:20.316 * MASTER <-> SLAVE sync: Finished with success
23279:S 11 Apr 10:24:20.316 * Background append only file rewriting started by pid 23340
23279:S 11 Apr 10:24:20.356 * AOF rewrite child asks to stop sending diffs.
23340:C 11 Apr 10:24:20.356 * Parent agreed to stop sending diffs. Finalizing AOF...
23340:C 11 Apr 10:24:20.356 * Concatenating 0.00 MB of AOF diff received from parent.
23340:C 11 Apr 10:24:20.356 * SYNC append only file rewrite performed
23340:C 11 Apr 10:24:20.357 * AOF rewrite: 6 MB of memory used by copy-on-write
23279:S 11 Apr 10:24:20.426 * Background AOF rewrite terminated with success
23279:S 11 Apr 10:24:20.426 * Residual parent diff successfully flushed to the rewritten AOF (0.00 MB)
23279:S 11 Apr 10:24:20.426 * Background AOF rewrite finished successfully

  • 当master宕机后slave会一直尝试连接Master,日志信息如下:
29511:S 11 Apr 10:37:37.567 # Error condition on socket for SYNC: Connection refused
29511:S 11 Apr 10:37:38.577 * Connecting to MASTER 127.0.0.1:6379
29511:S 11 Apr 10:37:38.577 * MASTER <-> SLAVE sync started
29511:S 11 Apr 10:37:38.577 # Error condition on socket for SYNC: Connection refused
29511:S 11 Apr 10:37:39.587 * Connecting to MASTER 127.0.0.1:6379
29511:S 11 Apr 10:37:39.587 * MASTER <-> SLAVE sync started
29511:S 11 Apr 10:37:39.587 # Error condition on socket for SYNC: Connection refused
29511:S 11 Apr 10:37:40.597 * Connecting to MASTER 127.0.0.1:6379
29511:S 11 Apr 10:37:40.597 * MASTER <-> SLAVE sync started
29511:S 11 Apr 10:37:40.597 # Error condition on socket for SYNC: Connection refused
29511:S 11 Apr 10:37:41.606 * Connecting to MASTER 127.0.0.1:6379

slave端口与master的连接(断开与master连接后,slave不再接收master的同步数据):

slaveof no one

1.2.2 数据同步阶段
1.2.2.1 工作流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wZ0lwAAh-1586788518676)(media/33.png)]

在master与slave建立连接成功后,开始数据同步。

1)slave发送psync2(psync1、sync)指令给master,需要同步时数据

2)master接到指令后开始执行bgsave指令,并创建复制积压缓冲区,在此期间,master接收到任何来自客户端的"写"操作都会记录在复制积压缓冲区一份

3)master将rdb通过前面创建的socket通道发送给slave

4)slave接收到rdb文件后,清空当前机器的所有数据,开始同步rdb中的数据

5)告知master文件以及恢复完毕

6)master将复制积压缓冲区中的指令发送给slave

7)slave将接收到的指令执行bgrewriteaof重写,之后进行数据恢复

步骤1-4属于全量同步

步骤5-7属于增量同步

1.2.2.2 增量同步原理

从上图可以看出,在master执行bgsave期间接收到的所有命令都会存放在复制积压缓冲区一份,而复制积压缓冲区的大小是有限度的,默认是1MB,如果缓冲区已经满了,则会把最前面的数据挤出去(删除),后期进行增量同步时发现数据不一致,则会进行全量同步,从而造成同步死循环,因此复制积压缓冲区不易设置为太小。

  • 查看复制积压缓冲区:
127.0.0.1:6379> config get repl-backlog-size
1) "repl-backlog-size"
2) "1048576"
127.0.0.1:6379>

  • 调整复制积压缓冲区大小:
repl-backlog-size 2096576

1.2.3 命令传播阶段

master与slave保持连接后,此后master接到来自客户端"写"的命令之后,需要将数据同步各个slave端,此阶段叫命令传播阶段。

1.2.3.1 偏移量(offset)

在数据同步中,master与slave之间分别维护着一个offset偏移量,用于存储增量同步时主节点发送给从节点数据的位置,这样利于在网络抖动情况下,主从节点之间还可以继续接着上一次同步的位置进行同步,而不必要进行全量同步。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0atRTF9f-1586788518676)(media/34.png)]

假设在命令传播时,master在传输到"4"这个字节时出现网络抖动,那么master与slave都会将此offset的值(7)保存起来,下次同步数据时,slave带着此offset来到master继续增量同步数据,而不需要重新全量同步数据。

1.2.3.2 运行id(runid)

在上一小结说了master与slave之间都维护着一个offset偏移量,让我们可以根据offset的偏移量进行增量同步,避免网络抖动情况下进行全量同步。

但是如果在同步的过程中切换了master节点则会出现问题,因为新的master节点并没有维护着offset偏移量,并且slave中的数据应该与新master节点数据保持一致。那么redis是如何做到的呢?

其实在master与slave服务器启动时都保存有一个由40位随机的16进制字符串组成的运行id(runid),用于标识一台唯一的redis,每次启动都不一样。在info的server组下可以查看到

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值