经过几个月的规划的施工,目前WEB自动化运维系统已经初见规模了,当然虽然是Web自动化运维系统,但究其根本还是一套远程管理系统,因为目前业务主要管理的是windows机器,所以整个系统使用C#来进行的编写,但也是有部分业务是跑在Linux下的,后续还会增加Linux的支持,虽然已经到内部的3.0版本,但目前项目还在初期阶段,整体的架构还存在很大的完善空间,目前项目还没有进行开源化,待管理界面确定后将会对其进行开源。
系统架构
WOS:WebOpsServer :WEB运维自动化系统服务端
WOC:WebOpsClient :WEB运维自动化系统客户端
WOM:WebOpsModule :WEB运维自动化系统模块
系统时序
手动检测
主要用于主动发送指令,主要用于手动触发节点机上指令,如执行**Nginx配置文件同步,DNS**同步或对服务器进行单项业务检测
触发检测
通过服务端进行事件触发,执行客户端指令
自助检测
依靠节点机自身时钟,进行定时任务,通过已经预设的定时任务
系统通讯
通讯协议是整个项目的核心组成部分,整套系统的交互基于Client端的指令接收器与Server端的异步返回处理器实现,数据传输部分仅存在两个结构体 ,即命令发送结构体与命令回收结构体
结构体
1 | struct instruct{ |
模块开发
代码开发
本项目已经做好的模块的Demo,在开发模块前需要先进行Demo的初始化工作
1、 复制一份新的WebOpsModule__Demo ,命名成WebOpsModule_{模块名称},并将工程WebOpsModule__Demo.csproj重命名为WebOpsModule_{模块名称}.csproj
2、 在VS2015中导入项目
3、 修改基础信息
a) Log4NET配置文件名称
b) AssemblyInfo基础信息
c) 项目属性
修改完成后即可开始编程了,Webops模块开发需要分为Server模块与Client模块,在开发时需要全部实现,Client一般是先客户机上的逻辑,Server段一般实现回收后的数据处理(入库等)
Client 端代码
1 |
|
Server 端代码
1 |
|
逻辑完成后,模块就开发完成了。
模块安装
编写完成后,需要将打出的DLL文件,复制到Server端Update目录下:
E:\MyServices\WebOpsServer\Module\update
同时复制到被控机器的Client端下
E:\MyServices\WebOpsClient\Module\update
模块调用
目前此系统支持三种调用方式,分别为:
1、 客户端定时调用,在每个客户端下均有crontab文件,将需要执行的模块写入内部,即可开始调用,文件写法规范如下:
数字 模块名 参数 │ │ └─代表的执行频率,秒钟,必须是5的倍数 │ └──────模块的名称 └──────────────────模块需要传入的参数(json)
例如:
#每25秒钟执行ServerRepoCheck 传入的参数为1-> D:/OfficialCluster
25 ServerRepoCheck {“1”:”D:/OfficialCluster”}
模块调用后,会在log_self_exec 写入整体调用过程日志
2、 服务端定时调用,在manager数据库的task_interval表中,填写入数据,即可开始由服务端发起的定时调用
例如下框中,每10秒钟调用10.0.20.11 执行 NodeRepoCheck 参数为 alias->OfficeCluster,f_version->
调用过程会写入log_trigger_async_exec(异步模式) 或 log_trigger_sync_exec(同步模式) 中
3、 服务端队列调用,在manager数据库的task_queue表中,填写入数据,即可开始由服务端发起的定时调用
每个任务只会执行一次,当flag致成q(queue) 后5秒钟内执行,只需要填写下表红框内的字段
队列调用后会自动生成id,调用过程会写入log_trigger_async_exec(异步模式) 或 log_trigger_sync_exec(同步模式) 中