前言
在redis源码编译的时候,在src目录下会有一个redis-trib.rb的脚本,这个脚本是ruby写的,用于管理redis cluster。
安装系统依赖包
yum -y install epel-release
yum -y install ruby rubygem-redis
redis-trib.rb
/opt/redis/bin/redis-trib.rb
查看一下帮助
Usage: redis-trib <command> <options> <arguments ...>
create host1:port1 ... hostN:portN
--replicas <arg>
check host:port
info host:port
fix 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_id
set-timeout host:port milliseconds
call host:port command arg arg .. arg
import host:port
--from <arg>
--copy
--replace
help (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.
从上面可以知道redis-trib.rb具有以下功能:
create:创建集群 --replicas可以指定从节点个数
check:检查集群
info:查看集群信息
fix:修复集群
reshard:在线迁移slot
rebalance:平衡集群节点slot数量
add-node:将新节点加入集群
del-node:从集群中删除节点
set-timeout:设置集群节点间心跳连接的超时时间
call:在集群全部节点上执行命令
import:将外部redis数据导入集群
常用例子
1、create创建集群:create命令可选replicas参数,replicas表示需要有几个slave。
/opt/redis/bin/redis-trib.rb create --replicas 1 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 127.0.0.1:8006
2、info查看集群:info命令用来查看集群的信息。info命令也是先执行load_cluster_info_from_node获取完整的集群信息。
/opt/redis/bin/redis-trib.rb info 127.0.0.1:8001
3、check检查集群:检查集群状态的命令,没有其他参数,只需要选择一个集群中的一个节点即可。
/opt/redis/bin/redis-trib.rb check 127.0.0.1:8001
4、fix修复集群:fix命令的流程跟check的流程很像,显示加载集群信息,然后在check_cluster方法内传入fix为
true的变量,会在集群检查出现异常的时候执行修复流程。目前fix命令能修复两种异常,一种是集群有处于迁移中的slot的节点,一种是slot未完全分配的异常。
/opt/redis/bin/redis-trib.rb fix 127.0.0.1:8001
5、reshard在线迁移slot:reshard命令可以在线把集群的一些slot从集群原来slot负责节点迁移到新的节点,利用reshard可以完成集群的在线横向扩容和缩容。
/opt/redis/bin/redis-trib.rb reshard 127.0.0.1:8001
(然后根据提示操作就可以了,也可以根据参数直接设置完成)
6、rebalance平衡集群节点slot数量:rebalance命令可以根据用户传入的参数平衡集群节点的slot数量,rebalance功能非常强大,可以传入的参数很多。
host:port:这个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口。
--weight :节点的权重,格式为node_id=weight,如果需要为多个节点分配权重的话,需要添加多个–weight 参数,即--weight a44dd3ede3f=5 --weight 8e60b3a1=5,node_id可为节点名称的前缀,只要保证前缀位数能唯一区分该节点即可。没有传递–weight的节点的权重默认为1。
--auto-weights:这个参数在rebalance流程中并未用到。
--threshold :只有节点需要迁移的slot阈值超过threshold,才会执行rebalance操作。具体计算方法可以参考下面的rebalance命令流程的第四步。
--use-empty-masters:rebalance是否考虑没有节点的master,默认没有分配slot节点的master是不参与rebalance的,设置--use-empty-masters可以让没有分配slot的节点参与rebalance。
--timeout :设置migrate命令的超时时间。
--simulate:设置该参数,可以模拟rebalance操作,提示用户会迁移哪些slots,而不会真正执行迁移操作。
--pipeline :与reshar的pipeline参数一样,定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。
/opt/redis/bin/redis-trib.rb rebalance --threshold 1 127.0.0.1:8001
7、add-node将新节点加入集群:add-node命令可以将新节点加入集群,节点可以为master,也可以为某个master节点的slave。
--slave:设置该参数,则新节点以slave的角色加入集群
--master-id:这个参数需要设置了–slave才能生效,–master-id用来指定新节点的master节点。如果不设置该参数,则会随机为节点选择master节点。
/opt/redis/bin/redis-trib.rb add-node --slave --master-id b12f7ab5c229fdf817aa7b5a4c534463ce223c62 127.0.0.1:8007
8、del-node从集群中删除节点:del-node可以把某个节点从集群中删除。del-node只能删除没有分配slot的节点。
/opt/redis/bin/redis-trib.rb del-node 127.0.0.1:8001 7ec63a08d2355448d16a84b502974832c52359e1
9、set-timeout设置集群节点间心跳连接的超时时间:set-timeout用来设置集群节点间心跳连接的超时时间,单位是毫秒,不得小于100毫秒,因为100毫秒对于心跳时间来说太短了。
/opt/redis/bin/redis-trib.rb set-timeout 127.0.0.1:8001 30000
10、call在集群全部节点上执行命令:call命令可以用来在集群的全部节点执行相同的命令。call命令也是需要通过集群的一个节点地址,连上整个集群,然后在集群的每个节点执行该命令。
/opt/redis/bin/redis-trib.rb call 127.0.0.1:8001 get key
11、import将外部redis数据导入集群:import命令可以把外部的redis节点数据导入集群。
总结
redis cluster集群有了这个脚本就轻松多了,不需要通过redis-cli一个个操作。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.