加入收藏 | 设为首页 | 会员中心 | 我要投稿 济宁站长网 (https://www.0537zz.cn/)- 行业智能、边缘计算、专有云、AI硬件、5G!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

你应该知道 23 个非常有用的 NodeJs 库

发布时间:2021-02-13 15:26:47 所属栏目:传媒 来源:互联网
导读:这个命令会把slot1分配给节点B。 6、Slave 一个slot会被保存多个副本,既一个slot会保存在多个节点上,也就是slot会复制到多个节点上。Redis Cluster的复制是以节点为单位的,一个节点上的所有slot会采用相同的复制。 具体来说就是,其中一个节点会负责处理

这个命令会把slot1分配给节点B。

6、Slave

一个slot会被保存多个副本,既一个slot会保存在多个节点上,也就是slot会复制到多个节点上。Redis Cluster的复制是以节点为单位的,一个节点上的所有slot会采用相同的复制。

具体来说就是,其中一个节点会负责处理这个节点上所有slot的写操作,这个节点被称为master,而其余的节点被称为slave节点。一个master可以有多个slave。在同一个节点上的所有slot的所有的写操作都会被从master节点异步复制到所有的slave节点。所以slave会具有与master相同的slot。

通过SLAVEOF命令来设置slave节点。SLAVEOF命令用来改变一个slave节点的复制设置。SLAVEOF命令有两种格式:

  • SLAVEOF NO ONE
  • SLAVEOF host port

具体来讲,SLAVEOF NO ONE命令会停止一个slave节点的复制,并且把这个slave节点变成master节点。SLAVEOF host port命令会停止一个slave节点的复制,丢弃数据集,开始从host和port指定的新master节点复制。

master和slave的关系会被记录在hash slot table中,相当于一个slot会映射到多个节点上,其中一个节点是master,其他记录的节点是slave。

加入了master/slave信息后的hash slot map类似于:

 

这个命令会把slot1、slot2、slot3从节点A上删除。

CLUSTER SETSLOT用来把一个slot分配给指定的节点,可以不是当前连接的节点,另外这个命令还可以设定MIGRATING和IMPORTING两个状态,我们后面再讲。例如,连接到节点A执行:

 

与node table相同,hash slot map也会在每个节点上都会保存一份,Redis Cluster通过gossip协议把hash slot map复制到所有节点。同样,后面还会讲述hash slot map的复制。

《Redis官方文档》Redis Cluster Specification, https://redis.io/topics/cluster-spec.

5、数据分片变更

要修改数据分片关系,可以连接任意一个节点,给这个节点发送CLUSTER ADDSLOTS, CLUSTER SETSLOT, CLUSTER DELSLOT命令,修改这个节点上的hash slot map,该节点会把这个修改复制到所有其他节点,其他节点会用接收到的hash slot map更新自己的hash slot map。

CLUSTER ADDSLOTS、CLUSTER DELSLOTS、CLUSTER SETSLOT命令的使用如下:

 

举例来说明:

  • 打算搭建一个3个master节点的集群,当集群创建以前,所有3个节点的node table都只包含自己。给其中的一个节点A发送命令,CLUSTER MEET NodeB,节点A修改自己的node table,将NodeB添加到自己的node table中,并且连接节点B,把自己的node table发送给节点B,节点B收到节点A发送过来的node table,会更新自己的node table,这时节点B就知道集群中还有节点A存在。

这时,给节点A再发送CLUSTER MEET NodeC,节点A会把节点C添加到自己的node table,并且把自己的node table复制给节点B,节点B把接收到的node table更新自己的本地的node table,从而知道节点C的加入。同样节点A会把自己的node table发给节点C,节点C会更新自己本地的node table,从而知道要加入的集群中已经存在节点A和节点B。

4、槽

前面说过Redis Cluster会把数据分成多份,也就是把数据进行分片。Redis Cluster中的每一份数据被称为槽(Slot)。Redis Cluster将数据拆分成16384份,也就是说有16384个槽。

Redis Cluster采用哈希(Hash)机制来拆分数据。首先,数据的key通过CRC16算法计算出一个哈希值。这个哈希值再对16384取余,这个余数就是槽位,被称为hash slot。具体的CRC16算法可以参看Redis官方文档。所有余数相同的key都在一个slot中,也就是说,一个slot其实就是一批hash余数相同的key。

每个hash slot都会保存在Redis Cluster一个节点中。具体哪个hash slot被保存在哪个实例中,就形成了类似于一个map的数据结构,被称之为hash slot map。hash slot map类似于:


(编辑:济宁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读