Redis Cluster集群(数据分片/寻址算法)
2021-03-01 23:32:01 0 举报
AI智能生成
Redis Cluster集群(数据分片/寻址算法)
作者其他创作
大纲/内容
为什么使用redis cluster
主从复制的缺点:master单点故障
主从+哨兵的缺点:节点数据冗余
redis cluster
动态扩容和缩容,保证数据不冗余,且吞吐量更大
自动数据分片,每个master节点存放一部分数据
提供内置的高可用支持,允许部分master节点宕机
数据分片方案
客户端
客户端使用一致性哈希等算法决定键应当分布到哪个节点
中间层
将客户端请求发送到代理上,由代理转发请求到正确的节点上
国内豌豆荚的Codis
国外Twiter的twemproxy
服务器
hash slot 算法
Redis Cluster
分布式寻址算法
hash算法
计算请求数据的hash值,并按照节点数量取模,再放入对应的master节
点中,如果某台master宕机了,由于master数量少了导致取模方式改变
点中,如果某台master宕机了,由于master数量少了导致取模方式改变
缺点:会造成大量缓存重建
一致性hash算法+虚拟节点
把请求数据的hash值对应在圆环的各个点上,然后顺时针寻找
离自己最近的master节点,如遇master宕机只会影响部分数据
离自己最近的master节点,如遇master宕机只会影响部分数据
基于上面的一致性hash算法,再在各个master节点之间创建均
匀分布的虚拟节点,如遇master宕机时就不会涌入同一个节点
匀分布的虚拟节点,如遇master宕机时就不会涌入同一个节点
优点:自动缓存迁移、自动负载均衡
hash slot算法
redis cluster有固定的16384个哈希槽,对每个key计算CRC16的值,
然后对16384取模计算卡槽位置(每个槽位可以存放多个key)
然后对16384取模计算卡槽位置(每个槽位可以存放多个key)
CRC16算法
为什么是16384
即使有任何一台机器宕机,其他master中的缓存是不受影响的,失效的节点重新分配就可以了
元数据维护
种类
集中式:将元数据(节点信息、故障)存储在某个节点上
优点:时效性好,同步快
缺点:更新压力和存储压力集中
gossip协议
去中心化:每个节点都持有一份元数据
优点:缓解了元数据更新和存储的压力
缺点:元数据更新延迟,集群操作滞后
通信机制
Meet:集群中的节点会向新的节点发送邀请,加入现有集群
Ping:节点向集群中的其他节点发送ping消息传递自己的节点信息
Pong:收到ping消息的节点会回复pong,消息中同样携带节点信息
Fail:ping不通某节点会向集群中的其他节点广播该节点挂掉的消息
redis cluster基于gossip
协议的故障检测
协议的故障检测
节点间内部通信
采用gossip协议,每个节点都有一个专门用于节点间通信的
端口,就是自己提供服务的端口号+10000
端口,就是自己提供服务的端口号+10000
集群中的每个节点都会定期地向集群中的其他节点发送PING
消息,以此交换各个节点状态信息,检测各个节点状态
消息,以此交换各个节点状态信息,检测各个节点状态
高性能的主备切换
判断master宕机
PFAIL->超半数->FAIL
从节点过滤
过滤掉与master断开时间长的slave
master选举
slave发现自己的master的状态变为FAIL
将自己记录的选举轮次标记加1,并广播
通知给集群中其他节点
通知给集群中其他节点
其他节点收到该信息,只有master响应,
判断请求者的合法性,并发送结果
判断请求者的合法性,并发送结果
尝试选举的slave收集master返回的结果,
收到超过半数master的统一后变成新Master
收到超过半数master的统一后变成新Master
广播Pong消息通知其他集群节点
0 条评论
下一页