2024年最新Redis主从复制的搭建及原理分析_redis集群主从复制原理

本文详细介绍了Redis主从复制的架构、工作流程,包括建立连接、数据同步和命令传播阶段,以及心跳机制的实现。通过实例展示了如何搭建主从复制环境和处理可能遇到的问题。
摘要由CSDN通过智能技术生成

目录

一、Redis主从复制

1.1 搭建主从复制架构

1.1.1 主从复制架构简介

1.1.2 搭建主从复制架构

1.2 主从复制工作流程

1.2.1 建立连接阶段

1.2.2 数据同步阶段

1.2.2.1 工作流程

1.2.2.2 增量同步原理

1.2.3 命令传播阶段

1.2.3.1 偏移量(offset)

1.2.3.2 运行id(runid)

1.2.3.3 复制积压缓冲区

1.2.3.4 心跳机制


一、Redis主从复制

1.1 搭建主从复制架构

1.1.1 主从复制架构简介

在实际开发中,redis通常会搭建集群,来提高redis的整体的性能。但在客户端访问时有可能多次访问到不同的redis,因此造成多台redis数据不一致问题,为了解决这种多台redis中数据不同步问题,我们提出了主、从的概念;

image

Master负责写的操作,Slave负责读的操作,Master与Slave直接保证数据的同步。

注:一个Master可以对应有多个Slave,一个Slave只能有一个Master

1.1.2 搭建主从复制架构

准备好两个Redis配置文件(一主一从):

6379(Master):

port 6379
dir "/root/redis-4.0.11/data"
daemonize no
dbfilename dump-6379.rdb
appendonly yes
appendfsync everysec
appendfilename "appendonly-6379.aof"

6380(Slave):

port 6380
dir "/root/redis-4.0.11/data"
dbfilename dump-6380.rdb
daemonize no
appendonly yes
appendfsync everysec
appendfilename "appendonly-6380.aof"

启动两台Redis服务器

redis-4.0.11/src/redis-server redis-4.0.11/conf/redis-6379.conf
redis-4.0.11/src/redis-server redis-4.0.11/conf/redis-6380.conf

使用客户端连接:

redis-4.0.11/src/redis-cli -p 6379
redis-4.0.11/src/redis-cli -p 6380
  • 主从复制命令:

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-6380.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 主从复制工作流程

image

redis的主从复制分为三个阶段:

1)Slave连接Master**(建立连接阶段)**

2)Master同步数据到Slave**(数据同步阶段)**

3)期间Master接到来自客户端"写"的命令之后需要将数据同步到Slave**(命令传播阶段)**

1.2.1 建立连接阶段

在主从配置的建立连接阶段Master与Slave之间会做如下操作:

1)Slave发送Slaveof Masterhost Masterport命令连接Master

2)Master接到来自Slave的连接,并开始响应对方。

3)Slave得到响应之后将Masterhost与Masterport及一些其他的Master信息保存到Slave端。

4)Slave确保连接无误后开始创建socket通道,用于后续的数据复制工作。

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

6)Master接收到Slave的ping心跳后会给对应的Slave响应pong。ping/pong机制

7)Slave发送本机设置的Master密码Masterauth来到Master进行验证(Master有设置密码的情况下)。

8)Master进行身份识别,如果认证错误,尝试重新连接。Slave服务器端报如下错误:

Master aborted replication with an error: NOAUTH Authentication required.

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

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

image

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

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

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

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

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

93道网络安全面试题

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

黑客学习资源推荐

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

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

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

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

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

image

② 路线对应学习视频

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

image-20231025112050764

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

② 视频

image1

③ 书籍

image2

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

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

② 简历模板

在这里插入图片描述

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值