redis cluster 集群架构
创始人
2025-05-29 05:30:14

master-slave -sentinel集群master 写单点,无法扩容。

Redis cluster 解决 单个master-slave-sentinel集群 无法水平扩容的问题,由gossip(病毒传输协议实现无中心的集群状态维护);

gossip 集群节点发现

redis-cluster架构中,被设计成共有16384(2的14次方)个hash slot。每个master分得一部分slot,其算法为:hash_slot = crc16(key) mod 16384 ,这就找到对应slot。群集至少需要3主3从,且每个实例使用不同的配置文件。

在cluster架构下,默认的,一般redis-master用于接收读写,而redis-slave则用于备份,当有请求是在向slave发起时,会直接重定向到对应key所在的master来处理。但如果不介意读取的是redis-cluster中有可能过期的数据并且对写请求不感兴趣时,则亦可通过readonly命令,将slave设置成可读,然后通过slave获取相关的key,达到读写分离。

redis-cluster 不可用 的情况:

1 集群主库半数宕机(无论是否从库存活)

2 集群某一节点的主从全数宕机。

当某个master挂掉后,在cluster集群仍然可用的前提下,由于某个master可能有多个slave,某个salve将提升为master节点,那么就会存在竞争,那么此时它们的选举机制是怎样的呢?于是

要理解下面的过程我们需要了解一些概念:

currentEpoch:

这是一个集群状态相关的概念,可以当作记录集群状态变更的递增版本号。每个集群节点,都会通过 server.cluster->currentEpoch 记录当前的 currentEpoch。

集群节点创建时,不管是 master 还是 slave,都置 currentEpoch 为 0。当前节点接收到来自其他节点的包时,如果发送者的 currentEpoch(消息头部会包含发送者的 currentEpoch)大于当前节点的currentEpoch,那么当前节点会更新 currentEpoch 为发送者的 currentEpoch。因此,集群中所有节点的 currentEpoch 最终会达成一致,相当于对集群状态的认知达成了一致。

其过程如下:

1.slave发现自己的master变为FAIL

2.发起选举前,slave先给自己的epoch(即currentEpoch)增一,然后请求其它master给自己投票。slave是通过广播FAILOVER_AUTH_REQUEST包给集中的每一个masters。

3.slave发起投票后,会等待至少两倍NODE_TIMEOUT时长接收投票结果,不管NODE_TIMEOUT何值,也至少会等待2秒。

4.master接收投票后给slave响应FAILOVER_AUTH_ACK,并且在(NODE_TIMEOUT*2)时间内不会给同一master的其它slave投票。

5.如果slave收到FAILOVER_AUTH_ACK响应的epoch值小于自己的epoch,则会直接丢弃。一旦slave收到多数master的FAILOVER_AUTH_ACK,则声明自己赢得了选举。

6.如果slave在两倍的NODE_TIMEOUT时间内(至少2秒)未赢得选举,则放弃本次选举,然后在四倍NODE_TIMEOUT时间(至少4秒)后重新发起选举。

只所以强制延迟至少0.5秒选举,是为确保master的fail状态在整个集群内传开,否则可能只有小部分master知晓,而master只会给处于fail状态的master的slaves投票。如果一个slave的master状态不是fail,则其它master不会给它投票,Redis通过八卦协议(即Gossip协议,也叫谣言协议)传播fail。而在固定延迟上再加一个随机延迟,是为了避免多个slaves同时发起选举。

延迟计算公式:

DELAY = 500ms + random(0 ~ 500ms) + SLAVE_RANK * 1000ms

SLAVE_RANK表示此slave已经从master复制数据的总量的rank。Rank越小代表已复制的数据越新。这种方式下,持有最新数据的slave将会首先发起选举(理论上)。

相关内容

热门资讯

java 每日一练 (8) 文章目录1. 单选题2. 编程题 1. 单选题   1. 下列选项中关于 java 中 super ...
滁新高速淮南段发生一交通事故致... 本篇文章极速百科给大家谈谈滁新高速淮南段发生一交通事故致3人死亡,以及滁新高速淮南段拥堵对应的知识点...
快递投诉电话多少(极兔快递投诉... 今天给各位分享快递投诉电话多少的知识,其中也会对极兔快递投诉电话多少进行解释,如果能碰巧解决你现在面...
五羊本田小公主有几款?(五羊本... 本篇文章极速百科给大家谈谈五羊本田小公主有几款?,以及五羊本田小公主多少钱一台对应的知识点,希望对各...
红蓝buff是什么(红蓝buf... 本篇文章极速百科给大家谈谈红蓝buff是什么,以及红蓝buff是什么意思网络用语对应的知识点,希望对...
Gitee搭建个人博客(Bea... 目录一、引言二、博客模板选型 - Jekyll三、安装Jekyll环境3.1 安装Ruby3.2 安...
记一次磁盘扩容 起因 在使用firefly板子时,刷完固件发现根目录竟然只有3G,根本没...
开车撞死人怎么处理与赔偿?撞死... 今天给各位分享开车撞死人怎么处理与赔偿?撞死人协商最佳时间的知识,其中也会对开车撞死人要赔偿多少钱进...
ulzzang是什么牌子(ul... 本篇文章极速百科给大家谈谈ulzzang是什么牌子,以及ulzzang是什么牌子鞋对应的知识点,希望...
中国各重点城市豪车数量排名:北... 今天给各位分享中国各重点城市豪车数量排名:北上深广包揽前四!的知识,其中也会对中国地区豪车排行榜进行...
大分辨率数据集切割 前言:对于航拍、遥感影像数据集而言,此类数据集包含较多目标,...
叠信纸的四种方法(叠信纸的四种... 本篇文章极速百科给大家谈谈叠信纸的四种方法,以及叠信纸的四种方法a4多张图片对应的知识点,希望对各位...
记录Quartz在项目中的使用... 黑马传智健康项目中遇到的技术,感觉这个解决思路挺新颖的,就记录下来了。用...
Opengauss CLOG模... 上篇讲解了opengauss CLOG模块分区优化原理篇,本文将从源代码实现层面讨论具...
广汽三菱放大招2021款奕歌燃... 今天给各位分享广汽三菱放大招2021款奕歌燃情版上市售价16.78万元的知识,其中也会对广汽三菱弈歌...
科斯沃斯引擎(科斯沃d037)... 今天给各位分享科斯沃斯引擎的知识,其中也会对科斯沃d037进行解释,如果能碰巧解决你现在面临的问题,...
展望过去,想象未来,瑞航360... 今天给各位分享展望过去,想象未来,瑞航360全景2018新征程的知识,其中也会对瑞航lx188机型进...
考研数二第四讲 分段函数的复合... 分段函数的复合函数求分段函数的复合函数,这是考研高数中的一个重要考点。专升本的高数不考...
7座MPV车型推荐,7座MPV... 本篇文章极速百科给大家谈谈7座MPV车型推荐,7座MPV车型大全,以及7座mpv汽车大全2020对应...
支付宝怎么取消自动续费(苹果手... 今天给各位分享支付宝怎么取消自动续费的知识,其中也会对苹果手机支付宝怎么取消自动续费进行解释,如果能...
TH是什么意思(Things是... 本篇文章极速百科给大家谈谈TH是什么意思,以及Things是什么意思翻译对应的知识点,希望对各位有所...
上汽大众途观怎么样(上汽大众途... 本篇文章极速百科给大家谈谈上汽大众途观怎么样,以及上汽大众途观l2022版质量对应的知识点,希望对各...
solidworks转urdf... 是用solidworks成功导出了一次urdf,记录一下导出时各参数的说明。 基座的...
如何买火车票网上订票?网上买火... 今天给各位分享如何买火车票网上订票?网上买火车票怎么买的知识,其中也会对怎样买网上火车票进行解释,如...
加美机油质量怎么样?加美润滑油... 本篇文章极速百科给大家谈谈加美机油质量怎么样?加美润滑油排名第几,以及加美机油咋样对应的知识点,希望...
哈弗E2012款基本型配置-参... 今天给各位分享哈弗E2012款基本型配置-参数配置详解的知识,其中也会对哈弗二多少钱进行解释,如果能...
买拉法要满足什么条件(购买拉法... 今天给各位分享买拉法要满足什么条件的知识,其中也会对购买拉法的几条要求进行解释,如果能碰巧解决你现在...
JAVA并发编程之锁 1、乐观锁和悲观锁 1.1、悲观锁 认为自己在使用数据的时候一定有别的线程来修改数据,...
mysql数据库提权 0x00数据库帐号密码获取方式数据库帐号密码获取方式:1.网站存在高权限SQL注入点2...
橱窗男孩蔚来(橱窗小男孩看车壁... 今天给各位分享橱窗男孩蔚来的知识,其中也会对橱窗小男孩看车壁纸蔚来进行解释,如果能碰巧解决你现在面临...