首页 > 编程知识 正文

redis主从复制原理,redis如何查看主从

时间:2023-05-03 20:17:49 阅读:147467 作者:1054

文章目录Redis主从复制是什么? 为什么需要Redis主从的副本? 主从复制的作用Redis主从复制原理连接建立阶段(即准备阶段),数据同步阶段命令传播阶段心跳检测最小- slaves选项

什么是Redis主从复制?

Redis主从复制,就是说现在有多台Redis服务器,我们把他们分为master(主节点)和slave(从节点),而主从复制呢就是将 master的数据复制到 slave上面,且数据的复制是单向的,不能从 slave复制到master。

主从模式

为什么需要Redis主从的副本?日常开发中,我们自己一般都是使用的单机版的Redis,尽管做了持久化,但在reds宕机后,用户使用就会受到影响。而且,单机版的redis内存是会达到峰值的,如果我们做了主从复制,那么即使有一个服务器宕机了,也不会影响用户的使用。

Redis官网号称可以达到10w QPS,但实际开发中,这10w可能远远不够,所以单机版下的QPS也会成瓶颈。

主从复制的作用数据冗余主从复制实现了数据的热备份,是一种非持久化的数据冗馀方式。故障恢复:本3358www.Sina.com/复。 除了主节点出现问题时,可以由从节点提供服务,实现快速的故障恢主从复制之外,还结合读写分离,主节点提供写入服务,从节点提供读取服务(即,写入Redis数据时直接连接主节点) 特别是在写入少、读取多的场景中,通过多个从节点分担读取负载,可以大幅提高Redis服务的并发执行量。 http://www.Sina.com//http://www.Sina.com /,因为它是主从复制、哨兵和集群可以实施的基础。

Redis主从复制原理负载均衡

连接建立阶段,即准备阶段(高可用

节点服务器内部为主从复制是Redis高可用的基础。,即主从复制过程大体可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段

该阶段的主要作用是在主从节点之间建立连接,为数据同步做好准备。

两个字段

masterhost和masterport字段,用于存储主节点的ip和port信息。

第一步:设置主服务器地址和端口

客户端向从服务器发送 slaveof master_ip master_port

第二步:建立Socket连接

从服务器根据 ip和port 与主服务器建立 socket 连接,主节点接收到从节点的socket连接后(即accept之后),为该socket创建相应的客户端状态,并将从节点看做是连接到主节点的一个客户端

3358www.Sina.com/:说明在第三步:发送PING命令中,主节点当前可以处理请求,复制过程将继续。 http://www.Sina.com/3358 www.Sina.com/http://www.Sina.com:3358 www.Sina.com/: http://www.com

从服务器成为主服务器后,会向主服务器发送 ping 命令来检查 socket 是否可用及主服务器能否正常处理命令请求。

而发送 ping 命令后,有三种返回结果:

返回 直率的灰狼

socket连接正常

超时没反应

数据同步阶段

rong>Redis主从复制可通过 PSYNC 命令来实现,而 PSYNC 命令有两种模式:① 完整重同步;②部分重同步。


完整重同步

主要用于处理 初次复制 的情况,通过让主服务器创建 RDB 文件发送给从服务器,以及让从服务器发送保存在缓冲区里面的写命令来进行同步。


部分重同步

主要用于处理 断线后重复制 情况,当从服务器在断线后重新连接主服务器时,如果条件允许,主服务器可以将主从服务器连接断开期间执行的写命令发送给从服务器,从服务器只要接受并执行这些命令,就可以将数据库更新到和主服务器当前一致的状态。


初次复制:从服务器以前没有复制过任何主服务器,或者从服务器当前要复制的主服务器和上一次的不同。

断线后重复制:处于命令传播阶段的主从服务器因为网络原因而中断了复制,但从服务器通过自动重连接重新连接上了主服务器,并继续复制主服务器。

Redis2.8之前不支持部分重同步

温馨提示

在Redis主从复制中,一定要开启 master 和 slave 的持久化功能。如果启用不了,一定要避免服务器自动重启。

如果master的持久化功能关闭了,slave1 和 slave2 从master复制数据过去。master崩溃重启,因为持久化功能被关闭,重启后master没有数据。slave1 和 slave2 从master复制数据过去,因为master数据为空,这样相当于销毁了之前拷贝过来的数据副本。

所以强烈建议开始 持久化 。


PSYNC流程详解

如果从服务器以前没有复制过或者执行过 slaveof no one命令,那么从服务器在开始一次新的复制时,会给主服务器发送 PSYNC ? -1 命令。主动请求进行完整重同步。相反,如果已经复制过,那么从服务器在开始一次新的复制时,将向主服务器发送 PSYNC <runid > <offset> 命令,runid 是上次主服务器的运行ID,offset是从服务器的复制偏移量。

接受到 PSYNC 命令的主服务器,返回以下三种回复中的一中

如果主服务器返回 +FULLRESYNC <runid> <offset>回复,表示主服务器执行完整重同步操作,runid为主服务器的ID,从服务器会将其保存,offset是主服务器的复制偏移量,从服务器会将其当作自己的起始复制偏移量。如果主服务器返回的是 +CONTINUE回复,表示主服务器执行部分重同步操作,从服务器只要等待主服务器发送缺少的那部分数据过来即可。如果主服务器返回的是 +ERR 回复,那么表示 Redis版本低于2.8,识别不了 PSYNC命令,那么从服务器向主服务器发送 SYNC命令,并与之执行完整同步操作。


命令传播阶段

在这个阶段主节点只要将自己执行的写命令发送给从节点,从节点接收命令并执行,就能保证主从节点一致。


心跳检测

在命令传播阶段,从服务器会以每秒一次的频率,向主服务器发送命令。

作用

检测主从服务器的网络连接状态检测命令丢失辅助实现 min-slaves选项
min-slaves选项

Redis的 min-slaves-to-write 和 min-slaves-max-lag两个选项可以防止主服务器在不安全的情况下执行写命令。

案例

min-slaves-to-write 2min-slaves-max-lag 5

意思就是如果在从服务器少于2个或者两个从服务器的延迟值大于等于 5秒时,主服务器拒绝执行写命令。



最后

我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!

创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以给个点赞和关注,感谢支持,我们下次再见~~~

分享大纲

大厂面试题专栏


Java从入门到入坟学习路线目录索引


开源爬虫实例教程目录索引

更多精彩内容分享,请点击 Hello World (●’◡’●)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。