集群信息
Redis版本:7.2.4
集群规模:三主三从
部署集群时基本没遇到什么问题,主要问题还是域名解析失败,再次建议各位,尽量使用ip进行连接!!!
下面的内容是一些常用命令的用法解释:
1. 创建集群
在命令行输入以下命令即可创建集群,这里我帮大家测试过了,可以使用域名
redis-cli --cluster create --cluster-replicas 1 -a 111111 redis1:6379 redis2:6379 redis3:6379 redis4:6379 redis5:6379 redis6:6379
--cluster-replicas 1
是redis-cli --cluster create
命令的一个参数,用于指定在创建Redis集群时,每个主节点应该有多少个副本节点(或称为从节点)。例如,如果你有6个Redis节点,并且使用
--cluster-replicas 1
参数,那么Redis集群将会有3个主节点和3个副本节点。每个主节点都有一个对应的副本节点,副本节点会复制主节点的数据。如果你设置
--cluster-replicas 0
,那么所有的节点都将是主节点,没有副本节点。这种情况下,如果任何一个主节点失败,那么这个节点上的数据可能会丢失。
主从比例不正确的话,会报错哈。另外,这里的主从都是随机分配的,和写创建集群命令时的redis顺序无关
2. 查询集群
查询集群有两种方式:
(1) 进入集群的任意一个节点,输入以下命令:
cluster nodes
结果如下:
第一列是节点id,后面跟着节点的ip端口、角色(主从)等信息。如果是从节点,角色后面会跟着主节点的id
(2) 在终端使用以下命令查询(查询的内容会更详细):
redis-cli -a 111111 --cluster check 172.19.0.2:6379
可以发现,查询的结果不仅仅是集群的主从关系,还包括节点的哈希槽分配情况
--cluster check后面跟任意一个集群节点的ip:端口即可
3. 集群扩容和缩容
集群的扩容:
(1) 将新redis实例添加进集群,使用以下命令,这个新的redis会以master的身份进入集群
redis-cli -a 111111 --cluster add-node 新redis的ip:端口 集群中任意一个节点的ip:端口
“集群中任意一个节点的ip:端口”这个参数的作用是让redis系统明白你要将该节点接入哪个集群,这个参数相当于该集群的代表
(2) 为新节点分配hash槽位
使用以下命令:
redis-cli -a 111111 --cluster reshard 集群的任意一个节点的ip:端口
同样,这里也需要指定一个集群代表,执行该命令后,将进入hash槽分配界面:
我们准备从16384中拿出4096个槽位,并且指定接收这些槽位的节点id(就是新加入那个redis节点的id),最后还要说明这些槽位是从哪些节点中抽出来。因为16384个hash槽早在集群创建的时候就已经平均分配给3台master了,所以现在需要选择从哪些master中挪出一部分hash槽,可以选定“all”,也就是从每个master抽出一部分槽位,也可以输入节点id,指定从某几台master抽出槽位
我们现在输入all:
查看集群状态:
发现槽位添加成功,槽位分别来源于另外三个master
(3) 为新添加的主节点添加从节点
使用以下命令:
redis-cli -a 111111 --cluster add-node 新redis的ip:端口 集群中任意节点的ip:端口 --cluster-slave --cluster-master-id 主节点ID
结果如下:
集群缩容:
与添加节点不同,删除某节点时,如果该节点上分配有hash槽,需要先使用reshard命令将该节点得hash槽分配出去,然后才可以删除
删除节点使用的命令如下:
redis-cli -a 111111 --cluster del-node 集群中任意一个节点的ip:端口 待删除的节点id
查询集群信息:
现在演示删除刚才添加的那个从节点:
删除分为两个步骤:
<1> 向集群中的所有节点发送“FORGET”命令,即让集群中的其他节点“遗忘”这个被删除的节点(将该节点的信息从各自的nodes.conf中去除)
以下是某个节点的nodes.conf内容:
可以发现,集群中只有7个节点的信息,不存在被删除的节点信息
<2> 向被删除的节点发送重置命令,让该节点成为一个普通的redis实例(将该节点的nodes.conf中关于集群的内容删除掉)
被删除节点的nodes.conf内容如下:
集群的有关信息已经被删除