redis-trib.rb是官方提供的Redis Cluster的管理工具,无需额外下载,默认位于源码包的src目录下,但因该工具是用ruby开发的,所以需要准备相关的依赖环境。

1. 准备redis-trib.rb的运行环境

wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gzyum -y install zlib-devel
tar xvf ruby-2.5.1.tar.gzcd 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
安装rubygem redis依赖
wget http://rubygems.org/downloads/redis-3.3.0.gem
gem install -l redis-3.3.0.gem

2. 命令简介

# redis-trib.rb help
Usage: redis-trib <command> <options> <arguments ...>create          host1:port1 ... hostN:portN--replicas <arg>check           host:portinfo            host:portfix             host:port--timeout <arg>reshard         host:port--from <arg>--to <arg>--slots <arg>--yes--timeout <arg>--pipeline <arg>rebalance       host:port--weight <arg>--auto-weights--use-empty-masters--timeout <arg>--simulate--pipeline <arg>--threshold <arg>add-node        new_host:new_port existing_host:existing_port--slave--master-id <arg>del-node        host:port node_idset-timeout     host:port millisecondscall            host:port command arg arg .. argimport          host:port--from <arg>--copy--replacehelp            (show this help)For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.- create:创建集群
- check:检查集群
- info:查看集群信息
- fix:修复集群
- reshard:在线迁移slot
- rebalance:平衡集群节点slot数量
- add-node:添加新节点
- del-node:删除节点
- set-timeout:设置节点的超时时间
- call:在集群所有节点上执行命令
- import:将外部redis数据导入集群

3. 常用命令详解

  • 创建集群
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关于主从节点的选择及槽的分配,其算法如下:- 把节点按照host分类,这样保证master节点能分配到更多的主机中。- 遍历host列表,从每个host列表中弹出一个节点,放入interleaved数组。直到所有的节点都弹出为止。- 将interleaved数组中前master个数量的节点保存到masters数组中。- 计算每个master节点负责的slot数量,16384除以master数量取整,这里记为N。- 遍历masters数组,每个master分配N个slot,最后一个master,分配剩下的slot。- 接下来为master分配slave,分配算法会尽量保证master和slave节点不在同一台主机上。- 对于分配完指定slave数量的节点,还有多余的节点,也会为这些节点寻找master。分配算法会遍历两次masters数组。- 第一次遍历master数组,在余下的节点列表找到replicas数量个slave。每个slave为第一个和master节点host不一样的节点,如果没有不一样的节点,则直接取出余下列表的第一个节点。- 第二次遍历是分配节点数除以replicas不为整数而多出的一部分节点。
  • 检查集群状态
redis-trib.rb check 127.0.0.1:6379指定任意一个节点即可。
  • 查看集群信息
redis-trib.rb info 127.0.0.1:6383
  • 修复集群
redis-trib.rb fix 127.0.0.1:6379目前fix命令能修复两种异常
- 节点中存在处于迁移中(importing或migrating状态)的slot。
- 节点中存在未分配的slot。
其它异常不能通过fix命令修复。
  • 迁移slot
redis-trib.rb reshard 127.0.0.1:6379redis-trib.rb reshard host:port --from <arg> --to <arg> --slots <arg> --yes --timeout <arg> --pipeline <arg>redis-trib.rb reshard --from a8b3d0f9b12d63dab3b7337d602245d96dd55844 --to f413fb7e6460308b17cdb71442798e1341b56cbc  --slots 10923 --yes --pipeline 20 127.0.0.1:6383其中host:port:必传参数,集群内任意节点地址,用来获取整个集群信息。
--from:源节点id,如果有多个源节点,使用逗号分隔,如果是all,则源节点为集群内出目标节点外的其它所有主节点。
--to:目标节点id,只能填写一个。
--slots:需要迁移槽的总数量。
--yes:迁移无需用户手动确认。
--timeout:控制每次migrate操作的超时时间,默认为60000毫秒。
--pipeline:控制每次批量迁移键的数量,默认为10。
  • 平衡集群节点slot数量
rebalance host:port --weight <arg>--auto-weights--use-empty-masters--timeout <arg>--simulate--pipeline <arg>--threshold <arg>
其中,--weight <arg>:节点的权重,格式为node_id=weight,如果需要为多个节点分配权重的话,需要添加多个--weight <arg>参数,即--weight b31e3a2e=5 --weight 60b8e3a1=5,node_id可为节点名称的前缀,只要保证前缀位数能唯一区分该节点即可。没有传递–weight的节点的权重默认为1。
--auto-weights:自动将每个节点的权重默认为1。如果--weight和--auto-weights同时指定,则--auto-weights会覆盖前者。
--threshold <arg>:只有节点需要迁移的slot阈值超过threshold,才会执行rebalance操作。
--use-empty-masters:默认没有分配slot节点的master是不参与rebalance的。如果要让其参与rebalance,需添加该参数。
--timeout <arg>:设置migrate命令的超时时间。
--simulate:设置该参数,只会提示用户会迁移哪些slots,而不会执行真正的迁移操作。
--pipeline <arg>:定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。
  • 删除节点
redis-trib.rb del-node host:port node_id在删除节点之前,其对应的槽必须为空,所以,在进行节点删除动作之前,必须使用redis-trib.rb reshard将其迁移出去。
需要注意的是,如果某个节点的槽被完全迁移出去,其对应的slave也会随着更新,指向迁移的目标节点。
  • 添加新节点
redis-trib add-node new_host:new_port existing_host:existing_port --slave --master-id <arg>new_host:new_port:待添加的节点,必须确保其为空或不在其它集群中。
existing_host:existing_port:集群中任意一个节点的地址。如果添加的是主节点,只需指定源节点和目标节点的地址即可。
redis-trib.rb add-node 127.0.0.1:6379 127.0.0.1:6384如果添加的是从节点,其语法如下,
redis-trib.rb add-node --slave --master-id f413fb7e6460308b17cdb71442798e1341b56cbc 127.0.0.1:6379 127.0.0.1:6384
注意:
--slave和--master-id必须写在前面
添加从节点,可不设置--master-id,此时会随机选择主节点线上建议使用redis-trib.rb添加新节点,因为其会对新节点的状态进行检查。如果手动使用cluster meet命令加入已经存在于其它集群的节点,会造成被加入节点的集群合并到现有集群的情况,从而造成数据丢失和错乱,后果非常严重,线上谨慎操作。
  • 设置节点的超时时间
redis-trib.rb set-timeout host:port milliseconds其实就是批量修改集群各节点的cluster-node-timeout参数。
  • 在集群所有节点上执行命令
redis-trib.rb call host:port command arg arg .. arg
  • 外部redis数据导入集群
redis-trib.rb import --from 127.0.0.1:6378 127.0.0.1:6379其内部处理流程如下:- 通过load_cluster_info_from_node方法加载集群信息,check_cluster方法检查集群是否健康。
- 连接外部redis节点,如果外部节点开启了cluster_enabled,则提示错误([ERR] The source node should not be a cluster node.)
- 通过scan命令遍历外部节点,一次获取1000条数据。
- 遍历这些key,计算出key对应的slot。
- 执行migrate命令,源节点是外部节点,目的节点是集群slot对应的节点,如果设置了--copy参数,则传递copy参数,其会保留源节点的key,如果设置了--replace,则传递replace参数。如果目标节点中存在同名key,其值会被覆盖。两个参数可同时指定。
- 不停执行scan命令,直到遍历完所有key。
- 迁移完成。

参考:

redis-trib.rb命令详解

redis-trib.rb 使用详解相关推荐

  1. Redis数据库教程——系统详解学习Redis全过程

    Redis数据库教程--系统详解学习Redis全过程 Redis快速入门:Key-Value存储系统简介 Key-Value存储系统:     Key-Value Store是当下比较流行的话题,尤其 ...

  2. redis stream持久化_Beetlex.Redis之Stream功能详解

    原标题:Beetlex.Redis之Stream功能详解 有一段时间没有写文章,techempower的测试规则评分竟然发生了变化,只能忘着补充一下占比权重最多的数据更新示例了和深入设计一下组件模块化 ...

  3. 分布式锁(基于redis和zookeeper)详解

    分布式锁(基于redis和zookeeper)详解 https://blog.csdn.net/a15835774652/article/details/81775044 为什么写这篇文章? 目前网上 ...

  4. Redis持久化——AOF机制详解

    在运行情况下,Redis 以数据结构的形式将数据维持在内存中,为了让这些数据在 Redis 重启之后仍然可用,需要将数据写入持久存储 持久化是指将数据写入持久存储,例如固态磁盘(SSD) Redis ...

  5. [redis] 10 种数据结构详解

    [redis] 10 种数据结构详解 简介 5种常见数据结构 string: 最常见的 string key value list: 双向链表 set: 集合- zset: 有序集合 hash: 类似 ...

  6. Redis设计与实现详解二:Redis数据库实现

    Redis设计与实现详解一:数据结构与对象 Redis设计与实现详解三:多机功能实现 Redis设计与实现详解四:其他单机功能 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态 ...

  7. redis集群模式详解

    redis集群模式详解 一,redis集群 1,哨兵集群 2,redis Cluster 二,redis Cluster集群的搭建 1,配置文件 2,redis服务启动 三,springboot连接r ...

  8. Redis基础及原理详解

    Redis基础及原理详解 前言:以下是最近学习redis的一些笔记总结,文中如有不当的地方欢迎批评指正,重在记录与学习,笔芯~~ Nosql概述 演进历史 单机mysql Memcached(缓存)+ ...

  9. Redis 数据类型 Strings 类型详解

    Redis 数据类型 Strings 类型详解 bitmap 操作 SETBIT • SETBIT key offset value 起始版本:2.2.0 时间复杂度:O(1) 设置或者清空key的v ...

  10. Redis的淘汰策略详解

    接上一篇Redis的过期策略详解 Redis的过期策略详解 所谓的淘汰策略就是: 我们redis中的数据都没有过期,但是内存有大小,所以我们得淘汰一些没有过期的数据!! 那么怎么去淘汰了,我们上一篇讲 ...

最新文章

  1. android固定位置滚动文本,android – 滚动文本上方的按钮,按钮固定在底部
  2. CF 990A. Commentary Boxes【数学/模拟】
  3. erlang精要(16)-匿名函数之sigmoid函数实现
  4. PHP做二次开发:本机安装ThinkCMF系统
  5. 垃圾收集算法,垃圾收集器_为什么我不能关闭垃圾收集器?
  6. loss低但精确度低_低光照图像增强网络-RetinexNet(model.py解析【2】)
  7. Windows 7 文件夹共享
  8. 数据产品-核心能力学习
  9. linux 下 安装 phpstorm
  10. Apache Rewrite实现URL的跳转和域名跳转
  11. 为什么Windows7打开项目的方式是灰的不能修改
  12. Thread was being aborted.(调试或执行较长时间的程序时发生的错误)
  13. php怎么改背景图片,php - 如何借助php中的url参数更改背景图片? - SO中文参考 - www.soinside.com...
  14. java编程实现食堂饭卡刷卡_饭卡系统java
  15. 智能优化算法——布谷鸟搜索算法原理(附代码)
  16. 客户案例:Coremail安全海外中继保障德赛集团跨境通邮安全
  17. 从200K/s到2M/s,只差这篇文章——使用ProxyeeDown加速百度云盘下载速度
  18. 芝诺数据高校产学研用成果展示|携程酒店(北京)数据分析报告
  19. win7用linux脚本文件怎么打开,win7下通过ShellExecute调用记事本
  20. 第三方数据源大型库| CnOpenData全球专利及引用被引用数据

热门文章

  1. 桌面计算机文件夹图标没了,电脑文件夹图标不见了怎么办
  2. 计算机科学基础word实验一,【实验2】熟悉WORD界面及其基本操作
  3. win10声音控制面板扬声器默认设备显示未插入扬声器
  4. 工控机上位机软件的开发历程(一)
  5. 步进电机控制器编程实例C语言,步进电机控制器原理_步进电机控制器编程实例...
  6. PostgreSQL中with和without time zone两者有什么区别
  7. 两步解决:PDF旋转后怎么保存?
  8. 域名带www和不带的区别
  9. java实现使用POI对word文档的页眉页脚的编辑
  10. matlab simulink仿真实现电力电子的整流电路