免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: duanjigang

【实践1】系统管理工具[cmserver-cmclient]第一版--请测试 [复制链接]

论坛徽章:
0
发表于 2011-03-30 09:41 |显示全部楼层
你说每个线程管理40个主机,每个主机用2秒,共计80秒,说明你对40个主机是串行处理的。
如果改成 ...
一介村夫 发表于 2011-03-30 09:08



    一开始用的是多进程,但是考虑到要收集返回值和错误信息,进行统一显示,如果多进程的话,每个进程就需要把结果通过IPC告诉主进程,多了一道父子进程通讯的工序,而且
想搞成一个工具,返回结果支持管道重定向的,多进程的标准输出不好控制(可能我能力欠佳)
因此现在用多线程,主线程在工作线程结束前检测状态就行了,所有线程都结束后,主线程打印信息就OK了。
这两天在内测,结合界面,我打算让程序自动计算下,每个线程分配的主机不超过5个,比如2000个主机就开400个线程,如果系统有限制,再修改系统参数吧。
执行时间长短还是很重要的。

论坛徽章:
0
发表于 2011-03-30 11:59 |显示全部楼层
增加了一部分功能,因为:有些任务,不止是传送文件,可能要操作这个文件。
文件只是操作数据而已,因此,增加了个info文件的概念。info文件中定义了对传输数据文件的操作,以及数据文件的信息。
如果用户在与数据文件同目录下创建了扩展名为.info的文件,比如/etc/1.conf和/etc/1.conf.info
同时存在,则把1.conf传递到目标机器的同时,也把1.conf.info传动过去,存储到cmserver的info文件目录下。
然后cmserver端就可以开发插件来处理不同的info文件,这样做的话,cmserver就是支持一个二次开发的框架了。
目前我已经做的能把数据文件和info文件都传递到对端了,下午修改下server处理端的框架,使得能够挂载exe程序作为插件,每个插件支持文件作为参数,比如:

  1. test_plugin -xml  1.xml
  2. test_plugin -ini   2.ini
复制代码
分别支持用1.xml或者2.ini作为参数调用插件test_plugin

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
发表于 2011-03-30 14:15 |显示全部楼层
增加了一部分功能,因为:有些任务,不止是传送文件,可能要操作这个文件。
文件只是操作数据而已,因此, ...
duanjigang 发表于 2011-03-30 11:59



    你的插件是指解析该类型的文件格式,然后执行后续的操作?

论坛徽章:
0
发表于 2011-03-30 14:32 |显示全部楼层
你的插件是指解析该类型的文件格式,然后执行后续的操作?
dreamice 发表于 2011-03-30 14:15



    是的,该类型格式的文件存储了数据文件的控制信息和操作信息。为了支持不同语言和不同的开发习惯。因此让插件为exe程序(我一开始想做成动态库的插件)。
然后配置文件格式也支持xml或者ini,方便java或者C程序解析。
插件从info文件中获取到数据文件的信息后,就可以对它进行处理了。执行结果直接打印到stdout,然后主控进程就可以通过重定向来获取执行结果了。

论坛徽章:
0
发表于 2011-03-30 17:49 |显示全部楼层
给这个工具做了个扩展功能,有些文件传送到目的机器后,需要做特殊处理,比如apache的配置文件http.conf更新了,不希望被人修改,因此需要有完整性保障功能或者说自动更新功能。关于自动更新功能,我想在以后再补上,先做完整性保障部分。
   为了把扩展功能和cmserver的功能独立开,增加了上面说道的文件信息文件,也就是所谓的.info文件,我们称之为“操作信息”。cmserver只负责文件的传送和“操作信息”的写入的本地指定目录中,剩下的事情交由第三方的程序来处理。

论坛徽章:
0
发表于 2011-03-30 17:56 |显示全部楼层
关于第三方的维护程序,命名为filekeepd程序,功能如下:
     首先,检测“操作信息”文件列表,如果有新的“操作信息”文件生成到本地,读取该文件内容中的type字段,然后根据type字段决定调用哪个插件程序来进行处理,把处理结果重定向到一个结果文件,然后上报结果到命令发送中心server端。这样,它的第一个功能,是任务的实时执行。
   其次,需要做完整性维护,filekeepd间隔固定的周期,检测实际使用中的配置文件与本地info文件中指定的标本文件的差异(通过md5sum来实现),如果实际使用文件发生变更,则认为文件被破坏,用仓库中存储的标准文件覆盖实际使用的文件。完成完整性的维护。

   因此,需要一个第三方程序来完成实时执行命令和恒久的完整性维护功能。

文中提到的插件,后面接着说。

论坛徽章:
0
发表于 2011-03-30 18:01 |显示全部楼层
本帖最后由 duanjigang 于 2011-03-30 18:08 编辑

关于实时执行的插件

把需要实时执行的任务交给对应的插件,这样做,能够支持二次开发,比如在服务端增加了某个类型的文件,为它定义一个编号,同时把对应处理这种文件的可执行程序(不管是java程序还是C++程序还是脚本程序)拷贝到客户端机器,修改配置表明该插件来处理该类型的文件,当filekeepd检测到接收到的文件为对应的的类型时,便会调用该类型对应的插件程序,处理任务。


整个客户端的程序结构数据流,如图:
new.PNG

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
发表于 2011-03-31 08:55 |显示全部楼层
一开始用的是多进程,但是考虑到要收集返回值和错误信息,进行统一显示,如果多进程的话,每个进 ...
duanjigang 发表于 2011-03-30 09:41



    父进程建一个管道只读,子进程只写,效果绝对比你400个线程好。

论坛徽章:
0
发表于 2011-03-31 09:37 |显示全部楼层
父进程建一个管道只读,子进程只写,效果绝对比你400个线程好。
一介村夫 发表于 2011-03-31 08:55


好的,我把客户端功能完成了,按照你这个说法增加这个功能,对比测试下,谢谢村长!

论坛徽章:
0
发表于 2011-03-31 09:45 |显示全部楼层
对了,多进程这种模型,通过管道告知父进程结果的模型, 比单进程多线程的模型性能更好的原因是什么呢?
同等方式,2000台机器,50个线程和50个进程对比吗?还是你说的一个进程一个主机,得2K个进程?:wink:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP