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

  • 相关阅读:
    UML简单熟悉
    Java设计模式--单例模式
    MyEclipse2014安装图解
    让Win10显示系统中隐藏的文件夹
    Ping命令
    C语言学习
    技术学习论坛地址收集
    聊聊JVM的年轻代(转)
    深入理解JVM--JVM垃圾回收机制(转)
    JVM调优浅谈(转)
  • 原文地址:https://www.cnblogs.com/grj001/p/12224998.html
Copyright © 2011-2022 走看看