在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?

目录

一、分布式寻址算法

[1. hash 算法](#1. hash 算法)

[2. 一致性 hash 算法](#2. 一致性 hash 算法)

[3. Redis cluster 的 hash slot 算法](#3. Redis cluster 的 hash slot 算法)

[二、Redis cluster 的高可用与主备切换原理](#二、Redis cluster 的高可用与主备切换原理)

[1. 判断节点宕机](#1. 判断节点宕机)

[2. 从节点过滤](#2. 从节点过滤)

[3. 从节点选举](#3. 从节点选举)

[4. 与哨兵比较](#4. 与哨兵比较)


一、分布式寻址算法

·hash 算法(大量缓存重建)
·一致性 hash 算法(自动缓存迁移)+虚拟节点(自动负载均衡)

·Redis cluster 的 hash slot算法

1. hash算法

来了一个 key,首先计算 hash 值,然后对节点数取模。然后打在不同的 master 节点上。一旦某一个 master 节点宕机,所有请求过来,都会基于最新的剩余 master 节点数去取模,尝试去取数据。这会导致大部分的请求过来,全部无法拿到有效的缓存,导致大量的流量涌入数据库。

2. 一致性 hash 算法

一致性 hash 算法将整个 hash 值空间组织成一个虚拟的圆环,整个空间按顺时针方向组织,下一步将各个 master 节点(使用服务器的ip 或主机名)进行 hash。这样就能确定每个节点在其哈希环上的位置。

来了一个 key,首先计算 hash 值,并确定此数据在环上的位置,从此位置沿环顺时针"行走"遇到的第一个 master 节点就是 key 所在位置。

在一致性哈希算法中,如果一个节点挂了,受影响的数据仅仅是此节点到环空间前一个节点(沿着逆时针方向行走遇到的第一个节点)之间的数据,其它不受影响。增加一个节点也同理。

燃鹅,一致性哈希算法在节点太少时,容易因为节点分布不均匀而造成缓存热点的问题。为了解决这种热点问题,一致性 hash 算法引入了虚拟节点机制,即对每一个节点计算多个 hash,每个计算结果位置都放置一个虚拟节点。这样就实现了数据的均匀分布,负载均衡。

3. Redis cluster 的 hash slot 算法

Redis cluster有固定的 16384 个hash slot,对每个 key 计算 CRC16 值,然后对 16384取模,可以获取 key 对应的 hash slot。

Redis cluster 中每个 master 都会持有部分 slot,比如有3个 master,那么可能每个 master 持有5000 多个 hash slot。hash slot 让 node 的增加和移除很简单,增加一个 master,就将其他master 的 hash slot 移动部分过去,减少一个 master,就将它的 hash slot 移动到其他 master 上去。移动 hash sot 的成本是非常低的。客户端的 api,可以对指定的数据,让他们走同一个hash slot,通过 hash tag 来实现。

任何一台机器宕机,另外两个节点,不影响的。因为key找的是 hash sot,不是机器。

二、Redis cluster的高可用与主备切换原理

Redis cluster 的高可用的原理,几乎跟哨兵是类似的。

1. 判断节点宕机

如果一个节点认为另外一个节点宕机,那么就是 pfail ,主观宕机。如果多个节点都认为另外一个节点宕机了,那么就是 fail ,客观宕机,跟哨兵的原理几乎一样,sdown,odown。
在 cluster-node-timeout 内,某个节点一直没有返回 pong ,那么就被认为 pfail。如果一个节点认为某个节点 pfail 了,那么会在 gossip ping 消息中, ping 给其他节点,如果超过半数的节点都认为 pfail 了,那么就会变成fail。

2. 从节点过滤

对宕机的 master node,从其所有的 slave node 中,选择一个切换成 master node。
检査每个 slave node 与 master node 断开连接的时间,如果超过了 cluster-node-timeout *cluster-slave-validity-factor ,那么就没有资格切换成 master。

3. 从节点选举

每个从节点,都根据自己对 master 复制数据的 offset,来设置一个选举时间,ofset 越大(复制数据越多)的从节点,选举时间越靠前,优先进行选举。
所有的 master node 开始 slave 选举投票,给要进行选举的 slave 进行投票,如果大部分 masternode (N/2 +1)都投票给了某个从节点,那么选举通过,那个从节点可以切换成 master。
从节点执行主备切换,从节点切换为主节点

4. 与哨兵比较

整个流程跟哨兵相比,非常类似,所以说,Redis cluster 功能强大,直接集成了replication 和sentinel 的功能。

(ps:一个点赞一份爱,点个关注不迷路!)

相关推荐
basketball6165 小时前
Redis基础:1. Redis介绍
数据库·redis·缓存
周末也要写八哥5 小时前
分布式技术之单机锁
分布式
Shan12057 小时前
浅谈:分布式锁的系统分类
分布式
阿文的代码库7 小时前
干货分享——分布式锁的典型案例
分布式
珠***格8 小时前
实操落地|防逆流装置的安装规范、调试标准与故障处置
网络·数据库·人工智能·分布式·能源·边缘计算
国科安芯9 小时前
国科安芯推出商业航天级抗辐照全双工 RS485/422 收发器 ASC491S2Y
网络·分布式·单片机·架构·安全性测试
zzz_236810 小时前
【RabbitMQ】面试系列 · 第一期:基础认知与选型实战
分布式·面试·rabbitmq
SilentSamsara10 小时前
Python 微服务全链路:gRPC + 链路追踪 + 服务网格接入
开发语言·分布式·python·微服务·架构
zzz_236811 小时前
【Redis】分布式锁完整演进
数据库·redis·分布式
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题 第99题】【Mysql篇】第29题:如何选择合适的分布式主键方案?
java·数据库·分布式·mysql·面试