如何通过日志的方式理解Redis主从复制

Redis主从复制概要

之前我们介绍了如何构建主从复制,其中在总结处提及的,做主从的时候,一定要谨慎,因为在执行主从复制时,会清理掉从库所有的数据,所以说,今天我们来看下,我们从库在执行SLAVEOF的时候,执行的步骤。

建立连接

当我们在从库执行slaveof,指定主节点的地址和端口后,从库和主库会进行连接,等待复制,这时,可以查看日志得到信息,我们新建一个主从,我们查看日志可知:

[root@pdudo 6380]# grep -i connecting redis.log -A 1
* Connecting to MASTER 127.0.0.1:6379 * MASTER <-> SLAVE sync started [root@pdudo 6380]#

如上日志显示,从库将向主库建立链接,且建立成功,主从开始复制。

检查主库是否存活

再建立链接后,为确保服务器存活,从库会向主库发送ping命令,若收到返回pong,则开始复制。

通过日志显示如下

* Master replied to PING, replication can continue...

如果发送ping未被返回pong,会抛出如下错误,并且间隔数秒,会再次尝试建立连接。

# Error condition on socket for SYNC: Connection refused 

此时我们则应当检查主库是否可用。

权限校验

当从库ping主库得到正常返回时,这个时候,就需要开启鉴权了,所谓的鉴权,若主库设置了requirepass,则从库在连接主库进行复制前,就需要指定masterauth才行,否则会重复建立连接步骤。

若密码错误,会显示如下日志

# Unable to AUTH to MASTER: -ERR invalid password 

如上就是主库requirepass和从库masterauth不一致所引起的,此时从库会回到建立连接步骤重新开始,周而复始,此时我们应该检查主库的密码是否和masterauth一致,若不一致,需要修改masterauth将其和主库一致才行。

若密码正确,则会显示如下日志

* Partial resynchronization not possible (no cached master) 

数据同步

在验证完主库的密码后,则真正开始数据主从同步,同步的方式为全量同步+部分同步的方式,这里详细讲解一下,在建立主从复制后,第一次会进行全量复制,而后才会进行增量复制。

全量复制

当主库收到请求后,会在主库执行bgsave开始后台备份,备份完成后,会直接将备份后的rdb发送至从库。从库在收到主库rdb文件后, 会释放到从库中。 通过主库的日志可以看到详细信息。

* Full resync requested by slave 127.0.0.1:6380 * Starting BGSAVE for SYNC with target: disk * Background saving started by pid 44841
* DB saved on disk * Background saving terminated with success * Synchronization with slave 127.0.0.1:6380 succeeded 

在从库收到后,可以看到日志

* Full resync from master: 250ee58e7c7fb1e6c57c05cbfb099cb0013674d9:1 * MASTER <-> SLAVE sync: receiving 77 bytes from master
* MASTER <-> SLAVE sync: Flushing old data
* MASTER <-> SLAVE sync: Loading DB in memory
* MASTER <-> SLAVE sync: Finished with success

而后,当主库有新增数据后,会通过增量复制的方式发送至从库进行执行,至此,我们主从复制逻辑介绍完毕。

总结

自此,还有我们了解了大概的主从复制流程,其实还有亿点点细节没有提及,例如数据同步的时候,我们在执行全量复制的时候,这时候来了新命令,应该放到哪里? 等等。由于有点复杂,所以不准备持续阐述了,这里总结几个小坑,我们在做主从复制的时候,尽量选择业务量小的时候操作,为什么呢? 因为业务量大的时候,我们在后台做bgsave的时候,当检测到达到多少key有变化了,它就会认为目前的备份版本太老了,会重新进行备份,然而又进入了循环,始终都备份不完。其次在重申一点,在做主从复制的时候,一定要认真看好机器,不要将其他正在线上使用的Redis作为从库来执行slaveof了,我们有过类似的案例,Redis版本的删库跑路,那经验增长老长了。

#java#
全部评论
这个方法太有用了,感谢分享
点赞 回复 分享
发布于 2022-08-25 18:49 陕西

相关推荐

双飞二本嵌入式求拷打我是在&nbsp;BOSS&nbsp;上投递的简历,好多都没人回复,这是开场白和简历求大神帮忙看看。您好!我是2025届应届生,最快可在一周内上岗,能够实习六个月以上,并接受加班。以下是我的核心优势和相关经验:1.&nbsp;嵌入式开发能力:&nbsp;&nbsp;&nbsp;熟练掌握STM32系列单片机及其外设(如GPIO、定时器、ADC、DAC、I2C、SPI、UART等),能够独立完成硬件驱动开发和调试。&nbsp;&nbsp;熟悉FreeRTOS实时操作系统,具备多任务调度和资源管理经验。&nbsp;&nbsp;熟悉LVGL图形库开发,能够实现嵌入式设备的图形界面设计。2.&nbsp;硬件设计能力:&nbsp;&nbsp;&nbsp;具备PCB设计经验,曾为2023年工创赛物流搬运赛道设计小车主板,带领团队获得国家级银奖。&nbsp;&nbsp;&nbsp;熟悉硬件原理图分析,能够快速理解并调试硬件电路。3.&nbsp;机器人开发与竞赛经验:&nbsp;&nbsp;&nbsp;在全国大学生智能车竞赛、ROS机器人竞赛中多次获得国家级奖项,具备丰富的机器人开发经验。&nbsp;&nbsp;&nbsp;熟悉Linux环境,对ROS和ROS&nbsp;2有一定了解,能够进行机器人系统的开发与调试。4.&nbsp;编程能力:&nbsp;&nbsp;&nbsp;熟悉C/C++,熟悉Python,能够高效完成嵌入式开发和算法实现。&nbsp;&nbsp;&nbsp;具备良好的代码规范和文档编写能力。5.&nbsp;团队协作与领导能力:&nbsp;&nbsp;&nbsp;在多个项目中担任核心开发或团队负责人,具备良好的沟通能力和团队协作精神。&nbsp;&nbsp;&nbsp;在工创赛中带领团队完成项目规划、任务分配和技术攻关,展现了较强的领导力。我对嵌入式开发、机器人技术和智能硬件充满热情,期待加入贵公司,与团队共同成长,为公司创造价值!如果有合适的岗位,欢迎随时联系我,期待进一步沟通!
沉淀一会:嵌入式就是狗屎
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务