Redis Cluster 集群

诗林  论坛元老 | 2025-1-18 18:03:01 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1350|帖子 1350|积分 4050

1. Redis Cluster 简介
Redis Cluster 是 Redis 官方提供的 Redis 集群功能。

 
 
 
为什么要实现 Redis Cluster?
Redis 是单线程的(从网络 I/O 处置惩罚到实际的读写命令处置惩罚),无论单核 CPU 下内存多大,如果需要大量盘算能力,还是需要采用分布式以增加 CPU 资源。
 
随着公司发展,用户数量增多,并发越来越多,业务需要更高的 QPS,而主从复制中单机的 QPS(10W)可能无法满意业务需求。
 
数据量的考虑:现有服务器内存不能满意业务数据的需要时,单纯向服务器添加内存不能达到要求,此时需要考虑分布式需求,把数据分布到不同服务器上。
 
网络流量需求:业务的流量已经凌驾服务器的网卡的上限值,可以考虑使用分布式来进行分流。
 
离线盘算,需要中心环节缓冲等别的需求。
 
Redis Cluster 缺点
当节点数量许多时,性能不会很高。
 
办理方案:使用 smart 智能客户端操作集群达到通讯服从最大化。客户端内部负责盘算维护键,槽以及节点的映射,用于快速定位到目的节点。智能客户端知道由哪个节点负责管理哪个槽,而且当节点与槽的映射关系发生改变时,客户端也会知道这个改变,这是一种非常高效的方式。
 
集群的限制
key 批量操作支持有限:例如 mget、mset 必须在一个 slot。
 
key 事件和 Lua 支持有限:操作的 key 必须在一个节点。
 
key 是数据分区的最小粒度:不支持 bigkey 分区。
 
不支持多个数据库:集群模式下只有一个 db0。
 
复制只支持一层:不支持树形复制结构。
 
Redis Cluster 满意容量和性能的扩展性,许多业务“不需要”。
 
大多数时客户端性能会“降低”。 命令无法跨节点使用:mget、keys、scan、flush、sinter 等。 Lua 和事件无法跨节点使用。
 
客户端维护更复杂:SDK 和应用本身斲丧(例如更多的毗连池)。
 
数据分布
为什么要做数据分布?
全量数据,单机 Redis 节点无法满意要求,按照分区规则把数据分到若干个子集当中。

 
 
常用数据分布之序次分

 
 
序次分区常用在关系型数据库的设计。
 
常用数据分布之哈希分布
 

 

 

 
 
假造槽分区
假造槽分区是 Redis Cluster 采用的分区方式。
 
预设假造槽,每个槽就相当于一个数字,有肯定范围。每个槽映射一个数据子集,一样寻常比节点数大。
 
Redis Cluster 中预设假造槽的范围为 0 到 16383
 
每个 key 通过 CRC16 校验后对 16384 取模来决定这个 key 存放在哪个槽(slot)。
 
 

 
 
 
步骤:
 
把 16384 个槽按照节点数量进行匀称分配,由节点进行管理。
 
对每个 key 按照 CRC16 规则进行 hash 运算。
 
把 hash 结果对 16383 进行取余。
 
把余数发送给 Redis 节点。
 
节点接收到数据,验证是否在本身管理的槽编号的范围。
 
如果在本身管理的槽编号范围内,则把数据保存到数据槽中,然后返回执行结果。
 
如果在本身管理的槽编号范围外,则会把数据发送给正确的节点,由正确的节点来把数据保存在对应的槽中。
 
 需要留意的是:Redis Cluster 的节点之间会共享消息,每个节点都会知道是哪个节点负责哪个范围内的数据槽。
 
假造槽分布方式中,由于每个节点管理一部分数据槽,数据保存到数据槽中。当节点扩容大概缩容时,对数据槽进行重新分配迁移即可,数据不会丢失。
 
假造槽分区特点:
 
使用服务端管理节点、槽、数据。例如 Redis Cluster。
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

诗林

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表