日期:2014-05-16  浏览次数:20518 次

整理CMDB开发思路

一直更新百度的博客,总想换到Javaeye但是总是想不起来,转之前写的关于CMDB的工作,做备份。



我们公司使用Puppet做配置管理工具,大部分的配置信息变更和管理,包括Iptables的配置都由Puppet最终落实。所有硬件服务器的资产管理通过CMDB来维护,我们的CMDB除了了解服务器的硬件信息和数量的资产管理功能外,还集成了应用部署功能,CMDB与Puppet配合,尽量实现自动化和保持数据源单一,避免CMDB数据与服务器本身数据脱离的情况。

目前功能:

1. Puppet client本身增加扩展后,可以采集服务器的硬件信息,通过Puppet server的扩展插件将数据汇报到指定的数据库接口,因此我们让Puppet汇报服务器的硬件信息到CMDB数据库,这样只要在Puppet管理的服务器就会出现在CMDB,避免手工录入服务器信息到CMDB出现的错误,并明确所有的服务器都需要Puppet来管理。

2.对于新上架的服务器,接入网络后,通过kickstart安装操作系统,同时安装Puppet,保证了即使新到空闲服务器也在CMDB和Puppet的管理下。

3.Puppet本身external_node功能可以指定扩展程序,我们通过程序智能分析不同的主机按照哪种同步规则进行同步。

4.为服务器设定了完整的生命周期,包括:服务器上架、初始化、配置部署、维护、下架,同时在Puppet汇报时进行状态判断和状态更新,使得CMDB可以动态呈现每个服务器所处的状态,尽可能保证服务器状态与CMDB数据状态一致。

5.对于已经有操作系统的服务器,在业务部署阶段,我们通过业务模版来定义不同业务类型所需要部署或变更,这部分类似RightScale的业务模版。每个业务模版都由许多独立的脚本组成,这些脚本都是共用的,可以复用,组合成各种需要的模版,比如apache安装, php安装, tcp参数优化, Puppet安装都是独立的脚本,一个web服务器的业务模版就可以由这些脚本组合完成。

6.在业务部署阶段,或后期批量操作维护过程,CMDB支持任务队列和任务锁,当需要进行业务部署时,可以通过任务队列和worker来提升工作效率,并保证工作任务是顺序的,通过任务锁来保证同一台服务器当前只有一个任务避免资源抢夺。

7.在任务执行过程中,所有的任务都是由模版和脚本组成的,因此可以自动计算当前任务的执行进度并实时回调接口来反馈状态、工作日志。

8.CMDB提供基础API为Nagios、Collectd、代码发布、负载均衡提供服务器状态更新,在线服务器列表等功能,以保证每增或减一台服务器,相关业务自动完成配置变换。

计划新增:

由于业务部署由模版和脚本组成,CMDB了解一个业务如何部署。因此CMDB可以自动的在某台服务器上增加某一业务或移除。我们正尝试将监控中的服务器使用情况提取到CMDB,使CMDB可以根据这些监控数据进行分析,当线上业务压力过大时,自动从空闲服务器中进行业务部署并加入线上分担压力,当业务压力下降时,可以自动撤离多余服务器,并恢复到原始状态或者在压力大时,将业务部署到压力小的后台服务器或共用服务器上,来保证爆发增长,当压力缓和使,移除在共用服务器上业务。实现服务器弹性,提升服务器利用率。

?

一份简略的ppt http://www.slideshare.net/icej/cmdb-9645683