redis集群维护常用命令

  • redis-cli参数说明
  • 常用操作示例
  • 创建集群
  • 查看集群节点
  • 检查和查看槽位分布
  • 迁移槽位
  • 非交互式迁移槽位
  • 接收指定槽位
  • 删除指定槽位
  • 平衡集群节点slot数量
  • 查看指定节点错误数
  • 添加新节点
  • 添加新节点作为slave
  • 删除从节点
  • 添加新节点至指定master
  • 查看集群信息


redis-cli参数说明

常用操作示例

示例中redis-cli及集群版本都为5.0.10

创建集群

redis-cli --cluster create 172.21.205.85:8001 172.21.205.85:8101 172.21.205.85:8201 172.21.205.85:8301 172.21.205.85:8401 172.21.205.85:8501 --cluster-replicas 1

#Redis-cli将展示默认配置。输入yes接受建议的配置。集群将被配置并创建,cluster-replicas 指定每个主节点分配多少个从节点。

查看集群节点

redis-cli -h 172.21.205.85 -p 8001 cluster nodes

节点ID:服务启动时自动创建得一个40字节的随机字符串,一般不会改变

ip:port: 服务通信使用的ip及端口

flags: 逗号分割的标记位,可能的值有: myself, master, slave等

master: 如果节点是slave,则这里列出master节点ID,否则的话这里列出”-“。

ping-sent::最近一次发送ping的时间,这个时间是一个unix毫秒时间戳,0代表没有发送过.

pong-recv:最近一次收到pong的时间,使用unix时间戳表示。

config-epoch: 节点的epoch值,每当节点发生失败切换时,都会创建一个新的,独特的,递增的epoch。如果多个节点竞争同一个哈希槽时,epoch值更高的节点会抢夺到。

link-state:集群节点间的链接状态,值为 connected 或 disconnected.。

slot:哈希槽值或者一个哈希槽范围,可以有多个范围和不连续槽位。

redis cluster集群如何验证是否成功 检查redis集群状态命令_运维

检查和查看槽位分布

redis-cli --cluster check 172.21.205.85:8001

该命令列出节点key数量,槽位数量及分布,主从关系,槽位状态是否异常

redis cluster集群如何验证是否成功 检查redis集群状态命令_运维_02

迁移槽位

redis-cli --cluster reshard 172.21.205.85:8001
#本次操作后有2个节点分别迁移250个槽位至指定节点。



How many slots do you want to move (from 1 to 16384)? 500#输入迁移数量
What is the receiving node ID? 5d772d83ddb9d2ac8b55ec5064aa0f1ee99f8cd5
#输入接收ID
Please enter all the source node IDs. Type ‘all’ to use all
the nodes as source nodes for the hash slots. Type ‘done’ once you
entered all the source nodes IDs. Source node #1: all#选择500槽位来源
Ready to move 500 slots. Source nodes:
M: a56b7ef6fbd832398cca527f50029e6efe500e5c 172.21.205.85:8001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: af827010c2a54715eeae34b1649f4b20c6b677e2 172.21.205.85:8101
slots:[5461-10922] (5462 slots) master
1 additional replica(s) Destination node:
M: 5d772d83ddb9d2ac8b55ec5064aa0f1ee99f8cd5 172.21.205.85:8201
slots:[10923-16383] (5461 slots) master
1 additional replica(s)*

redis cluster集群如何验证是否成功 检查redis集群状态命令_中间件_03

非交互式迁移槽位

redis-cli --cluster reshard <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes

<host>:<port>指定集群任意节点

–cluster-from 来源

–cluster-to 接收节点

–cluster-slots 迁移多少salts

redis-cli --cluster reshard 172.21.205.85:8001 --cluster-from a56b7ef6fbd832398cca527f50029e6efe500e5c --cluster-to 5d772d83ddb9d2ac8b55ec5064aa0f1ee99f8cd5 --cluster-slots 500 --cluster-yes

#上例迁移后(500 + 前例中的250)

redis cluster集群如何验证是否成功 检查redis集群状态命令_5e_04

接收指定槽位

该命令将一组hash slots分配给接收命令的节点。 如果命令执行成功,节点将将获得指定的hash slots。

#CLUSTER ADDSLOTS

redis-cli -c -h 172.21.205.85 -p 8201 CLUSTER ADDSLOTS 1 2 3

因为slots已经被分配了,报错

redis cluster集群如何验证是否成功 检查redis集群状态命令_2d_05

删除指定槽位

redis-cli -c -h 172.21.205.85 -p 8201 cluster delslots 747

#删除指定槽位747

redis cluster集群如何验证是否成功 检查redis集群状态命令_运维_06

redis cluster集群如何验证是否成功 检查redis集群状态命令_2d_07

平衡集群节点slot数量

redis-cli --cluster rebalance 172.21.205.85:8001

#执行后slot被平衡迁移,节点为0的master没有slot。

redis cluster集群如何验证是否成功 检查redis集群状态命令_5e_08


redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 172.21.205.85:8001

#redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters –cluster-simulate 172.21.205.85:8001只模拟

#新增节点也分配slot

redis cluster集群如何验证是否成功 检查redis集群状态命令_中间件_09

查看指定节点错误数

返回指定节点的故障报告个数,故障报告是Redis Cluster用来使节点的PFAIL状态(这意味着节点不可达)晋升到FAIL状态而的方式,这意味着集群中大多数的主节点在一个事件 窗口内同意该节点不可达

错误报告来源:
一个节点不可达时间超过 Redis Cluster 配置中的超时时间,这个节点会被其他节点用PFAIL标记。每当一个节点处理来自其他节点的流言(gossip)包时,这个个节点都会建立故障报告(如果需要会刷新TTL),并且会记住发送消息包的节点所认为处于PFAIL状态下的其他节点。每个故障报告的生存时间是节点超时时间的两倍。如果在一段给定的事件内,一个节点被另一个节点标记为PFAIL状态,并且在相同的时间内收到了其他大多数主节点关于该节点的故障报告(如果该节点是主节点包括它自己),那么该节点的故障状态会从PFAIL晋升为FAIL,并且会广播一个消息,强制所有可达的节点将该节点标记为FAIL。

#CLUSTER COUNT-FAILURE-REPORTS

redis-cli -c -h 172.21.205.85 -p 8201 cluster count-failure-reports a56b7ef6fbd832398cca527f50029e6efe500e5c

redis cluster集群如何验证是否成功 检查redis集群状态命令_运维_10

添加新节点

#redis-cli --cluster add-node 新节点ip:端口 任意集群节点ip:端口

redis-cli --cluster add-node 172.21.205.85:8601 172.21.205.85:8001

redis cluster集群如何验证是否成功 检查redis集群状态命令_redis_11

添加新节点作为slave

#redis-cli --cluster add-node 新节点ip:端口 任意集群节点ip:端口 --cluster-slave

#新节点将被添加为最少master节点的从节点,本例中自动添加为8601的从节点

redis-cli --cluster add-node 172.21.205.85:8701 172.21.205.85:8001 --cluster-slave

redis cluster集群如何验证是否成功 检查redis集群状态命令_中间件_12

删除从节点

#redis-cli --cluster del-node 任意集群节点ip:端口 要删除的节点id

#删除之后, 该节点会被shutdown。当删除掉的节点重新起来之后不能自动的加入到集群中, 但其和主的复制是正常的, 如果想要再次加入集群, 需要先在该节点执行cluster reset, 在使用add-node进行添加

redis-cli --cluster del-node 172.21.205.85:8001 30b5526f8724f767ab05d48d0a4b360a0e1ef94d

redis cluster集群如何验证是否成功 检查redis集群状态命令_redis_13

添加新节点至指定master

#redis-cli --cluster add-node 新节点ip:端口 任意集群节点ip:端口 --cluster-slave --cluster-master-id 指定masterid

#必须为master id,本例中8701节点被添加后删除, nodes.conf中已有集群信息,加入会报错,需停止服务,清除文件后重启服务,或登录该服务 reset 。

redis-cli --cluster add-node 172.21.205.85:8701 172.21.205.85:8001 --cluster-slave --cluster-master-id af827010c2a54715eeae34b1649f4b20c6b677e2

redis cluster集群如何验证是否成功 检查redis集群状态命令_redis_14

查看集群信息

redis-cli --cluster info 172.21.205.85:8001

redis cluster集群如何验证是否成功 检查redis集群状态命令_redis_15