前聚美优品运维负责人谈CMDB

导读CMDB大家并不陌生,在运维的工作中几乎都会用到CMDB,在聚美内部我们也称它为资产系统,管理整个服务器的资产,当然也包括一些配置上的变更。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

讲师介绍

张川,前聚美优品运维负责人。任职聚美优品四年间,负责运维自动化系统、监控系统及网站系统架构的优化与重构。主导设计并参与建设运维平台,推动完成了整个运维团队从工具化、人工化到平台化的过渡。同时,在公司的多次大促活动中(瞬时并发达到平时几十倍),保证各业务线系统的稳定。

分享大纲:

  1. 什么是CMDB
  2. CMDB的表现形式与现状
  3. 怎样管理与设计CMDB
  4. 关于CMDB的一些构想

一、什么是CMDB

CMDB大家并不陌生,在运维的工作中几乎都会用到CMDB,在聚美内部我们也称它为资产系统,管理整个服务器的资产,当然也包括一些配置上的变更。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

二、CMDB的表现形式与现状

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

这个截图可能算是聚美优品第一版的CMDB,这是刚进公司,我们在做第一版监控系统时(那时用的是Nagios),通过这个去管理资产信息,再通过用脚本去读取这个文件,最后生成报警配置,这样我们管理监控时只需要修改这个文件,最后再执行脚本就可以达到监控变更的目的。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

上面的图是Ansible的CMDB模块,这是官网上的截图,大概的原理就是基于hosts文件里面的主机信息,生成相应的资产信息,大家可以看到,这里的信息已经比较丰富了,包括硬件及系统相关的一些信息,而且颗粒度已更细致。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

CMDB的表现形式非常多,上面只是举了两个例子。很多时候大家可能都没有意识到我们在使用它,我再举个例子,早期的时候,大家或许有过这样的经历,我们用excel去管理服务器信息,这其实也可算做是CMDB的表现形式之一,只是这种方式的对象是人,而非某个系统。

这类的方式都有一个比较大的问题。大家可以从上面的例子看到,监控系统和自动化系统的CMDB其实是隔离的,CMDB是没有办法去做到统一修改的,所以在变更了监控系统相应配置之后,自动化系统是不会生效的,我们又要单独的去变更自动化系统的信息,导致额外的维护成本,所以很多时候我们面临的都是这样一个现状——有多套CMDB并存。

在开始做CMDB之前,理想是美好的,希望CMDB是中心化的,就像这张图所表达的一样,如果说整个远维平台是一个大树的话, 那么CMDB就相当于这颗树的树干和树根,有着非常重要的作用,而其它子系统,像是监控系统,自动化系统,还有业务相关的一些系统等就像树的树枝和树叶,大家互相依存,在CMDB上面做任何的变更之后,其它周边的一些系统能够立马知道,而且同时能将这些变更应用到具体的场景上。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

三、怎样管理与设计CMDB

在设计CMDB之前, 我首先会从运维的角度去考虑,怎么去管理这个系统,让系统更易于维护和管理,所以在设计之前必须先问一个问题:怎么去管理?那首先就要知道需要去管理哪些信息,也就是说哪些信息应该放到CMDB里面,这些信息的我们对它怎样进行分类 。另外一个就是这些信息对我们后续的一些系统的建设能够提供什么样的一个价值。

第二个就是怎样去保障这个数据的准确性。要保证数据准确性有两种:一个是我们在线上跟线下数据的同步,线下数据跟线上数据保持一致,前期要不停地盘点,到做CMDB的时候,这些数据才能用起来。第二个一定要避免人工干预,这个可以通过一些自动化的手段和中心化CMDB相结合达到这个目的 。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

前面提到了在CMDB的信息管理里面需要管理哪些信息。信息的分类,我的理解,大致可分为两种,一种是可变信息,另外一种是固定信息。固定信息的,很多数据都可以通过一些程序,或者是自动化的手段进行自动的录入,几乎是不会变的,但需要有一个比较好的规范,比如像机房或者交换机这样一些信息,自动化工具是抽取不出来的,所以我们采用了一个变通的方法,统一交换机的命名规范,统一采用机房+机柜的命名规范,然后通过脚本抓包的方式把网络结构还原出来。如果主机也是基于这样的规范命名的话,甚至还可以把机柜还原出来。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

可变信息是构成CMDB生命最重要的信息,有了这些信息才让资源真正有了相应的归属。人员的信息,包括像联系方式的等信息,主要是为监控系统提供相应的数据,状态信息包括资源上线状况、下线状况,主要是为自动化上线提供相应的信息,环境信息包括生产环境还是测试的环境,主要是为监控系统及自动化系统提供相应的信息,项目信息在跟一些业务系统做一对接时时非常重要的,比如说业务系统需要知道某一个项目有哪一些IP都需要从这里面取数据,同时也是自动化系统的支撑,有了项目归属,服务器才知道应该去做哪些部署。

CMDB在设计的过程中,我觉得是比较重要的是自动化的系统跟CMDB系统的结合。首先,在一个资源交付之后,可以通过一些装机和初始化的脚本去调用CMDB的接口,这样机器的IP信息就会同步到资产系统的资源池里面去,后续在领用这些资源时,可变信息就发生了变化,这时候就有项目的属性,在我们的CMDB系统里面就知道了这个机器到底是属于哪一个项目,知道了属于哪个项目,然后才能明确后续需要进行哪些操作。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB


但是这个时候,我们的自动化系统是不知道项目信息的,所以需要通过CMDB API去拿到项目等相关的信息,我们使用的是Saltstack,简单的说,就是将从CMDB获取到的项目等信息来更新我们的grains,这样自动化系统在后面进行业务部署的时候,才知道应该做什么操作。同时这个时候,自动化系统还会将自己读取到的固定信息,通过调用CMDB API,将这些信息刷入资产系统,完成整个信息的完善, 这样就实现自动化系统和CMDB系统的联动。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

之前提到,很多时候我们其实都是面对的多套CMDB并存的情况,在我们运维平台开始设计时,由于像自动化系统、监控系统这些系统本身就是基于CMDB开发的,所以直接读取相应的一些存储数据就好,或者也可以通过CMDB的API进行联动,但是由于其它系统的CMDB是独立的,比如发代码时要改发布系统的CMDB信息,这样话可能在操作上面难免会有一些失误。所以为了解决这样的问题,我觉得一个比较好的办法的话就是把CMDB的一些信息同步到配置服务里面去,比如说像ZooKeeper,etcd里面,同步进去之后,如果是其它系统要用的时候,再把的信息拿出来,对它进行处理。这样的话基本就可以达到一次变更,所有生效的目的,实现了中心化CMDB,集中化信息管理的目标。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB


前面讲的更多的是偏实现的一些东西,下面主要想聊下关于展示相关的一些东西,前面提到在做CMDB之前要首先考虑CMDB的价值在哪里?一是支撑我们整个运维平台的建设,尽量做到自动化,中心化的管理,这个是接口层的价值。展示层的价值在哪里呢,上面的这个截图是我们一个子功能的截图,通过这样一个展示就很方便地知道我现在的物理服务器,虚拟机等的比例是多少,亦或者可以知道我们每个机柜的容量是多少,只要数据是准确的,有价值的,基于这些数据,我们就可以做出非常多的组合。

四、关于CMDB的构想

关于CMDB的一些构想,在很多时候,大家可能都会面临过这样的情况,就是一个同事可能有多个的账号,比如说公司的电脑登录账号,公司邮箱账号等,这些信息如果按CMDB的定义去看理解的话,可能不能称它为CMDB,但是我认为也可按CMDB中心化方式去管理,将存储层打通起来。比如代码仓库,邮箱账号,服务器登录等都可以通过openldap去做统一的数据存储,这样在发生人员变更的时候,就可以做到一处变更多处生效的目的,而不需要过多的人工干预。

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB

但这个方案也有一个缺点,会存在一定安全隐患,因为如果数据层都打通的话,如果发生密码泄漏,其它的项目自然会面临同样的风险,因为各个系统的密码都一样了,所以最好是能再加一层双因子验证,保证信息的安全性。

  • CMDB的价值

前聚美优品运维负责人谈CMDB前聚美优品运维负责人谈CMDB


从我自己的理解,运维的工作很多时候都涵盖在这三个领域里面,稳定是最重要的,第二个是效率,然后是成本。CMDB在哪个地方可以体现它的价值呢?我个人认为在成本这一块能力体现非常大的价值,上面提到的固定信息里面,包括了硬件,系统等信息。而成本,我理解也是一个固定信息,比如说我们可以根据CPU和内存去推算我的这个月这台服务器支出是多少,有了这些数据就可以得到每个月的机房支出 。

有了这些信息后,比如说我们的服务器资源通过监控系统查看这个月已经跑得非常满了,下个月找老板我要买服务器,但没有数据支撑的话,直接给老板说买50台机器是没有任何说服力的,实际上用CMDB也可以做这个事情 。服务器价都是可以推算的,甚至还可以通过爬虫去爬取网上的一些报价信息,在当月资源不够用时,需要增加时,可以提取出来告诉老板,就知道需要多少成本预算了。

第二的话是效率,如果是在开始设计CMDB之前,我们就按照之前中心化的思路去做CMDB话,有很多信息就不需要多处去变更了,从这个维度来说,也就提高了我们的效率,提高效率的同时也就保证整个系统的稳定,因为人工操作难免都会出现一些问题的。

最后引用小米提出来的这个概念,NOOPS,我们可以通过把所有的系统打通起来,去帮助研发提高他们的效率,比如说他们涉及资源使用时可以通过工单系统去申请资源,经过审批之后,自动交付资源,发布代码,上线后可以通过业务监控获知业务的状态,达到一个自主上线的状态,当然这中间还是需要人工做干预,不过这个干预更多的就是流程上的审批,目前这也是我们努力的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/156036.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决ubunut20.04系统麦克风异常问题

背景 在部分ubunut环境中,我们指定了麦克风的下标,使用指定的麦克风有问题,只能录音一次,第二次就失效了,不过只是部分ubunut系统会遇到这个情况 # 找到以usb_mic_prefix为前缀的麦克风下标 import speech_recognitio…

10步搭建跨境商城,打造全球销售帝国

我将向您介绍如何通过10个简明步骤搭建一个强大的跨境商城,从而打造一个覆盖全球的销售帝国。在这个全球化时代,跨境电商已成为许多企业扩大业务的关键途径。然而,搭建一个成功的跨境商城并不容易,需要充分了解市场需求、制定合适…

【备忘录】SpringBoot+ dynamic-datasource配置自定义多数据源

一、 业务场景解释 由于公司业务需要开发设计一款文件读取导入工具,导入的配置和目标数据库并不一定在同一个数据库地址,故需要使用到自定义数据源,并且支持数据源切换 大致场景如下: 二、工具选择 鉴于市面上有很多工具&#…

matab读取包含struct混合类型的mat文件转为txt文件

现有一个mat文件,其内容如下: 目标:要将data.mat中的Obs_Iridium_A为文本格式。 分析: data.mat里面包含了4个struct结构的成员,Obs_Iridium_A是其中之一,Obs_Iridium_A为1*7496维,7496代表里…

路径复杂度(环形回路的复杂度计算)

路径复杂度 1、通用公式: (EF) - N12、非环形回路的复杂度计算公式为什么1?公式为什么(EF)-N? 3、类推到环形回路的复杂度演示区分下纯环形回路 和 不是纯粹的环形回路 3、特殊情况:自旋公式化理解:此时将B自旋回路看成一个环形回…

Mentor PADS BOM物料清单的创建方法教程

BOM表即物料清单。当原理图设计完成之后,就可以开始整理物料清单准备采购元件了。如何将设计中用到的元件的信息吗进行输出以方便采购呢?这个时候就会用到BOM表了。 1、执行菜单命令“文件”→“报告”,进入“报告”对话框,在“选…

聊聊无源滤波器与有源滤波器的概念、区别与应用

随着电子技术的迅速发展,电子设备得到广泛的应用,然而电磁环境污染日趋严重,已成为当今主要公害之一。在很多领域里,电磁兼容性已成为电气和电子产品必须有的技术指标或性能评价的依据,通过使用电源滤波器来过滤掉电源…

【C# Programming】委托和lambda表达式、事件

目录 一、委托和lambda表达式 1.1 委托概述 1.2 委托类型的声明 1.3 委托的实例化 1.4 委托的内部机制 1.5 Lambda 表达式 1.6 语句lambda 1.7 表达式lambda 1.8 Lambda表达式 1.9 通用的委托 1.10 委托没有结构相等性 1.11 Lambda表达式和匿名方法的内部机制 1.1…

零代码编程:用ChatGPT进行批量重命名时需要注意特殊字符

用ChatGPT进行批量重命名时&#xff0c;一部分成功了&#xff0c;但有一部分文件标题没有变化。 问下ChatGPT怎么回事&#xff1a; 回复&#xff1a;在Windows中&#xff0c;文件名不能包含以下字符&#xff1a;\ / : * ? " < > |&#xff0c;使用Python的 str.rep…

RISC-V IDE MRS无感远程协助模块详解

RISC-V IDE MRS无感远程协助模块详解 一、说明 1.1 概述 针对RISC-V/ARM等内核MCU的嵌入式集成开发环境MRS(MounRiver Studio)从V1.90版本开始内置无感远程协助模块&#xff08;Sensorless Remote Assistant Module&#xff0c;以下简称SRA模块&#xff09;。SRA模块是一款支…

【Java】LinkedList 集合

LinkedList集合特点 LinkedList 底层基于双向链表实现增删 效率非常高&#xff0c;查询效率非常低。 LinkedList源码解读分析 LinkedList 是双向链表实现的 ListLinkedList 是非线程安全的&#xff08;线程是不安全的&#xff09;LinkedList 元素允许为null,允许重复元素Linked…

跨境电商的新引擎:崛起的网红经济

随着全球数字化时代的崛起&#xff0c;跨境电商成为了国际贸易的新引擎&#xff0c;而在这个巨大的变革浪潮中&#xff0c;网红经济正在崭露头角&#xff0c;成为这一引擎的有力推动者。在这篇文章中&#xff0c;我们将深入探讨网红经济如何催生跨境电商的新动力&#xff0c;以…