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

这篇具有很好参考价值的文章主要介绍了动力节点Redis7笔记-第六章Redis分布式系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

6 Redis分布式系统

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

6.1 数据分区算法

分布式数据库系统会根据不同的数据分区算法,将数据分散存储到不同的数据库服务器节点上,每个节点管理着整个数据集合中的一个子集。
动力节点Redis7笔记-第六章Redis分布式系统
常见的数据分区规则有两大类:顺序分区与哈希分区。

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]。
动力节点Redis7笔记-第六章Redis分布式系统
上图中存在四个对象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槽与节点间的映射关系如下图所示:
动力节点Redis7笔记-第六章Redis分布式系统
而数据只与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目录中。
动力节点Redis7笔记-第六章Redis分布式系统

6.2.1.3 创建目录

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

6.2.1.4 复制2个配置文件

将cluster目录中的redis.conf与redis6380.conf文件复制到cluster-dis目录。
动力节点Redis7笔记-第六章Redis分布式系统

6.2.1.5 修改redis.conf

对于redis.conf配置文件,主要涉及到以下三个四个属性:文章来源地址https://www.toymoban.com/news/detail-469610.html

6.2.1.5.1 dir

到了这里,关于动力节点Redis7笔记-第六章Redis分布式系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis第五第六章-redis并发缓存架构和性能优化

    缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。 造成缓存穿透的基本原因有两个:

    2024年02月08日
    浏览(39)
  • docker 笔记5:redis 集群分布式存储案例

    尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 目录 1.cluster(集群)模式-docker版哈希槽分区进行亿级数据存储  1.1面试题 1.1.1  方案1 哈希取余分区 1.1.2 方案2 一致性哈希算法分区  原理 优点 一致性哈希算法的容错性  一致性哈希算法的扩展性  缺点  一致性哈希算

    2024年02月09日
    浏览(29)
  • python笔记:第六章函数&方法

    由系统提供,直接拿来用或是导入模块后使用 函数是结构化编程的核心 使用 def 来定义函数 为函数添加文档字符串 如果不自定义返回值,则无返回值 return 用明确的变量组来接受函数输出值,便于后期查看(序列解包),不用元组 标明函数的返回值 注意:这

    2024年02月13日
    浏览(29)
  • 线代第六章 二次型 复习笔记

    二次型是一个多元函数 f (x1,x2,…,xn),每一项都是二次的,未知数的个数为任意个。 二次型可以写成矩阵形式(三个矩阵相乘): f (x1,x2,…,xn)   中间的矩阵A是对称矩阵,A称为二次型f 的对应矩阵。 矩阵A的秩称为二次型的秩。r(f)=r(A) 已知二次型,怎么写出二次型的对应矩阵

    2024年02月13日
    浏览(30)
  • Redis7笔记(完结)

    源码分析个人认为现在不需要看,需要了解的可以看看。

    2023年04月20日
    浏览(32)
  • 阿里架构师分享分布式架构笔记文档:Nginx+Redis+ZK+Kafka+MQ等

    Nginx 是一款非常优秀的开源软件,工作需要,研究了很久一段时间的 Nginx 源码,在研究学习的过程中收益颇多。作为高性能服务器的代表,为了追求极致的高性能,在许多方面,Nginx 的源码实现都可以称得上是典范。 市面上真正适合学习的Nginx资料太少,有的书或资料虽然讲

    2024年02月10日
    浏览(39)
  • Redis7学习笔记01

    ①、适合对象,从小白到熟手,一套全包圆 ②、Redis专题-大厂面试题,含100道+ ③、Redis专题-真实需求生产真实案例 ④、Redis7新特性 ①、面试题 ②、专题 Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰

    2024年02月15日
    浏览(30)
  • Redis7笔记(未完结)

    源码分析个人认为现在不需要看,需要了解的可以看看。

    2023年04月16日
    浏览(23)
  • 计算机网络-笔记-第六章-应用层

    一、第一章——计算机网络概述 二、第二章——物理层 三、第三章——数据链路层 四、第四章——网络层 五、第五章——运输层 六、第六章——应用层 目录 六、第六章——应用层 1、应用层概述 2、(C/S)客户-服务器方式 (P2P)对等方式 (1)客户-服务器方式【C/S】 (2)

    2024年02月10日
    浏览(31)
  • Rust in Action笔记 第六章 内存

    OptionT 类型在Rust中使用了空指针优化(null pointer optimization)来保证该类型在编译后的二进制文件中占用0个字节。 None 变量是通过一个空指针 null pointer 来表示; 内存地址、指针、引用的区别,内存地址是指在内存中的一个字节,由汇编语言提供的一个抽象;指针,有时候也

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包