公司的产品(网关类)卖的套数增加,多服务器管理的问题也逐渐复杂,手工+excel基本上已经无法继续,首先一个需求就是满足对所有被管理机的定期/不定期批量密码修改(不定期的例子是有管理员离职等事件),另外升级也很麻烦。

http://bbs.chinaunix.net/viewthread.php?tid=1918627&extra=&page=1,《linux 系统批量管理工具介绍,实现对一万台服务器的同时批量管理,一键完成!1.4版本》,文章对这个问题的解决和跟帖讨论已经比较全的阐述了可能的解决方案。而实际上,解决方案多种多样,有针对这样独立需求的特定脚本实现,甚至增强工具,还有一些提出了多服务器配置管理的整体框架,而这些各有自己的应用场景。

归纳成下面几个层次的解决方法(假设运营中心服务器为GNOC)

1SSHpublickey方式

SSH 登陆系统2 种通用方法:1、用户名密码方式  2publickey 的方式,可避免输入密码。可以在每个被管理机上安装一个SSHpublickey,在GNOC上有私钥,在每台被管理机对GNOC建立信任关系。

http://linux.itwaka.com/server/64990.html文章比较详细的介绍了具体做法,稍微包装就可以用数据库来保存密码。

 

SSH的扩展:dshpssh,简单的批量处理SSH有些新的辅助工具。

dsh 是专为在远程系统上运行 shell 命令设计的,可以简化对大量计算机的操作。pssh除了具备 dsh 的所有功能之外, 还可以把文件从一组系统复制到中心服务器或反向复制,以及杀死一组系统上的进程,与 dsh 不同,pssh 总是通过清单 文件指定主机,其中的每行采用 host[:port] [user] 形式。PPSH和它的底层库是用Python 编写

可参考http://sapling.me/unixlinux/pssh.htmlhttp://os.51cto.com/art/201012/240113.htm

 

SSH类方法有个缺点,就是这个在管理端的私钥你一定要保存好,万一管理服务器系统重装或其它原因导致私钥丢失,那你就没办法登录远程机器了,需要把新公钥发到每一个被管理端。

另外,这类方法适合较小型的情况,几百台以上可能不是很好了。

 

2Expect交互式工具

采用传统的用户名密码登陆方式,当然改成自动的了,避免了SSH的公钥私钥问题。expect工具很强大,可以实现交互式管理,比如如果你想改密码,输入passwd命令后,系统会提示你输入New Password: ,如果使用普通脚本的话,那你是没办法进行交互式的。但是expect就可以做到检测系统的返回值并且根据返回的提示来自动交互。http://wenku.baidu.com/view/e98cd0d428ea81c758f5780c.html就有一个例子。《实现对一万台服务器的同时批量管理》没有说准确的是expect实际上不仅仅是单任务,也可以多任务(http://testing.blog.51cto.com/530290/157048expect介绍用法,http://www.oschina.net/code/snippet_47318_4046演示了expect怎么做多任务)。

如果仅仅就局限于搞几个基本任务,管理千把台服务器,用这个方式功能和性能也还可以接受,主要的优点就是对客户端没有什么要求,实现起来也会比较简单。

 

3,自定义实用工具

接下来的方法就是自己写个socket工具了,在每个被管理服务器上装上自己编写的代理,和集中管理服务器进行通信,完成管理工作。

作为起点,可以用《linux系统批量管理工具介绍,实现对一万台服务器的同时批量管理,一键完成!1.4版本》这个里面的工具(python开发),作者维护了飞信服务器群过。应该满足我们的主要需求,也能彻底搞清楚原理和机制,自己也可以在上面扩展一下,用起来会比较顺手。

不足之处就是整体框架偏弱,游击队的搞法,好像不是很正规。

 

4,开源运维自动化工具

正规的工具是完成整个管理过程的,架构都比较复杂了。

自动化配置管理工具以前流行的是cfengine,现在流行的是puppetgoogle用之)、Bcfg2等,完成如升级软件包、管理配置文件、系统服务、分发文件、cron任务以及添加新的配置、修复错误等任务。账户管理只是其中的一项简单任务而已

http://www.mysqlops.com/2011/09/06/puppet%E8%BF%90%E7%BB%B4%E8%87%AA%E5%8A%A8%E5%8C%96%E4%B9%8B%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86.html

http://os.51cto.com/art/200711/60043.htm

cfengine是基于C的,而puppet是基于ruby的,感觉现在puppet的资料比较多一些,但另一方面cfengine是不是对掌门的消耗好要求更少一些,这个需要进一步评估。

 

小结:

就现在一般产品管理提出的需求而言,12两项工具是马上需要管理员们掌握的,尤其是2还是一个比较简便易行的方式。

方法3和方法4 ,需要有一定脚本基础的来研究。方法4对现阶段是不是有点太琐碎了,很多功能都用不上,方法3是一种轻量级解决方法,也容易掌握透彻,直觉上可以从这里着手,融合为自己的东西。但方法4思路和功能特性是值得借鉴的,应该有个人深入研究一下最好,并吸收优点集成到我们自己重新改编的方法3中。

11-17 09:39