调研Redis高可用两种方案

调研Redis高可用两种方案

Redis是被广泛使用的基础软件之一。对于工程师和,架构师,运维人员来说,了解Redis的高可用方案和背后的原理,是必备的基础知识。本文作者深入分析了Redis高可用的方方面面,并且做了有效总结,相信对广大读者可以起到很好的领路作用。

redis高可用集群

Redis中为了实现高可用(High ,简称HA),采用了如下两个方式:

主从复制

Redis中主从节点复制数据有全量复制和部分复制之分。

旧版本全量复制功能的实现

全量复制使用snyc命令来实现,其流程是:

redis高可用集群

旧版本全量复制功能,其***的问题是从服务器断线重连时,即便在从服务器上已经有一部分数据了,也需要进行全量复制,这样做的效率很低调研Redis高可用两种方案,于是新版本的Redis在这部分做了改进。

新版本全量复制功能的实现

新版本Redis使用psync命令来代替sync命令,该命令既可以实现完整全同步也可以实现部分同步。

复制偏移量

执行复制的双方,主从服务器,分别会维护一个复制偏移量:

复制积压缓冲区

主服务器内部维护了一个固定长度的先进先出队列做为复制积压缓冲区,其默认大小为1MB。

在主服务器进行命令传播时,不仅会将写命令同步到从服务器调研Redis高可用两种方案,还会将写命令写入复制积压缓冲区。

redis高可用集群

服务器运行ID

每个Redis服务器,都有其运行ID,运行ID由服务器在启动时自动生成,主服务器会将自己的运行ID发送给从服务器,而从服务器会将主服务器的运行ID保存起来。

从服务器Redis断线重连之后进行同步时,就是根据运行ID来判断同步的进度:

psync命令流程

redis高可用集群

有了前面的准备,下面开始分析psync命令的流程:

前面两种情况主服务器收到psync命令之后,会出现以下三种可能:

redis高可用集群

哨兵机制概述

Redis使用哨兵机制来实现高可用(HA),其大概工作原理是:

以上将Redis节点分为两类:

以上是大体的流程,这个流程需要解决以下几个问题:

以下来逐个回答这些问题。

三个监控任务

哨兵节点通过三个定时监控任务监控Redis数据节点的服务可用性。

info命令

每隔10秒,每个哨兵节点都会向主、从Redis数据节点发送info命令,获取新的拓扑结构信息。

Redis拓扑结构信息包括了:

这样,哨兵节点就能从info命令中自动获取到从节点信息,因此那些后续才加入的从节点信息不需要显式配置就能自动感知。

redis高可用集群

向:hello频道同步信息

每隔2秒,每个哨兵节点将会向Redis数据节点的:hello频道同步自身得到的主节点信息以及当前哨兵节点的信息redis高可用集群,由于其他哨兵节点也订阅了这个频道,因此实际上这个操作可以交换哨兵节点之间关于主节点以及哨兵节点的信息。

这一操作实际上完成了两件事情: * 发现新的哨兵节点:如果有新的哨兵节点加入redis高可用集群,此时保存下来这个新哨兵节点的信息,后续与该哨兵节点建立连接。 * 交换主节点的状态信息,作为后续客观判断主节点下线的依据。

redis高可用集群

向数据节点做心跳探测

每隔1秒,每个哨兵节点向主、从数据节点以及其他节点发送ping命令做心跳探测,这个心跳探测是后续主观判断数据节点下线的依据。

redis高可用集群

redis高可用集群

主观下线和客观下线主观下线

上面三个监控任务中的第三个探测心跳任务,如果在配置的down-after-之后没有收到有效回复,那么就认为该数据节点“主观下线(sdown)”。

redis高可用集群

为什么称为“主观下线”?因为在一个分布式系统中,有多个机器在一起联动工作,网络可能出现各种状况,仅凭一个节点的判断还不足以认为一个数据节点下线了,这就需要后面的“客观下线”。

客观下线

当一个哨兵节点认为主节点主观下线时,该哨兵节点需要通过” is–down-by addr”命令向其他哨兵节点咨询该主节点是否下线了,如果有超过半数的哨兵节点都回答了下线,此时认为主节点“客观下线”。

redis高可用集群

选举哨兵***

当主节点客观下线时,需要选举出一个哨兵节点做为哨兵***,以完成后续选出新的主节点的工作。

这个选举的大体思路是:

可以看到,这个选举***的流程很像raft中选举的流程。

redis高可用集群

选出新的主节点

在剩下的Redis从节点中redis高可用集群,按照以下顺序来选择新的主节点:

redis高可用集群

提升新的主节点

选择了新的主节点之后,还需要***的流程让该节点成为新的主节点:

redis高可用集群

如果过程中哨兵***失效怎么办?

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » 调研Redis高可用两种方案

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们