CMDB是什么
CMDB,Configuration Management DataBase,配置管理的意思。
CMDB又称为资产管理,管理整个服务器的资产,当然也包括一些配置上的变更。
监控系统、自动化系统、发布系统都是基于CMDB的。
CMDB的管理与设计
CMDB要管理哪些信息
- 固定信息 很多数据都可以通过一些程序,或者是自动化的手段进行自动的录入,几乎是不会变的,但需要有一个比较好的规范,比如像机房或者交换机这样一些信息,自动化工具是抽取不出来的,所以我们采用了一个变通的方法,统一交换机的命名规范,统一采用机房+机柜的命名规范,然后通过脚本抓包的方式把网络结构还原出来。如果主机也是基于这样的规范命名的话,甚至还可以把机柜还原出来。
- 可变信息
- 人员信息:包括像联系方式的等信息,主要是为监控系统提供相应的数据;
- 状态信息:包括资源上线状况、下线状况,主要是为自动化上线提供相应的信息;
- 环境信息:包括生产环境还是测试的环境,主要是为监控系统及自动化系统提供相应的信息;
- 项目信息:在跟一些业务系统做一对接时,项目信息是非常重要的,比如说业务系统需要知道某一个项目有哪一些IP都需要从这里面取数据,同时也是自动化系统的支撑,有了项目归属,服务器才知道应该去做哪些部署。
怎样保证CMDB中数据的准确性
一个是我们在线上跟线下数据的同步,线下数据跟线上数据保持一致,前期要不停地盘点,到做CMDB的时候,这些数据才能用起来。 第二个一定要避免人工干预,这个可以通过一些自动化的手段和中心化CMDB相结合达到这个目的 。
为什么要中心化CMDB
首先,在一个资源交付之后,可以通过一些装机和初始化的脚本去调用CMDB的接口,这样机器的IP信息就会同步到资产系统的资源池里面去;后续在领用这些资源时,可变信息就发生了变化,这时候就有项目的属性,在我们的CMDB系统里面就知道了这个机器到底是属于哪一个项目,知道了属于哪个项目,然后才能明确后续需要进行哪些操作;其他系统,通过调用CMDB的API去获取项目信息。
由于自动化系统、监控系统等这些系统本身就是基于CMDB开发的所以直接读取相应的一些存储数据就好,或者也可以通过CMDB的API进行联动,但是由于其它系统的CMDB是独立的,比如发代码时要改发布系统的CMDB信息,这样话可能在操作上面难免会有一些失误。所以为了解决这样的问题,我觉得一个比较好的办法的话就是把CMDB的一些信息同步到配置服务里面去,比如说像ZooKeeper,etcd里面,同步进去之后,如果是其它系统要用的时候,再把的信息拿出来,对它进行处理。这样的话基本就可以达到一次变更,所有生效的目的,实现了中心化CMDB,集中化信息管理的目标。
CMDB的价值是什么
按照CMDB不同层来说:
- 接口层的价值 支撑整个运维平台的建设,尽量做到自动化,中心化的管理。
- 展示层的价值 通过一个展示就很方便地知道我现在的物理服务器,虚拟机等的比例是多少,亦或者可以知道我们每个机柜的容量是多少,只要数据是准确的,有价值的,基于这些数据,我们就可以做出非常多的组合。
按照通用的运维工作的价值维度来说:
- 稳定 信息的维护越少人工干预,就越稳定。
- 效率 如果按照中心化的思路去做CMDB话,有很多信息就不需要多处变更了,从这个维度来说,也就提高了我们的效率,提高效率的同时也保证整个系统的稳定,因为人工操作难免都会出现一些问题的。
- 成本 我们可以根据CPU和内存去推算我的这个月这台服务器支出是多少,有了这些数据就可以得到每个月的机房支出,计算资源利用率。那么就可以很方便地进行。
涉及的工具
- Ansible
简单的自动化IT工具。这个工具的目标有这么几项:自动化部署APP;自动化管理配置项;自动化的持续交互;自动化的(AWS)云服务管理。所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。
- SALTSTACK
一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。
底层采用动态的连接总线,使其可以用于编配,远程执行, 配置管理等等。
内容来源: 前聚美优品运维负责人:CMDB的那些事儿