初始化集群
- redis-cli -a PWD --cluster create NODE_INFO --cluster-replicas 1
eg: redis-cli -a test_pwd --cluster create 127.0.0.1:6379 127.0.0.1:6380 172.0.0.1:6379 172.0.0.1:6380 --cluster-replicas 1
连接集群客户端
- redis-cli -c -h NODE_IP -p NODE_PORT -a PWD
eg: redis-cli -c -h 127.0.0.1 -p 6379 -a test_pwd
进入客户端后基础命令
- 添加节点:cluster meet <ip> <port>
- 查看集群信息:cluster info
- 查看节点信息:cluster nodes
- 设置从节点:cluster replicate <master_node_id> :将当前从节点设置为 master_node_id 指定节点的slave节点。只能针对slave节点操作(需要先连接登陆到指定待设置的slave节点)
节点(node)
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面
槽(slot)
CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点
CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派
CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中
CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)
键 (key)
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键
移除节点
-
删除 slave 节点
- redis-cli --cluster del-node 节点ip:port 节点id
-
删除 master 节点
- 先对节点进行分片工作,防止数据丢失
redis-cli --cluster reshard 欲删除节点ip:port
- 移除节点
redis-cli --cluster del-node 节点ip:port 节点id
其他
强制删除 master 节点,不做 slot 转移
查看 redis.conf 文件中 dir 的配置路径
在路径下删除关于该节点的 nodes-port(对应端口号).conf、.aof 和.rdb 文件
最后再执行移除节点的命令
如果要彻底移除集群,且不保存数据也可以使用该方式
对于执行集群相关操作的时候出现错误,可以使用 redis-cli --cluster check ip:port 检查集群是否有错误,使用 redis-cli --cluster fix ip:port 修复相关错误
slot相关
# 免交互重新分片脚本语法
redis-cli --cluster reshard <host>:<port> --cluster-from <node-id> --cluster-to <node-id> --cluster-slots <number of slots> --cluster-yes
# 将node01(192.168.1.181:7001)的1000个哈希槽分配给node02(192.168.1.182:7003)
[root@node01 ~]# redis-cli --cluster reshard 192.168.1.181:7000 --cluster-from 5277b27644e037f0d92e39a44dc6f40d7f422a3f --cluster-to 4669f9ed7daa587c31de2dc2a0243be07049b8a6 --cluster-slots 1000 --cluster-yes
redis 集群批量删除key
redis-cli -c -h 127.0.0.1 -p 6379 keys "key:*" | awk '{system("redis-cli -c -h 127.0.0.1 -p 6379 del " $1)}'