1. 首页
  2. > 海外移民投资 >

是否集群是什么意思(集群化)

节点

一个Redis集群通常是由多个节点组成。在没有搭建成集群的时候,它们没有任何的关系。


CLUSTER MEET <ip> <po集群rt>

将这条命令发送给某个节点,就可以让节点与ip和port所指定的节点握手。当握手成功时,表示该节点已经成功加入到集是什么群当中。


在集群模式下,每个节点都是是什么一台Redis服务器。在启动服务器的时候,会通过cluster-enabled选是否项的值是否为yes来表示是否开启服务器的集群模式。每个节点在单机情况下还是在集群模式下使用的服务器组件不会发生变化。


在开启集群模式的时候,服务器会创建一个clusterState类型的结构来保存当前节点视角下的集群状态。


在集群模式中,每个节点都会使用cluster.h/clusterNode结构来保存自己的当前状态,同时也会为其他节点创建一个clusterNo是否de结构来保存其他节点的状态信息。


Redis集群为了能够存储大量的数据信息,采用分片的方式将大量数据保存在数据库中,这个数据库被划分为16384个槽。这里说的槽可以理解为一个虚拟的逻辑概念,表示存放数据的一个逻辑容器,redis槽的标识范围是0~16383。每个操作映射一个大数据子集。例如,10万个数据,16383个槽,按照一定的哈希规则,对每个数字做一个哈希,然后对16383取余,结果就是这个数据要进入的槽。


如果数据库中的槽全部启动,则集群处于上线的状态,否则,处于下线的状态。


对于16384个槽该如何来划分呢?


Redis集群的服务器端负责管理节点、槽、数据,在划分槽的时候,是根据hash函数来划分的,优点是数据分散度高,缺点是无法顺序访问数据。


在cluster.h/clusterNode结构中有slots和numslots属性,它们记录了Redi意思s节点负责处理那些槽,其中,slots属性是一个无符号二进制数组,其定义如下:


unsigned char slots[CLUSTER_SL意思OTS/8]

其中CLUSTER_SLOTS就是槽数,这表示这个数组的长度为16384/8=2048字节。当slot索引i上的二进制值为1的时候,表示该节点负责处理槽i,如果为0,则表示不负责处理该下标对应的槽,numslots表示该节点负责处理的槽的总数量。


一个节点除了将自己处理的槽记录在clusterNode结构中之外,还会将自己的slots数组以消息的方式发送给集群中的其它节点,告诉其它节点自己目前处理那些槽。


当为集群中的所有节点指派了槽之后,集集群群中的所有槽的信息都会被记录在cluster.h/clusterState结构中,化该结构的s化lots数组属性记录了集群中16384个槽的指派信息。其slots数组的定义如下:


clusterNode *slots[CLUSTER_SLOTS]

当slots[i]指向null的时候,表示没有任何节点负责处理槽i。


当其指向一个clusterNode结构时,表示i已经指派给了clusterNode所代表的节点。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息