redis5.0的槽点迁移,随意玩(单机迁移集群)

redis5.0的槽点迁移,随意玩(单机迁移集群)

2018年12月27日 11:53:19 学无止境王小帅 阅读数 469

        最近在做redis单机版本迁移到集群版,所以当时用的redis3.0版本吧,迁移的过程中遇到一个问题,就是如果redis5.0之前的版本,在移动槽点的时候,假如槽点内有值的话,导致报错:Syntax error ,try client(list|kill|getname|setname|pause|reply)  ,主要就是需要修改redis-trib.rb文件的move_slot这个方法,绕过 clientCommand,直接执行 migrateCommand(去掉.client即可)。如下图

修改之后,就可以reshard带有数据的slot槽了。假如没有修改trib文件,出现了上面的错误(Syntax error ,try client),此时那个有数据的槽点,也会不可移动。 执行cluster setlot 槽点的值 stable即可。

以上的只不过是我曾经操作redis3.0数据迁移的时候出现的问题和解决办法。下面主要说说redis5.0后,操作slot的命令,玩转redis5.0不在话下。

首先我们的redis是集群版本,三主三从,这里就不讲redis的sentinel哨兵模式了(监控,提醒,自动故障转移几个特性)。

直接上图

redis5.0版本舍弃了trib文件,改用redis-cli操作集群,这点也算是改进优化不少了。

可以看到redis的版本。

redis-cli --cluster check host:port此命令可以查看集群的各个节点的信息。

现在我们开始把7002和7003的所有槽点都移动到7001上:

问移动多少个槽点,我们移动7002的全部,5462个

 

再把7003的所有槽点移动到7001上

 

 此时此刻,7001上已经有了所有的槽点,现在想数据迁移的同学,只需要把单机版的dump.rdb文件拷贝到集群下即可。

下面开始均分槽点,

这里使用rebalance的时候,因为7002和7003上面没有槽点,所以是不参与选举的,也无法参与均衡槽点。

 我们可以使用--cluster-use-empty-masters这个参数,即使7002和7003没有槽点也可以参与均分槽点。

可以看到槽点均分了,而且从节点也均分了。

我们圈住的这个可以指定当前从节点到哪一个主节点下,可以自由分配,随意玩转redis5.0的槽点。还有forget,是为了删除某个节点后,其他节点有保留信息,仍旧会进行心跳通信,所以需要每一个保留的节点下,都要进行forget。还有一些其他的好玩的命令,这里就不一一介绍了。谢谢你的到来。

posted @ 2019-06-27 22:42  grj001  阅读(243)  评论(0编辑  收藏  举报