• 【Redis学习笔记】redis-trib.rb命令详解


    redis-trib.rb是官方提供的Redis Cluster的管理工具,在src目录下,但该工具是用ruby开发的,所以需要准备相关的依赖环境。

    1、redis-trib.rb环境配置

    准备redis-trib.rb的运行环境
    
    wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz
    
    yum -y install zlib-devel
    tar xvf ruby-2.5.1.tar.gz
    
    cd ruby-2.5.1/
    
    ./configure -prefix=/usr/local/ruby
    
    make
    
    make install
    
    cd /usr/local/ruby/
    
    cp bin/ruby /usr/local/bin
    
    cp bin/gem /usr/local/bin
    -------------------------------------
    有的Linux版本,直接yum install ruby可一步到位
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    安装rubygem redis依赖
    
    wget http://rubygems.org/downloads/redis-3.3.0.gem
    
    gem install -l redis-3.3.0.gem
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、创建集群

    指令:

    redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384

    注:
    –replicas参数指定集群中每个主节点配备几个从节点,这里设置为1,即三主三从

    结果:

    
    >>> Creating cluster
    /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
    >>> Performing hash slots allocation on 6 nodes...
    Using 3 masters:
    127.0.0.1:6379
    127.0.0.1:6380
    127.0.0.1:6381
    Adding replica 127.0.0.1:6383 to 127.0.0.1:6379
    Adding replica 127.0.0.1:6384 to 127.0.0.1:6380
    Adding replica 127.0.0.1:6382 to 127.0.0.1:6381
    >>> Trying to optimize slaves allocation for anti-affinity
    [WARNING] Some slaves are in the same host as their master
    M: bc775f9c4dea40820b82c9451778b1fcd42f92bc 127.0.0.1:6379
       slots:0-5460 (5461 slots) master
    M: 3b27d00d13706a032a92ff6b0a914af272dcaaf2 127.0.0.1:6380
       slots:5461-10922 (5462 slots) master
    M: d874f003257f1fb036bbd856ca605172a1741232 127.0.0.1:6381
       slots:10923-16383 (5461 slots) master
    S: 648eb314863b82aaa676380be7db2ec307f5547d 127.0.0.1:6382
       replicates bc775f9c4dea40820b82c9451778b1fcd42f92bc
    S: 65a6efb441ac44c348f7da8c62e26b888cda7c48 127.0.0.1:6383
       replicates 3b27d00d13706a032a92ff6b0a914af272dcaaf2
    S: 57bda956485109552547aef6c77fba43d2124abf 127.0.0.1:6384
       replicates d874f003257f1fb036bbd856ca605172a1741232
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join...
    >>> Performing Cluster Check (using node 127.0.0.1:6379)
    M: bc775f9c4dea40820b82c9451778b1fcd42f92bc 127.0.0.1:6379
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    S: 648eb314863b82aaa676380be7db2ec307f5547d 127.0.0.1:6382
       slots: (0 slots) slave
       replicates bc775f9c4dea40820b82c9451778b1fcd42f92bc
    M: 3b27d00d13706a032a92ff6b0a914af272dcaaf2 127.0.0.1:6380
       slots:5461-10922 (5462 slots) master
       1 additional replica(s)
    S: 57bda956485109552547aef6c77fba43d2124abf 127.0.0.1:6384
       slots: (0 slots) slave
       replicates d874f003257f1fb036bbd856ca605172a1741232
    S: 65a6efb441ac44c348f7da8c62e26b888cda7c48 127.0.0.1:6383
       slots: (0 slots) slave
       replicates 3b27d00d13706a032a92ff6b0a914af272dcaaf2
    M: d874f003257f1fb036bbd856ca605172a1741232 127.0.0.1:6381
       slots:10923-16383 (5461 slots) master
       1 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    16384个槽全部被分配,集群创建成功。注意:给redis-trib.rb的节点地址必须是不包含任何槽/数据的节点,否则会拒绝创建集群

    3、查看集群信息

    指令:

    redis-trib.rb info 127.0.0.1:6383

    结果:

    /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
    127.0.0.1:6380 (3b27d00d...) -> 0 keys | 5462 slots | 1 slaves.
    127.0.0.1:6381 (d874f003...) -> 1 keys | 5461 slots | 1 slaves.
    127.0.0.1:6379 (bc775f9c...) -> 0 keys | 5461 slots | 1 slaves.
    [OK] 1 keys in 3 masters.
    0.00 keys per slot on average.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4、 检查集群状态

    指令:

    redis-trib.rb check 127.0.0.1:6379

    结果:

    /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
    
    >>> Performing Cluster Check (using node 127.0.0.1:6379)
    M: bc775f9c4dea40820b82c9451778b1fcd42f92bc 127.0.0.1:6379
       slots:0-5460 (5461 slots) master
       1 additional replica(s)
    S: 648eb314863b82aaa676380be7db2ec307f5547d 127.0.0.1:6382
       slots: (0 slots) slave
       replicates bc775f9c4dea40820b82c9451778b1fcd42f92bc
    M: 3b27d00d13706a032a92ff6b0a914af272dcaaf2 127.0.0.1:6380
       slots:5461-10922 (5462 slots) master
       1 additional replica(s)
    S: 57bda956485109552547aef6c77fba43d2124abf 127.0.0.1:6384
       slots: (0 slots) slave
       replicates d874f003257f1fb036bbd856ca605172a1741232
    S: 65a6efb441ac44c348f7da8c62e26b888cda7c48 127.0.0.1:6383
       slots: (0 slots) slave
       replicates 3b27d00d13706a032a92ff6b0a914af272dcaaf2
    M: d874f003257f1fb036bbd856ca605172a1741232 127.0.0.1:6381
       slots:10923-16383 (5461 slots) master
       1 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    5、在线迁移slot

    指令:

    redis-trib.rb reshard 127.0.0.1:6379

    结果:

        ...
    How many slots do you want to move (from 1 to 16384)? 200
    What is the receiving node ID? 3b27d00d13706a032a92ff6b0a914af272dcaaf2
    Please enter all the source node IDs.
      Type 'all' to use all the nodes as source nodes for the hash slots.
      Type 'done' once you entered all the source nodes IDs.
    Source node #1:bc775f9c4dea40820b82c9451778b1fcd42f92bc
    Source node #2:done
    
    Ready to move 200 slots.
        ...
    Do you want to proceed with the proposed reshard plan (yes/no)? yes
    Moving slot 3225 from 127.0.0.1:6379 to 127.0.0.1:6380: .
    Moving slot 3226 from 127.0.0.1:6379 to 127.0.0.1:6380:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    注意以上的交互:

    • 首先会提示需要迁移多个槽,我这里写的是200
    • 接着提示需要将槽迁移到哪个节点,这里必须写节点ID
    • 提示槽从哪些节点中迁出,指定为all,则待迁移的槽在剩余节点中平均分配;指定节点中迁出时,必须指定源节点的节点ID,最后以done结束
    也可无交互迁移:
    
    redis-trib.rb reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipeline <arg>
    
    • 1
    • 2
    • 3

    6、平衡集群节点slot数量

    指令:

    redis-trib.rb rebalance host:port --weight --auto-weights ……

    结果:

    redis-trib.rb rebalance --weight a8xx=3 --weight f41xx=2  --use-empty-masters  127.0.0.1:6379
    
    /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 127.0.0.1:6379)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    >>> Rebalancing across 2 nodes. Total weight = 5.0
    Moving 3824 slots from 127.0.0.1:6380 to 127.0.0.1:6381
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7、添加新节点

    指令:

    redis-trib.rb add-node new_host:new_port existing_host:existing_port --slave --master-id

    其中:new_host:new_port是待添加的节点,existing_host:existing_port是集群中任意一个节点的地址

    加入的是主节点:
    
    redis-trib.rb add-node 127.0.0.1:6379 127.0.0.1:6384
    
    • 1
    • 2
    • 3
    加入的是从节点(可不设置--master-id,此时会随机选择主节点):
    
    redis-trib.rb add-node --slave --master-id f4xxx 127.0.0.1:6379 127.0.0.1:6384
    
    
    • 1
    • 2
    • 3
    • 4

    注:

    • 待添加的节点,必须确保其为空或不在其它集群中,否则抛错
    [ERR] Node 127.0.0.1:6379 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    
    • 1
    • cluster meet命令加入已经存在于其它集群的节点,不做校验,会造成丢失和错乱,不推荐用于生产环境
    • 添加从节点时,–slave和–master-id必须写在前面。否则报错
    redis-trib.rb add-node 127.0.0.1:6379 127.0.0.1:6384 --slave --master-id f41xx
    [ERR] Wrong number of arguments for specified sub command
    
    • 1
    • 2

    8、删除节点

    指令:

    redis-trib.rb del-node host:port node_id

    结果:

    redis-trib.rb del-node 127.0.0.1:6379 8f7836a9a14fb6638530b42e04f5e58e28de0a6c
    
    >>> Removing node 8f7836a9a14fb6638530b42e04f5e58e28de0a6c from cluster 127.0.0.1:6379
    /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
    >>> Sending CLUSTER FORGET messages to the cluster...
    >>> SHUTDOWN the node.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注:

    • 在删除节点之前,其对应的槽必须为空。(使用redis-trib.rb reshard将其迁移出去)

    9、修复集群

    指令:

    redis-trib.rb fix 127.0.0.1:6379

    fix能修复两种异常:

    • 节点中存在处于迁移中(importing或migrating状态)的slot

    • 节点中存在未分配的slot

    10、设置节点超时时间

    指令:

    redis-trib.rb set-timeout host:port milliseconds

    作用:

    • 修改配置文件中的cluster-node-timeout参数

    11、在集群所有节点上执行命令

    指令:

    redis-trib.rb call host:port command arg arg … arg

    结果:

    redis-trib.rb call 127.0.0.1:6379 set hello world
    /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
    
    >>> Calling SET hello world
    127.0.0.1:6379: MOVED 866 127.0.0.1:6381
    127.0.0.1:6383: MOVED 866 127.0.0.1:6381
    127.0.0.1:6381: OK
    127.0.0.1:6382: MOVED 866 127.0.0.1:6381
    127.0.0.1:6384: MOVED 866 127.0.0.1:6381
    127.0.0.1:6380: MOVED 866 127.0.0.1:6381
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    12、将外部redis数据导入集群

    指令:

    redis-trib.rb import host:port --from --copy --replace

    结果:

    redis-trib.rb import --from 127.0.0.1:6378 --replace  127.0.0.1:6379 
    
    >>> Importing data from 127.0.0.1:6378 to cluster 
    /usr/local/ruby/lib/ruby/gems/2.5.0/gems/redis-3.3.0/lib/redis/client.rb:459: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 127.0.0.1:6379)
    S: d826c5fd98efa8a17a880e9a90a25f06c88e6ae9 127.0.0.1:6379
       slots: (0 slots) slave
       replicates a8b3d0f9b12d63dab3b7337d602245d96dd55844
    S: 55c05d5b0dfea0d52f88548717ddf24975268de6 127.0.0.1:6383
       slots: (0 slots) slave
       replicates a8b3d0f9b12d63dab3b7337d602245d96dd55844
    M: f413fb7e6460308b17cdb71442798e1341b56cbc 127.0.0.1:6381
       slots:50-16383 (16334 slots) master
       2 additional replica(s)
    S: beba753c5a63607fa66d9ec7427ed9a511ea136e 127.0.0.1:6382
       slots: (0 slots) slave
       replicates f413fb7e6460308b17cdb71442798e1341b56cbc
    S: 83797d518e56c235272402611477f576973e9d34 127.0.0.1:6384
       slots: (0 slots) slave
       replicates f413fb7e6460308b17cdb71442798e1341b56cbc
    M: a8b3d0f9b12d63dab3b7337d602245d96dd55844 127.0.0.1:6380
       slots:0-49 (50 slots) master
       2 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.
    >>> Connecting to the source Redis instance
    *** Importing 1 keys from DB 0
    Migrating key5 to 127.0.0.1:6381: OK
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    记住动作单词,参数 redis-trib.rb help

    参考文档:
    https://www.cnblogs.com/ivictor/p/9768010.html

  • 相关阅读:
    Oracel存储过程,分页函数定义,索引建立
    vscode插件推荐
    【C++】模板初阶 -- 详解
    移动端人脸风格化技术的应用
    论文写作: 实验效果不好怎么办?
    Pycharm安装配置Pyside6
    Flutter Unable to ‘pub upgrade‘ flutter tool
    HK32F030MF4P6 EXTI外部中断例程
    【JVM】年轻代进入老年代规整
    2171. 拿出最少数目的魔法豆-快速排序+前缀和
  • 原文地址:https://blog.csdn.net/llg___/article/details/126495317