redis-cluster 高可用集群管理

本文介绍了Redis Cluster高可用集群的管理,包括如何使用redis-cli进行集群创建、添加和删除节点、数据迁移、平衡槽位以及集群故障修复。重点讨论了集群的缩容、扩容和数据迁移的实战操作。
摘要由CSDN通过智能技术生成


前言

之前我们搭建过redis-cluster高可用集群了,但是没有讨论集群的详细管理,本章我们主要对集群的缩容、扩容和数据迁移三个方面来讨论。 Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境。直接使用redis-clit的参数–cluster 来取代。如何使用redis-cl命令进行Cluster的创建和管理是我们必须掌握的,关于Cluster的相关说明可以查看官网或则Redis Cluster部署、管理和测试。


一、集群命令(redis-cli --cluster help)

redis-cli --cluster help
Cluster Manager Commands:
  create         host1:port1 ... hostN:portN   #创建集群
                 --cluster-replicas <arg>      #从节点个数
  check          host:port                     #检查集群
                 --cluster-search-multiple-owners #检查是否有槽同时被分配给了多个节点
  info           host:port                     #查看集群状态
  fix            host:port                     #修复集群
                 --cluster-search-multiple-owners #修复槽的重复分配问题
  reshard        host:port                     #指定集群的任意一节点进行迁移slot,重新分slots
                 --cluster-from <arg>          #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入
                 --cluster-to <arg>            #slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入
                 --cluster-slots <arg>         #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。
                 --cluster-yes                 #指定迁移时的确认输入
                 --cluster-timeout <arg>       #设置migrate命令的超时时间
                 --cluster-pipeline <arg>      #定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10
                 --cluster-replace             #是否直接replace到目标节点
  rebalance      host:port                                      #指定集群的任意一节点进行平衡集群节点slot数量
                 --cluster-weight <node1=w1...nodeN=wN>         #指定集群节点的权重
                 --cluster-use-empty-masters                    #设置可以让没有分配slot的主节点参与,默认不允许
                 --cluster-timeout <arg>                        #设置migrate命令的超时时间
                 --cluster-simulate                             #模拟rebalance操作,不会真正执行迁移操作
                 --cluster-pipeline <arg>                       #定义cluster getkeysinslot命令一次取出的key数量,默认值为10
                 --cluster-threshold <arg>                      #迁移的slot阈值超过threshold,执行rebalance操作
                 --cluster-replace                              #是否直接replace到目标节点
  add-node       new_host:new_port existing_host:existing_port  #添加节点,把新节点加入到指定的集群,默认添加主节点
                 --cluster-slave                                #新节点作为从节点,默认随机一个主节点
                 --cluster-master-id <arg>                      #给新节点指定主节点
  del-node       host:port node_id                              #删除给定的一个节点,成功后关闭该节点服务
  call           host:port command arg arg .. arg               #在集群的所有节点执行相关命令
  set-timeout    host:port milliseconds                         #设置cluster-node-timeout
  import         host:port                                      #将外部redis数据导入集群
                 --cluster-from <arg>                           #将指定实例的数据导入到集群
                 --cluster-copy                                 #migrate时指定copy
                 --cluster-replace                              #migrate时指定replace
  help           

二、管理实战

需要搭建一个redis集群来实战,如果对redis集群还不会搭建的参考《redis-cluster高可用集群实战(docker版本)

1、 创建集群主节点

redis-cli -a 123456  --cluster  create 192.168.252.128:7001  192.168.252.129:7001  192.168.252.130:7001 

将(192.168.252.128:7001 192.168.252.129:7001 192.168.252.130:7001)构建一个简单的集群环境。

2、创建集群主从节点

redis-cli -a 123456  --cluster  create 192.168.252.128:7001 192.168.252.128:7002 192.168.252.129:7001 192.168.252.129:7002 192.168.252.130:7001 192.168.252.130:7002 --cluster-replicas 1
-a 123456  登录密码为123456, --cluster-replicas 1 一个主节点一个从节点。该方式不能自定义主节点和从节点,都是由系统分配。 所以如果需要自定义的话,需要自己手动指定,先使用1或3创建好主节点后,再通过4来处理。

3、添加主节点

redis-cli  -a 123456 --cluster add-node 192.168.252.128:7003 192.168.252.128:7001

在这里插入图片描述
严格按照 new_host:new_port existing_host:existing_port 格式,新增的节点必须在前面,后一个节点是集群里已存在的任何一个节点IP:PORT

4、添加从节点

redis-cli -a 123456 --cluster add-node 192.168.252.129:7003 192.168.252.128:7001 --cluster-slave --cluster-master-id 15e117b4869d1a185f0040d9dc49fb2a6654ee65

在这里插入图片描述
如果没有设置 --cluster-master-id ,将随机选一个master节点为主节点添加,新添加的节点必须为空,建议明确指定

5、删除节点

redis-cli -a 123456  --cluster   del-node  192.168.252.129:7003  b324406764178a0479268a0f1381b580b22812e4

在这里插入图片描述
指定需要删除的节点的格式 host:port node_id。从节点直接删除对集群没有影响,但是直接删除主节点会影响整个集群(应为整个hash槽已经不完整,应该将数据和hash槽迁移到其他节点后再删除)
注意:当被删除掉的节点重新起来之后不能自动加入集群,但其和主的复制还是正常的,也可以通过该节点看到集群信息(通过其他正常节点已经看不到该被del-node节点的信息)。如果想要再次加入集群,则需要先在该节点执行cluster reset,再用add-node进行添加,进行增量同步复制。到此,目前整个集群的状态如下:

6、检查集群

redis-cli -a 123456 --cluster check 192.168.252.128:7001  --cluster-search-multiple-owners

在这里插入图片描述
任意连接一个集群节点,进行集群状态检查

7、集群信息查看

redis-cli -a 123456 --cluster info 192.168.252.128:7001

在这里插入图片描述
检查key、slots、从节点个数的分配情况

8、修复集群

redis-cli -a 123456 --cluster fix  192.168.252.128:7001 --cluster-search-multiple-owners

在这里插入图片描述

8、修复集群

redis-cli -a 123456 --cluster fix  192.168.252.128:7001 --cluster-search-multiple-owners

在这里插入图片描述

9、集群中执行相关命令

redis-cli -a 123456 --cluster call 192.168.252.128:7001 config set cluster-node-timeout 1000

可以用来在线修改配置文件等

10、在线迁移slot ,在线把集群的一些slot从集群原来slot节点迁移到新的节点,即可以完成集群的在线横向扩容和缩容。有2种方式进行迁移
(1) 一是根据提示来进行操作:

redis-cli -a cc --cluster reshard 192.168.252.128:7003

(2) 二是根据参数进行操作

redis-cli -a 123456 --cluster reshard 192.168.252.128:7001 --cluster-from 038040faf64af1297e3417b079bbf2091ce655ae --cluster-to 15e117b4869d1a185f0040d9dc49fb2a6654ee65 --cluster-slots 3000 --cluster-yes --cluster-timeout 5000 --cluster-pipeline 10 --cluster-replace

11、 平衡插槽(将16384个插槽平衡到所有master节点)

(1) 平衡集群中各个节点的slot数量

redis-cli -a 123456 --cluster rebalance 192.168.252.128:7003

在这里插入图片描述
(2) 根据集群中各个节点设置的权重等平衡slot数量

redis-cli -a 123456 --cluster rebalance --cluster-weight 15e117b4869d1a185f0040d9dc49fb2a6654ee65=3 589881971872fdde729eae3e43fec493b2f67925=2  038040faf64af1297e3417b079bbf2091ce655ae=1 c4c655cf497cdb913cffdbce65bf27ba434c9838=1 192.168.252.128:7003

在这里插入图片描述

12、外部数据导入集群

redis-cli --cluster import 192.168.252.131:6379 --cluster-from 192.168.252.128:7003 --cluster-replace

测试下来发现参数–cluster-replace没有用,如果集群中已经包含了某个key,在导入的时候会失败,不会覆盖,只有清空集群key才能导入, 并且发现如果集群设置了密码,也会导入失败,需要设置集群密码为空才能进行导入(call)。通过monitor(9021)的时候发现,在migrate的时候需要密码进行auth认证。

总结

实践出真知,自己动手吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗德阿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值