又一种获取redis cluster slots分布的小脚本
需要:昨晚学习了cluster slots命令,之前写的脚本,有可以换种方法获取到redis cluster slots 分布情况。
cluster slots的结果如下:
4
5460
5.5.5.102
29001
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
获取redis cluster slots分布的小脚本
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
脚本说明:
第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 a8.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到其他节点,这里再优化一下输出的结果,将单个slot的情况,如0-0 输出为0
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 a8.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 ~]$
又一种获取redis cluster slots分布的小脚本的更多相关文章
- 另外一种获取redis cluster主从关系和slot分布的方法
条条大路通罗马,通过最近学习redis cluster 观察其输出,发现了另外一种获取master-slave关系的方法. [redis@lxd-vm1 ~]$ cat get_master_slav ...
- 第3种方法获取redis cluster主从关系
需求:使用cluster slots命令,获取redis cluster 主从对应关系. 说明:cluster slots命令对应的字段说明:http://redis.cn/commands/clus ...
- 获取redis cluster中所有节点的内存使用情况
需求:获取redis cluster集群中所有节点的内存使用情况. ip_port=`redis-cli -h $ -p $ -a abc123 -c cluster nodes | awk '{pr ...
- 直观获取redis cluster 主从关系
需求:还是redis-trib.rb脚本获取的信息不足或者太繁杂,这里给出更加直观的一种方法, 说明:已在4.x版本测试通过,3.x不可用. 原生的输出 (1adfa7f3...) keys slot ...
- redis cluster slots数量 为何是16384(2的14次方)
Redis 集群并没有使用一致性hash,而是引入了哈希槽的概念. Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分has ...
- 获取redis cluster master对应的slot分布情况
需求:原生的redis-trib.rb功能是强大,但输出的内容过于繁杂,比如我需要关注哪些master对应哪些slots,不是很直观,如果集群的规模更大的话,那么输出的结果获取信息更加困难. 说明:这 ...
- 获取本机IP地址的小脚本
获取本机私网地址(1个) #!/bin/bash # Author : standby # Date : -- # Description : Get private ip address of lo ...
- K8S部署Redis Cluster集群
kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis 介绍 • Redis代表REmote DI ...
- K8S部署Redis Cluster集群(三主三从模式) - 部署笔记
一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...
随机推荐
- 聊聊SpringBoot | 第一章:快速搭建SpringBoot第一个应用
快速搭建SpringBoot第一个应用 1.简介 本章仅介绍如何快速搭建第一个SpringBoot应用,细节内容下一章再做讲解,如果有需要,各位可以直接到Spring官网去了解. 从 Spring B ...
- 如何把您现有的流程系统数据迁徙到驰骋BPM上?
关键词:流程系统版本切换\ 驰骋BPM. 如何把您现有的流程系统数据迁徙到驰骋BPM上?这是一个大问题.在处理改问题之前,首先要了解驰骋bpm的数据库结构,驰骋bpm的特性在做计划. 驰骋BPM的流程 ...
- StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBui ...
- JAVA byte数组转化为16进制字符串输出
最简单的方法: 利用javax.xml.bind包下的DatatypeConverter printHexBinary public static java.lang.String printHexB ...
- 用javascript修改html元素的class
document.getElementById("collins_contentWrp").className="content-wrp dict-container c ...
- eclipse新下载,安装和配置
question1 java11没有jre,无法通过eclipse-inst-win64进行安装 solution Windows 7 64bit 安装jdk i586还是jdk x64?jdk x6 ...
- socket实现文件上传(客户端向服务器端上传照片示例)
本示例在对socket有了基本了解之后,可以实现基本的文件上传.首先先介绍一下目录结构,server_data文件夹是用来存放客户端上传的文件,client_data是模拟客户端文件夹(目的是为了测试 ...
- 基于 HTML5 WebGL 的智慧楼宇三维可视化监控
前言 可视化的智慧楼宇在 21 世纪是有急迫需求的,中国被世界称为"基建狂魔",全球高层建筑数量位居首位,所以对于楼宇的监控是必不可少.智慧楼宇可视化系统更多突出的是管理方面的功能 ...
- ORB-SLAM2 论文&代码学习 ——Tracking 线程
本文要点: ORB-SLAM2 Tracking 线程 论文内容介绍 ORB-SLAM2 Tracking 线程 代码结构介绍 写在前面 上一篇文章中我们已经对 ORB-SLAM2 系统有了一个概览性 ...
- kubernetes(14):k8s基于NFS部署storageclass实现pv自动供给
k8s基于NFS部署storageclass实现pv自动供给 https://www.cnblogs.com/Smbands/p/11059843.html https://www.jianshu.c ...