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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 通过日志的方式理解Redis主从复制

如果你还不会搭建Redis主从复制,请参考主从复制搭文档: juejin.cn/post/713470…

文章采用的Redis版本为: 3.2.12




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将其和主库一致才行。


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



数据同步


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

全量复制


当主库收到请求后,会在主库执行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版本的删库跑路,那经验增长老长了。




相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
存储 NoSQL 关系型数据库
Redis 日志篇:无畏宕机快速恢复的杀手锏
Redis 日志篇:无畏宕机快速恢复的杀手锏
79 0
|
4月前
|
存储 负载均衡 NoSQL
Redis之主从复制
【1月更文挑战第8天】主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(masterleader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主。 默认情况下,每台Redis服务器都是主节点; 且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
179 3
|
4月前
|
NoSQL 关系型数据库 MySQL
Redis高可用之主从复制架构(第一部分)
Redis高可用之主从复制架构(第一部分)
|
5月前
|
监控 NoSQL 容灾
【Redis】主从复制
【Redis】主从复制
|
4天前
|
NoSQL 安全 Redis
聊聊Redis主从复制
聊聊Redis主从复制
26 0
|
5月前
|
监控 NoSQL Redis
Redis - 主从复制那些事与高可用sentinel
Redis - 主从复制那些事与高可用sentinel
38 0
|
22天前
|
监控 NoSQL Redis
redis主从复制
redis主从复制
|
2月前
|
存储 监控 NoSQL
Redis 架构深入:主从复制、哨兵到集群
大家好,我是小康,今天我们来聊下 Redis 的几种架构模式,包括主从复制、哨兵和集群模式。
Redis 架构深入:主从复制、哨兵到集群
|
2月前
|
负载均衡 NoSQL 容灾
|
4月前
|
NoSQL Linux 网络安全
解决在Linux中进行redis的主从复制时出现的从机可以获取到主机的信息,主机获取不到从机的信息~
解决在Linux中进行redis的主从复制时出现的从机可以获取到主机的信息,主机获取不到从机的信息~