Clip是一款自动化运维工具,适用于海量服务器的管理场景,可以降低系统误操作风险,提高工作效率,工具借鉴了DNS的思路,将传统的IP管理纬度替换为String管理纬度,管理方式的改变使海量运维时更加的便捷、可靠与高效。Clip是C/S架构,它将IP关系保存在Server端,Client端可以下载SDK,通过SDK遍历Server端的IP与模块对应关系,并在本地重新组织与编排,在此基础上工具还扩展了,如远程命令、文件拷贝、IP组织树遍历、历史命令查看、IP对应String关系正反解析与导入等功,以下是两张应用截图。
字符界面
图形界面
设计思路
首先,传统服务器管理方式与String管理方式的相比,String管理方式的3点优势:
- 见名识意:传统为IP管理方式,IP由4组无意义的数字组成,比较难记忆,与传统方式相比String可以见名识意,方便记忆;
- 防止误操作:管理海量服务时,IP相似经常会导致运营故障,譬如A模块(10.131.24.37 )和B模块(10.117.24.37) ,后两位数字一致,惯性的认为两个B模块就是A模块,发送配置导致线上故障。通过string管理方式可以很方便的规避此问题;
- 关系正反查:String 可以解析1个IP,也可以解析一组IP ,根据IP也可以反解析String对应关系,这让我们管理一组服务更加的方便。
案例1
String由(idc-product-modules-group) 4段组成,了解cmdb的同学会发现它与cmdb的结构很像,4级模块定位一个服务,但是随着业务的发展,笔者觉得4级服务已经无法定位到一个服务,譬如,在一台服务器上混合部署不同的业务模块,这里4级只能定位到服务的IP级别,而无法精确定位到真正的服务,所以Clip在此基础上增加了一级(idc-product-modules-group-port),port端口,通过5段定位一个服务,相比CMDB这也是Clip优势,灵活变换来定位一组服务。
案例2
上海机房,A模块使用80端口提供服务,目前有100多个机器 ,B模块使用8080端口提供服务,目前有100多个机器,由于业务流量下降,为了节约资源目前想将两个模块200台机器资源合并,但功能不合并 。我们可将两个服务表示到不通的String中,如A模块(sh-weixin-friend-a-80), B模块(sh-weixin-friend-b-8080),通过String就很容易的将两个服务分别开,并部署在相同的服务器上提供服务了。以下是真实线上应用效果图
扩展命令
目前SDK共有8个子命令:
- scan:用于对String对应的IP进行端口存活状态扫描;
- cstring: 用于对String对应IP解析,与IP对应String关系的解析;
- ssh:用于对String对应IP,远程执行系统命令;
- scp:用于对String对应IP,远程拷贝文件;
- tree: 遍历String下的子节点;
- history:显示历史执行过的命令;
- import: 导入IP对应String关系;
- lt: 从本地获取IP关系进行管理;
- help: 显示Clip当天有多少子命令。
代码地址
- Server端(2019年时用golang重写的,原来是用PHP实现),地址见:https://github.com/puppeter?tab=repositories
- Client端,用Python实现,地址见:https://github.com/puppeter/clip