动力节点Redis7笔记-第六章Redis分布式系统

Redis分布式系统,官方称为Redis Cluster,Redis集群,其是Redis 3.0开始推出的分布式解决方案。其可以很好地解决不同Redis节点存放不同数据,并将用户请求方便地路由到不同Redis的问题。
摘要由CSDN通过智能技术生成

6 Redis分布式系统

Redis分布式系统,官方称为Redis Cluster,Redis集群,其是Redis 3.0开始推出的分布式解决方案。其可以很好地解决不同Redis节点存放不同数据,并将用户请求方便地路由到不同Redis的问题。

6.1 数据分区算法

分布式数据库系统会根据不同的数据分区算法,将数据分散存储到不同的数据库服务器节点上,每个节点管理着整个数据集合中的一个子集。

常见的数据分区规则有两大类:顺序分区与哈希分区。

6.1.1 顺序分区

顺序分区规则可以将数据按照某种顺序平均分配到不同的节点。不同的顺序方式,产生了不同的分区算法。例如,轮询分区算法、时间片轮转分区算法、数据块分区算法、业务主题分区算法等。由于这些算法都比较简单,所以这里就不展开描述了。

6.1.1.1 轮询分区算法

每产生一个数据,就依次分配到不同的节点。该算法适合于数据问题不确定的场景。其分配的结果是,在数据总量非常庞大的情况下,每个节点中数据是很平均的。但生产者与数据节点间的连接要长时间保持。

6.1.1.2 时间片轮转分区算法

在某人固定长度的时间片内的数据都会分配到一个节点。时间片结束,再产生的数据就会被分配到下一个节点。这些节点会被依次轮转分配数据。该算法可能会出现节点数据不平均的情况(因为每个时间片内产生的数据量可能是不同的)。但生产者与节点间的连接只需占用当前正在使用的这个就可以,其它连接使用完毕后就立即释放。

6.1.1.3 数据块分区算法

在整体数据总量确定的情况下,根据各个节点的存储能力,可以将连接的某一整块数据分配到某一节点。

6.1.1.4 业务主题分区算法

数据可根据不同的业务主题,分配到不同的节点。

6.1.2 哈希分区

哈希分区规则是充分利用数据的哈希值来完成分配,对数据哈希值的不同使用方式产生了不同的哈希分区算法。哈希分区算法相对较复杂,这里详细介绍几种常见的哈希分区算法。

6.1.2.1 节点取模分区算法

该算法的前提是,每个节点都已分配好了一个唯一序号,对于N个节点的分布式系统,其序号范围为[0, N-1]。然后选取数据本身或可以代表数据特征的数据的一部分作为key,计算hash(key)与节点数量N的模,该计算结果即为该数据的存储节点的序号。
该算法最大的优点是简单,但其也存在较严重的不足。如果分布式系统扩容或缩容,已经存储过的数据需要根据新的节点数量N进行数据迁移,否则用户根据key是无法再找到原来的数据的。生产中扩容一般采用翻倍扩容方式,以减少扩容时数据迁移的比例。

6.1.2.2 一致性哈希分区算法

一致性hash算法通过一个叫作一致性hash环的数据结构实现。这个环的起点是0,终点是232 - 1,并且起点与终点重合。环中间的整数按逆/顺时针分布,故这个环的整数分布范围是[0, 232-1]。

上图中存在四个对象o1、o2、o3、o4,分别代表四个待分配的数据,红色方块是这四个数据的hash(o)在Hash环中的落点。同时,图上还存在三个节点m0、m1、m2,绿色圆圈是这三节点的hash(m)在Hash环中的落点。
现在要为数据分配其要存储的节点。该数据对象的hash(o) 按照逆/顺时针方向距离哪个节点的hash(m)最近,就将该数据存储在哪个节点。这样就会形成上图所示的分配结果。
该算法的最大优点是,节点的扩容与缩容,仅对按照逆/顺时针方向距离该节点最近的节点有影响,对其它节点无影响。
当节点数量较少时,非常容易形成数据倾斜问题,且节点变化影响的节点数量占比较大,即影响的数据量较大。所以,该方式不适合数据节点较少的场景。

6.1.2.3 虚拟槽分区算法

该算法首先虚拟出一个固定数量的整数集合,该集合中的每个整数称为一个slot槽。这个槽的数量一般是远远大于节点数量的。然后再将所有slot槽平均映射到各个节点之上。例如,Redis分布式系统中共虚拟了16384个slot槽,其范围为[0, 16383]。假设共有3个节点,那么slot槽与节点间的映射关系如下图所示:

而数据只与slot槽有关系,与节点没有直接关系。数据只通过其key的hash(key)映射到slot槽:slot = hash(key) % slotNums。这也是该算法的一个优点,解耦了数据与节点,客户端无需维护节点,只需维护与slot槽的关系即可。
Redis数据分区采用的就是该算法。其计算槽点的公式为:slot = CRC16(key) % 16384。CRC16()是一种带有校验功能的、具有良好分散功能的、特殊的hash算法函数。其实Redis中计算槽点的公式不是上面的那个,而是:slot = CRC16(key) &16383。
若要计算 a % b,如果b是2的整数次幂,那么 a % b = a & (b-1)。

6.2 系统搭建与运行

6.2.1 系统搭建

6.2.1.1 系统架构

下面要搭建的Redis分布式系统由6个节点构成,这6个节点的地址及角色分别如下表所示。一个master配备一个slave,不过master与slave的配对关系,在系统搭建成功后会自动分配。

序号 角色 地址
1 master 127.0.0.1:6380
2 master 127.0.0.1:6381
3 master 127.0.0.1:6382
4 slave 127.0.0.1:6383
5 slave 127.0.0.1:6384
6 slave 127.0.0.1:6385
6.2.1.2 删除持久化文件

先将之前“Redis主从集群”中在Redis安装目录下生成的RDB持久化文件dump638*.conf与AOF持久化文件删除。因为Redis分布式系统要求创建在一个空的数据库之上。注意,AOF持久化文件全部在appendonlydir目录中。

6.2.1.3 创建目录

在Redis安装目录中mkdir一个新的目录cluster-dis,用作分布式系统的工作目录。

6.2.1.4 复制2个配置文件

将cluster目录中的redis.conf与redis6380.conf文件复制到cluster-dis目录。

6.2.1.5 修改redis.conf

对于redis.conf配置文件,主要涉及到以下三个四个属性:

6.2.1.5.1 dir

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛仔码农@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值