redis集群如何保证数据的一致性-redis集群hash一致性(3-15-64)

更新时间:2024-12-13 分类:Redis 浏览量:2

Redis本文目录一览:

  • 1、redis自带的集群为什么不用一致性哈希算法
  • 2、什么是一致性哈希?
  • 3、玩转Redis的高可用(主从、哨兵、集群)
  • 4、redis集群主数据都是一致的吗为什么?
  • 5、Hash分区
  • 6、redis集群使用一致性hash吗

redis自带的集群为什么不用一致性哈希算法

1、考虑增加服务器节点的情况,该节点顺时针方向的数据仍然被存储到顺时针方向的节点上,但它逆时针方向的数据被存储到它自己。这时候只有部分数据会失效,被映射到新的缓存区。考虑节点减少的情况。

2、Redis的Hash槽分配不是 一致性Hash ,一致性Hash是成一个hash环,当节点加入或者失效的时候,在环上顺时针找到对应节点。而Redis集群属于手动分配 线性Hash槽 ,需要手动指定,并且尽量做到各个节点solt平均分配。

3、Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽。

4、Redis 集群模式本身没有使用一致性 hash 算法,而是使用 slots 插槽。

5、前提条件:Redis Cluster 不使用一致性哈希,而是使用不同形式的分片 每个键在概念上都是我们所谓的 哈希槽的一部分 。

6、Redis集群是通过分片来实现横向扩展的,即将数据分散存储在不同的节点上,每个节点只负责一部分数据的读写操作。因此,在集群中,每个节点都存储着不同的数据片段,主节点和从节点之间也会进行数据同步,以保证数据的一致性。

什么是一致性哈希?

一致性哈希算法是在1997年由麻省理工学院提出的一种分布式哈希(DHT)算法。其设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。

环割法(一致性 hash)环割法的原理如下: 初始化的时候生成分片数量 X × 环割数量 N 的固定方式编号的字符串,例如 SHARD-1-NODE-1,并计算所有 X×N 个字符串的所有 hash 值。

一致性hash 是个可以理解为圆形,这个圆形称为hash环,环上可以最多建立2的32次方减1个节点。存数据: 一般根据key.hashcode%n=k,如果k 的范围 1k2100,按照顺时针方向,把数据放在node_2100这个节点上。

一致性哈希(Consistent Hashing)和数据一致性没有任何关系,这是个关键的理解错误。 一致性哈希只是保证在分布式结构下,哈希结果不会因为某个 node 挂掉而使得所有的键都不能用。

哈希表通常是基于数组的,数组创建后难于扩展。 也没有一种简便的方法可以以任何一种顺序〔例如从小到大)遍历表中的数据项 。 综上, 如果不需要有序遍历数据,井且可以提前预测数据量的大小。

哈希负载均衡原理 ngx_http_upstream_hash_module支持普通的hash及一致性hash两种负载均衡算法,默认的是普通的hash来进行负载均衡。

玩转Redis的高可用(主从、哨兵、集群)

基于以上,Redis集群方案显得尤为重要。通常有3个途径:官方Redis Cluster;通过Proxy分片;客户端分片(Smart Client)。以上三种方案各有利弊。

主从复制可以提高Redis集群的可用性,当主节点出现故障时,从节点可以自动或者手动替代主节点的职责,从而保证Redis集群的高可用性。

哨兵集群,基于主从复制模式,所有的主从配置优点,它全有。主从可以切换,故障可以转移,系统的可用性就会更好。哨兵模式就是主从模式的升级,手动到自动,更加健壮。集群容量一旦到达上限,在线扩容十分麻烦。

主节点会定期将数据同步到从节点中,保证数据一致性的问题。这种集群方式在运行时存在一些问题:Redis的哨兵机制就是解决主从复制存在缺陷(选举问题),解决问题保证我们的Redis高可用,实现自动化故障发现与故障转移。

哨兵模式就是在主从模式的基础上再加一个哨兵集群。每个哨兵都会监控主节点和从节点的状态。如果主节点挂了,就会从从节点中选出一个来作为主节点,以达到高可用的目的。

redis集群主数据都是一致的吗为什么?

1、主节点和从节点保存的数据是相同的,但是因为同步,从节点的数据会有一点延迟。但是主从模式的高可用会有问题。因为主节点挂了之后是没有自动选主机制的,需要人工干预来指定一个从节点作为主节点。

2、针对完整的重同步的缺陷,Redis提供了部分的重同步功能。

3、Redis 集群是通过在不同的节点之间分配数据来实现的。每个节点都有自己的数据子集,其中一些是主节点,而另一些是从节点。当需要更多存储空间或更多的处理能力时,可以通过向集群添加更多的节点来实现扩展。

Hash分区

1、常见的哈希分区规则有:节点取余分区、一致性哈希分区和虚拟槽分区。

2、HASH分区策略是根据用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。

3、常规HASH和线性HASH的增加收缩分区的原理是一样的。增加和收缩分区后原来的数据会根据现有的分区数量重新分布。

4、范围分区就是将数据表内的记录按照某个属性的取值范围进行分区。

5、oraclehash分区数量不均匀的原因是数据库升级、迁移时,出现大量无效对象。

redis集群使用一致性hash吗

1、使用。设定一个圆环上 0-2^32-1 的点,每个点对应一个缓存区,每个键值对存储的位置也经哈希计算后对应到环上节点。

2、Redis Cluster 不使用一致性哈希,而是使用不同形式的分片 每个键在概念上都是我们所谓的 哈希槽的一部分 。Redis Cluster 有 16384 个哈希槽,计算哈希值是多少 给定密钥的插槽,我们只需取密钥的 CRC16 模 16384。

3、我们都知道在集群模式下key是需要进行路由的,那就需要有路由策略,Redis Cluster并没有使用一致性hash的方案,而是使用分配slot的方式进行key路由。

4、Redis 集群模式本身没有使用一致性 hash 算法,而是使用 slots 插槽。