【03-Redis集群命令】
【博文总目录>>>】【工程下载>>>】
CLUSTER ADDSLOTS slot [slot …]
起始版本:3.0.0
时间复杂度:O(N) N是参数的哈希插槽总数
这个命令是用于修改某个节点上的集群配置。具体的说它把一组hash slots分配给接收命令的节点。 如果命令执行成功,节点将指定的hash slots映射到自身,节点将获得指定的hash slots,同时开始向集群广播新的配置。
需要注意:
该命令只有当所有指定的slots在接收命令的节点上还没有分配得的情况下生效。节点将
拒绝接纳已经分配到其他节点的slots(包括它自己的)。 2、同一个slot被指定多次的情况下命令会失败。
执行这个命令有一个副作用,如果slot作为其中一个参数设置为importing,一旦节点向自己分配该slot(以前未绑定)这个状态将会被清除。
例子
例如以下命令分配 1 2 3 slot到接收命令的节点:
> CLUSTER ADDSLOTS 1 2 3
OK
但是试图再次执行命令结果将会错误,因为slots已经被分配了。
> CLUSTER ADDSLOTS 1 2 3
ERR Slot 1 is already busy
在Redis集群中的应用
这个命令仅在cluster 模式下生效,而且作用于redis集群以下操作:
创建新集群时,ADDSLOTS用于主节点初始化分配可用的hash slots。
为了修复有未分配slots的坏集群。
有关slots的传播和警告
注意一旦一个节点为自己分配了一个slot集合,它就会开始将这个信息在心跳包的头里传播出去。然而其他节点只有在他们有slot没有被其他节点绑定或者传播的新的hash slot的配置年代大于列表中的节点时才会接受这个信息。
这意味着这个命令应该仅通过redis集群应用管理客户端例如redsi-trib谨慎使用,而且这个命令如果使用了错误的上下文会导致集群处于错误的状态或者导致数据丢失。
返回值
simple-string-reply: 如果命令执行成功返回OK,否则返回错误信息。
CLUSTER COUNT-FAILURE-REPORTS node-id
起始版本:3.0.0
时间复杂度:O(N) N是故障报告的数量
这个命令返回指定节点的故障报告个数,故障报告是Redis Cluster用来使节点的PFAIL状态(这意味着节点不可达)晋升到FAIL状态而的方式,这意味着集群中大多数的主节点在一个事件窗口内同意节点不可达。
A few more details: 更多细节:
一个节点会用PFAIL标记一个不可达时间超过配置中的超时时间的节点,这个超时时间是 Redis Cluster 配置中的基本选项。
处于PFAIL状态的节点会将状态信息提供在心跳包的流言(gossip)部分。 failure reports, remembering that a given node said another given node is in PFAIL condition.每当一个节点处理来自其他节点的流言(gossip)包时,该节点会建立故障报告(如果需要会刷新TTL),并且会记住发送消息包的节点所认为处于PFAIL状态下的其他节点。
每个故障报告的生存时间是节点超时时间的两倍。
如果在一段给定的事件内,一个节点被另一个节点标记为PFAIL状态,并且在相同的时间内收到了其他大多数主节点关于该节点的故障报告(如果该节点是主节点包括它自己),那么该节点的故障状态会从PFAIL晋升为FAIL,并且会广播一个消息,强制所有可达的节点将该节点标记为FAIL。
该命令返回当前节点没有过期的故障报告个数(在两倍的节点超时时间收到的)。该计数值不包含当前节点,该节点是我们要求这个计数值是以我们作为参数所传递的ID的节点,这个计数值只包含该节点从其他节点接收到的故障报告。
当Redis Cluster的故障检测器不能正常工作时,这个命令主要用来调试。
返回值
Integer reply:这个节点有效的故障报告个数。
CLUSTER COUNTKEYSINSLOT slot
起始版本:3.0.0
时间复杂度:O(1)
返回连接节点负责的指定hash slot的key的数量。该命令只查询连接节点的数据集,所以如果连接节点指派到该hash slot会返回0。
> CLUSTER COUNTKEYSINSLOT 7000
(integer) 50341
返回值
Integer reply: 返回连接节点负责的指定hash slot的key的数量, 如果hash slot不合法则返回错误
CLUSTER DELSLOTS slot [slot …]
起始版本:3.0.0
时间复杂度:O(N) where N is the total number of hash slot arguments
在Redis Cluster中,每个节点都会知道哪些主节点正在负责哪些特定的哈希槽
DELSLOTS命令使一个特定的Redis Cluster节点去忘记一个主节点正在负责的哈希槽,这些哈希槽通过参数指定。
在已经接收到DELSLOTS命令的节点环境中,并且因此已经去除了指定哈希槽的关联,我们认为这些哈希槽是未绑定的 。请注意,当一个节点还没有被配置去负责他们(可以通过ADDSLOTS完成槽的分配)并且如果该节点没有收到关于谁拥有这些哈希槽的消息时(节点通过心跳包或者更新包获取消息),这些未绑定的哈希槽是自然而然本来就存在的。
如果一个节点认为一些哈希槽是未绑定的,但是从其他节点接收到一个心跳包,得知这些哈希槽已经被其他节点负责,那么会立即确立其关联关系。而且,如果接收到一个心跳包或更新包的配置纪元比当前节点的大,那么会重新建立关联。
但是,请注意:
命令只在参数指定的哈希槽已经和某些节点关联时有效。
如果同一个哈希槽被指定多次,该命令会失败。
命令执行的副作用是,因为不在负责哈希槽,节点可能会进入下线状态。
例如
以下命令会移除槽5000和槽5001与接收该命令节点的关联
> CLUSTER DELSLOTS 5000 5001
OK
Redis Cluster中的用法
命令只在集群模式下工作,并且对调试非常有用,并且当创建新的集群时,为了可以手动的协调集群配置。当前没有被redis-trib使用,并且主要为了API的完整性存在。
返回值
simple-string-reply:如果命令成功执行返回OK,否则返回一个错误。