• Redis集群之常用操作


      Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境。直接使用redis-clit的参数--cluster 来取代

    一. 命令行

    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           
    
    For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

    二. 节点操作

    1. 创建集群主节点
    redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381
    
    2. 创建集群主从节点
    /redis-cli --cluster create 192.168.163.132:6379 192.168.163.132:6380 192.168.163.132:6381 192.168.163.132:6382 192.168.163.132:6383 192.168.163.132:6384 --cluster-replicas 1
        --cluster-replicas为数字,1代表每个主节点需要一个从节点
    
    这种方式不能手动的指定主节点, 所以需要的话,先执行创建主节点, 然后再添加从节点
    
    3. 新增集群主节点
    redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 
    
        
    为指定集群添加节点, 需要先链接到集群的任意一个节点IP(192.168.163.132:6379 ), 再将新节点添加, 要求前面放置新增的节点
    
    4. 添加集群从节点
    redis-cli --cluster add-node 192.168.163.132:6382 192.168.163.132:6379 --cluster-slave --cluster-master-id 117457eab5071954faab5e81c3170600d5192270
        
    
    将6382节点添加到6379这个集群中, 并当做node_id为117457eab5071954faab5e81c3170600d5192270的从节点
    如果不指定--cluster-master-id则会随机分配到任意一个主节点
    
    5. 删除节点
    redis-cli --cluster del-node 192.168.163.132:6384 f6a6957421b80409106cb36be3c7ba41f3b603ff
    
    指定ip,端口和node_id来删除一个节点, 从节点可以直接删除, 主节点不能直接删除
    删除之后, 该节点会被shutdown
    
    当删除掉的节点重新起来之后不能自动的加入到集群中,, 但其和主的复制是正常的, 如果想要再次加入集群, 需要先在该节点执行cluster reset, 在使用add-node进行添加
    
    6. 检查集群
    redis-cli --cluster check 192.168.163.132:6384 --cluster-search-multiple-owners
    
    任意链接一个集群节点, 进行集群状态检查
    
    7.集群信心查看
    redis-cli --cluster info 192.168.163.132:6384
    
    
    8. 修复集群
    redis-cli --cluster fix 192.168.163.132:6384 --cluster-search-multiple-owners
    修复集群和槽的重复分配问题
    
    9. 设置集群的超时时间
    redis-cli  --cluster set-timeout 192.168.163.132:6382 10000
    连接集群中的任意节点来设置集群的超时时间参数: cluster-node-timeout
    
    10. 集群中执行相关命令
    redis-cli --cluster call 192.168.163.132:6381 config set requirepass cc
    redis-cli -a cc --cluster call 192.168.163.132:6381 config set masterauth cc
    redis-cli -a cc --cluster call 192.168.163.132:6381 config rewrite

    三. 迁移相关

    1. 在线迁移slot :在线把集群的一些slot从集群原来slot节点迁移到新的节点,即可以完成集群的在线横向扩容和缩容。有2种方式进行迁移
      1) 根据提示进行操作
        直接连接到集群的任意一节点
        redis-cli -a cc --cluster reshard  192.168.163.132:6379
           
      2) 根据参数进行操作
        redis-cli -a cc --cluster reshard 192.168.163.132:6379 --cluster-from 117457eab5071954faab5e81c3170600d5192270 --cluster-to 815da8448f5d5a304df0353ca10d8f9b77016b28 --cluster-slots 10 --cluster-yes --cluster-timeout 5000 --cluster-pipeline 10 --cluster-replace
        连接到集群的任意一节点来对指定节点指定数量的slot进行迁移到指定的节点。
    
    2. 平衡slot
        1)平衡集群中各个节点的slot数量
    redis-cli -a cc --cluster rebalance 192.168.163.132:6379
    
        2)根据集群中各个节点设置的权重等平衡slot数量(不执行,只模拟)
    redis-cli -a cc --cluster rebalance --cluster-weight 117457eab5071954faab5e81c3170600d5192270=5 815da8448f5d5a304df0353ca10d8f9b77016b28=4 56005b9413cbf225783906307a2631109e753f8f=3 --cluster-simulate 192.168.163.132:6379
      
      3)新增加的节点,需要进行槽点平衡
    redis-cli -a cc --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 172.16.59.92.7008
    3. 导入集群 redis-cli --cluster import 192.168.163.132:6379 --cluster-from 192.168.163.132:9021 --cluster-replace 外部Redis实例(9021)导入到集群中的任意一节点

    注意点:

    •   Redis cluster最低要求是3个主节点
  • 相关阅读:
    ipv4 ipv6 求字符串和整数一一映射的算法 AmazonOrderId
    Example Bookstore schema showing how data is sharded DATABASE SHARDING
    When Database Sharding is Appropriate DATABASE SHARDING
    Database Sharding Challenges DATABASE SHARDING
    Database Sharding, The “Shared-Nothing” Approach DATABASE SHARDING
    Database Partitioning Options DATABASE SHARDING
    What Drives the Need for Database Sharding? DATABASE SHARDING
    The Rise of Database Sharding DATABASE SHARDING
    为了数学美,拆卸了脚手架
    Scanline Fill Algorithm
  • 原文地址:https://www.cnblogs.com/xingxia/p/redis-cluster.html
Copyright © 2020-2023  润新知