服务热线
135-6963-3175
redis命令
redis-cli
redis-trib.rb是在redis3.x版本时所用的一种部署redis集群的工具,redis-cli是redis4.x及更高版本所支持创建集群的工具,在redis3.x版本时redis-cli只是一个客户端连接管理工具。Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境。直接使用redis-clit的参数--cluster 来取代。
redis-cli也比redis-trib.rb多了一个可以认证集群密码的功能,后者创建的集群不能对有密码的集群节点进行很好的管理,所以后来官方直接废弃了这个工具。
用redis-trib.rb创建集群之前需要配置ruby环境,新版本的redis-cli可以直接创建集群环境而不用配置ruby环境。
redis-cli -h 192.168.1.101 -p 6379 用法:redis-cli [OPTIONS] [cmd [arg [arg ...]]] -h <主机ip>,默认是127.0.0.1 -p <端口>,默认是6379 -a <密码>,如果redis加锁,需要传递密码 --help,显示帮助信息
redlis-cli连接后:
cluster nodes
可通过该命令查看集群的节点信息
192.168.1.101:7000> cluster nodes 0f972c205a469c25aad28790dfdc43989b5dcca3 127.0.0.1:7003@17003 slave 4e0062198602ae83f8981b1da12b37017ac7d1d0 0 1592989019686 4 connected b6b367d00e42026e0edc0e7725695a1dddc385ed 127.0.0.1:7000@17000 myself,master - 0 1592989017000 1 connected 0-5460 4e0062198602ae83f8981b1da12b37017ac7d1d0 127.0.0.1:7001@17001 master - 0 1592989020693 2 connected 5461-10922 9195e10fb094bf4080b369bbe504dce8e29a3c52 127.0.0.1:7005@17005 slave b6b367d00e42026e0edc0e7725695a1dddc385ed 0 1592989020000 6 connected 61258728f35a1e91780aaed910240c9315c6a752 127.0.0.1:7004@17004 slave 163853328cae159d579405c3db5a769600e5c529 0 1592989020000 5 connected 163853328cae159d579405c3db5a769600e5c529 127.0.0.1:7002@17002 master - 0 1592989019000 3 connected 10923-16383
redis-cli创建集群
redis-cli跟redis-trib.rb创建集群的方法几乎一样,只不过在创建集群的时候需要指定 --cluster这个选项,对于有密码的redis集群,可以指定 -a选项来管理redis集群。
(1)在创建集群时候指定replicas数量,如果数量为1,那么每个Master都会分配一个Slave,但是这样操作是不能指定哪个Master跟哪个Slave绑定的。
/opt/redis/bin/redis-cli --cluster create --cluster-replicas 1 192.168.1.101:6379 192.168.1.102:6379 192.168.1.103:6379 192.168.1.104:6379 192.168.1.105:6379 192.168.1.106:6379 192.168.1.107:6379 192.168.1.108:6379 -a '123456'
(2)创建4Master,4Slave的集群,先创建4个Master的全Master集群,在添加Slave实例
/opt/redis/bin/redis-cli --cluster create 192.168.1.101:6379 1192.168.1.102:6379 192.168.1.103:6379 192.168.1.104:6379 -a '123456'
(3)添加Slave实例
# 依次添加4个Slave即可,下边是添加一个Slave的命名
/opt/redis/bin/redis-cli --cluster add-node 192.168.1.105:6379 192.168.1.101:6379 --cluster-slave --cluster-master-id 9000a261858463dea8c607acc3104485aff9d5bc -a '123456'
(4)查看集群状态(随意指定一台节点即可查看集群所有节点状态)
/opt/redis/bin/redis-cli --cluster check 192.168.1.101:6379 -a '123456'
(5)迁移Slot跟之前redis-trib.rb是相同的操作
附:
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
cluster slots命令说明
执行结果如下
4 #start slots 5460 #end slots 5.5.5.102 #ip 29001 #port eb7dfedad330c2421ed04321ca24c33ebcadb1a9 5.5.5.101 29001 6ecf0faaedafcf2e4b14c221721d3b279f2c5748 1 3 5.5.5.101 29003 7c79008aac1a2b1aa3f64e9d3747146f766386bd 5.5.5.103 29003 a3f384efcd3e38642b5fb68507fde01a5117704f 10923 16383 5.5.5.101 29003 7c79008aac1a2b1aa3f64e9d3747146f766386bd 5.5.5.103 29003 a3f384efcd3e38642b5fb68507fde01a5117704f 0 0 5.5.5.103 29002 a76debe07f1b481a4ac634d3bfaac782c0cb2024 5.5.5.102 29002 2da5169ef3cf069a5088eb4c84363e2bea34fbba 5461 10922 5.5.5.103 29002 a76debe07f1b481a4ac634d3bfaac782c0cb2024 5.5.5.102 29002 2da5169ef3cf069a5088eb4c84363e2bea34fbba
脚本slots.sh
redis-cli -h $1 -p $2 -c cluster slots | xargs -n8 | awk '{print $3":"$4" "$1"-"$2}' > tmp_slot_range awk '{a[$1]++}END{for(i in a)print i}' tmp_slot_range | sort -nk2 -t ":" > ip_port for i in `cat ip_port` do slots=($(awk '/'$i'/{print $2}' tmp_slot_range)) len=${#slots[@]} printf "$i-> " for(( j=0;j<=len-1;j++)) do printf "${slots[j]} " done echo done
print $3":"$4" "$1"-"$2为输出格式
ip:port startslot-endslot
脚本说明:
第1行获取到结果如下:
5.5.5.102:29001 4-5460 5.5.5.101:29003 1-3 5.5.5.101:29003 10923-16383 5.5.5.103:29002 0-0 5.5.5.103:29002 5461-10922
第2行获取的结果如下:
5.5.5.102:29001 5.5.5.103:29002 5.5.5.101:29003
第4-14行获取第2行的结果的每一行对应的slot范围
测试结果
[redis@lxd-vm1 ~]$ sh slots.sh 5.5.5.101 29001 5.5.5.102:29001-> 4-5460 5.5.5.103:29002-> 0-0 5461-10922 5.5.5.101:29003-> 1-3 10923-16383 [redis@lxd-vm1 ~]$
这里再优化一下输出的结果,将单个slot的情况,如0-0 输出为0
redis迁移slots获取脚本slots.sh:
redis-cli -h $1 -p $2 -c cluster slots | xargs -n8 | awk '{print $3":"$4" "$1"-"$2}' > tmp_slot_range awk '{a[$1]++}END{for(i in a)print i}' tmp_slot_range | sort -nk2 -t ":" > ip_port for i in `cat ip_port` do slots=($(awk '/'$i'/{print $2}' tmp_slot_range)) len=${#slots[@]} printf "$i-> " for(( j=0;j<=len-1;j++)) do s1=$(echo ${slots[j]} | awk -F[-] '{print $1}') s2=$(echo ${slots[j]} | awk -F[-] '{print $2}') if [[ $s1 -eq $s2 ]];then printf "$s1 " else printf "${slots[j]} " fi done echo done [redis@lxd-vm1 ~]$ sh slots.sh 5.5.5.101 29001 5.5.5.102:29001-> 4-5460 5.5.5.103:29002-> 0 5461-10922 5.5.5.101:29003-> 1-3 10923-16383 [redis@lxd-vm1 ~]$