你应该知道 23 个非常有用的 NodeJs 库
这个命令会把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命令会停止一个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命令的使用如下: 举例来说明:
这时,给节点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类似于: (编辑:济宁站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |