当前位置: 首页 > 网络应用技术

REDIS群集详细信息(从服务中解释,完全了解REDIS群集)

时间:2023-03-07 10:32:04 网络应用技术

  REDIS群集是Redis提供的分布式数据库解决方案。该集群使用碎片进行数据共享。REDIS群集主要实现以下目标:

  关于Redis簇的研究,如果没有经验,兄弟们建议阅读这三篇文章(中剧集):

  REDIS群集教程

  http://redis.cn/topics/cluster-tutorial.html

  REDIS群集规范

  http://redis.cn/topics/cluster-spec.html

  REDIS3 MAIN 3部署从伪聚集群集

  https://blog.csdn.net/qq_41125219/article/details/118686281

  下面的内容取决于三个大师的发展,三个在下图中:

  资源列表:

  [2] 192.168.211.107:6359

  REDIS群集没有使用一致性哈希,而是引入了哈希插槽的概念。Redis群集具有16,384个哈希插槽。每个钥匙决定在验证CRC16之后决定放置哪个插槽16384型号。该结构易于添加或删除节点。集群的EAST节点负责哈希插槽的一部分。例如,上面的资源列表列表群集的三个节点。

  在学习REDIS群集之前,您需要了解群集中REDIS实例的内部结构。当Redis Service节点配置为通过Cluster_Enabled配置打开群集模式时,REDIS服务节点不仅会继续使用服务器在单个机器模式下的组件,但还添加了诸如Custers,cluserndode和CusterLine之类的结构,以将特殊数据存储在群集模式下。

  必须仔细阅读以下三个数据轴承对象,尤其是结构中的注释。

  ClSuternode用于存储节点信息,例如节点,IP地址,端口信息和配置时代的名称。以下代码列出了非常重要的属性:

  在上述代码中可能无法很好地理解的是插槽[16384/8]。实际上,它可以简单地理解为16384尺寸的数组。

  初始clsuternode或未经普莱恩的槽中的clsuternode的插槽如下:

  假设集群是我上面提供的资源列表。

  ClusterLink是Clsuternode中的属性,用于存储连接节点所需的相关信息。

  每个节点将具有Custerstate结构。该结构存储当前群集的所有数据,例如群集状态,群集中的所有节点(主节点,来自节点)等。以下代码列出了一些非常重要的属性:

  惯例中有三种结构需要仔细理解。第一个是插槽阵列。簇状态中的插槽数组与clsuternode中的插槽阵列不同。clsuternode负责整个群集的每个插槽的插槽阵列记录。因此,簇状簇的每个索引的每个索引指向负责凹槽的clusernode。

  如图所示,群集clusstate中的簇中的插槽数组和clsuternode中的插槽数组:

  在REDIS群集中使用两个插槽阵列的原因是用于性能注意事项:

  需要仔细理解的第二个结构是节点词典。尽管结构很简单,但所有clusernode存储在节点词典中。这也是其他杰作的主要位置,也是Redis群集中单个节点中的节点信息的主要位置。因此,请注意。

  需要仔细理解的第三个结构是导入_slots_from [16384]数组和迁移_slots_to [16384]。重新启动群集时,需要使用这两个数组。这里单词的重点是不正确的。

  Redis群集总共有16,384个凹槽。例如,在资源列表列表中,我们位于三个大师和三个大师的群集中,每个主节点负责其相应的插槽,而在三个大师和三个的过程中,我没有看到我指定了将其放在上述部署过程中的插槽。相应的杰作是因为Redis群集将我们内部的凹槽分开,但是我们如何被我们自己捆绑在一起呢?

  我们可以将以下命令发送到节点,并将一个或多个凹槽分配给当前节点以负责:

  群集添加点数

  例如,我们想引诱0和1个插槽以主持[0],我们只需要考虑主节点即可发送以下命令:

  集群addslots 0 1

  分配一个凹槽时,它将更新clusnernode的插槽数组。节点将发送负责处理的插槽,通过消息将其发送到群集中的其他节点的插槽数组。接收消息后,其他节点将更新相应的clusternode.Slots Array和Clusters的Solts数组。

  这实际上相对简单。当我们将cluster addslots命令发送到redis群集中的节点时,当前节点将首先确认是否通过clusterState中的插槽数组确认了分配给当前节点的插槽是否分配给当前节点。并将错误返回给分配的客户端。如果分配给当前节点的所有凹槽未分配给其他节点,则当前节点将把这些插槽分配给自己。

  分配的三个主要步骤:

  在理解这个问题之前,您必须首先知道一个要点。REDIS群集如何计算当前密钥属于哪个插槽?根据官方网站,REDIS实际上没有使用一致性哈希算法。取而代之的是,确定每个请求的密钥将16384型号的凹槽放置在CRC16验证之后。

  hash_slot = crc16(键)mod 16384

  目前,当客户端连接向节点发送请求时,当前接收命令的节点将首先通过算法计算当前密钥的凹槽i,如果您对自己负责,那么当前的节点将响应客户的请求。如果当前节点负责,将经历以下步骤:

  这个问题实际上包括很多问题,例如删除redis群集中的一些节点,以及添加节点等,可以汇总为将哈希凹槽从一个节点移至另一个节点。。它支持在线分布(非停滞),这是官方说的在线重新配置。

  在实施之前查看群集指令,并将操作说明:

  集群用于插槽分配的指令主要如下。AddSlots和delslots主要用于快速分配和快速删除插槽。通常,我们在刚刚建立群集时使用它。ClusterSetSlot Slot节点节点也用于将凹槽直接分配给指定的节点。如果集群已建立最后两个用于重新分配的两个,则其代表的含义如下:如下:

  上面的两个句子不明白。这是官方描述。如果我不明白,我会给您一个流行的描述。整个过程大致如下:

  牛皮!大家好!

  该问题也被正式考虑。还记得当我们谈论簇结构时吗?

  使用以上两个数组,您可以确定当前插槽是否在迁移,迁移在哪里,迁移哪里?有趣的不是简单...

  目前,当您返回问题时,客户端请求的密钥只是一个迁移插槽。然后接收命令的节点首先尝试在您自己的数据库中找到键。如果插槽尚未迁移,并且当前密钥尚未迁移,则可以直接响应客户端的请求。如果键已消失,此时节点将查询与迁移_slots_to array相对应的索引groove。如果索引的值不是零,而是指向clussernode结构,则意味着该密钥已迁移到此cluserndode。这次,节点将不会继续处理指令,而是返回询问命令。此命令还将携带与与导入插槽相对应的相应的IP和端口对应的IP和端口。接收询问命令后,客户需要将请求转换为正确的节点,但是您需要付款。注意(所以我在这里放了一个表情符号引起读者的注意)。

  如前所述,当节点发现当前插槽不属于处理时,将返回移动指令。那么,当处理迁移插槽时该怎么办?

  节点发现插槽正在迁移,询问命令将返回给客户端。客户端将接收询问命令,其中包含插槽中的节点IP和clusternode的端口。必须发出此订单以告诉当前节点您必须处理此请求以进行例外,因为该插槽已移交给您,您不能直接拒绝我(您不能直接拒绝我(因此,如果Redis确实确实如此未接收询问命令,它将直接查询节点的簇状态,并且迁移凹槽尚未更新到簇状态,然后您只能直接返回移动,以免多次循环...),接收,接收并接收它。问候命令的节点将强制此请求一次(仅执行一次,并且下一次您需要提前发送询问命令)。

  REDIS群集故障相对简单。这实际上与哨兵中的主要节点相似,或者在最长的时间内没有响应。新的主节点从节点重新选举实际上是相似的。当然,前提是redis群集中的每个主节点。我们提前设置了一个节点,否则嘿...没有戏剧性。粗略的步骤如下:

  在这里,我写得很模糊。如果您需要仔细挖掘,则必须阅读本文:

  http://redis.cn/topics/cluster-spec.html

  或者,您可以很好地阅读Huang Jianhong先生的“ Redis设计和实现”的“重新设计和实施”。我也指很多内容。