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。还有一些其他的好玩的命令,这里就不一一介绍了。谢谢你的到来。