CMDB

1,452 阅读8分钟

腾讯蓝鲸自动化运维沙龙-北京站

一、CMDB的定义和行业现状

  1. 存储IT设备 和 业务相关信息
  • CMDB是一个企业运维的数据库 管理企业运维自动化 智能化的底层数据 2.能为自动化的流程 提供操作对象信息验证
  • 所有服务支持和 服务交付流程 紧密相连 支持这些流程的运转 发挥配置信息的价值

在运维体系中的定位

image.png

传统CMDB解决的痛点

  1. 一致性
  • 数据一致性 不同部门 大家的数据不一致
  • 大家对同一个数据的理解不一样 数据不互通

2.准确性

  • 人工维护的话 容易出差错

3.可审计

  • 关心数据被谁动了 什么时候修改的

新技术的发展对CMDB的要求

云技术的发展 容器化的发展 DEVops的理念

应该具备的特性

  • 动态扩展
    • 多种多样的数据 以前是主机 现在是虚机 容器
  • 自动发现
    • 减轻人工的工作量
  • 关联分析
    • 数据不能是孤岛 之间要关联
    • 关联关系需要维护
  • API
    • 不能只做展示 可以让上层进行调用
  • 跨云管理
    • 海外业务
    • 云技术需要支持

二、如何构建 要点是什么

要点1 信息模型的管理

难点-数据的种类越来越多 内容多

- 业务逻辑
- 主机进程
- 网络架构

难点-技术演进 对模型灵活扩展的要求

实体机 --> 虚拟机 --> 容器、云 需要不断的扩展场景、模型、字段

解决方案 CMDB的模型设计

  • 传统的CMDB都是硬编码
  • 可视化界面 增删模型

字段的扩展

模型要能够自定义字段 image.png

难点 模型之间的关系

资产之间不是孤立的点 互相需要联系 image.png

解决-关系设计

image.png

  • 模型和模型之间的关系
  • 梳理关联关系
    • 一对一
    • 一对多
  • 关系下探

案例

image.png

要点2 面向业务的管理

行业差异大 业务差异大 环境多

运维场景的应用

如何建设?

1.搭建业务基本模型

3层

业务层

- 例如xxx业务对应 一批运维人员和业务人员
- 人员权限的隔离

集群层

- 运营环境的定义(测试、正式环境)

模块层

- 一个模块就是一类特定的进程 
- 模块常用于绑定进程 端口, 部署的定义 

2.如何解决业务架构的差异

image.png

企业组织架构的差异 业务灵活的拓展 - 3层设计的基础上 - 增加层级 以满足公司的需要

3.层级属性动态扩展

业务各层级的属性 要支持自定义 以适配各类业务特性管理 image.png

4.业务的状态管理

从资源入库到模块应用 CMDB状态管理贯穿整个业务的韵味流程

image.png

资源池

- CMDB的入口
    - 环境部署
    - 生产、购买的主机都要先到资源池
    - 自动发现
- 新机器没有标准化, 先放资源到资源吃 然后做初始化、标准化

业务

  • 空闲状态
    • 故障自愈: 预留一些空闲的机器 配置一些贴合业务的脚本 随时可以被启动 替换线上生产环境的服务器
  • 故障状态
    • 机器重启
    • 磁盘满 无法清理掉 就会被标记为空闲
    • 自愈

扩所容 分配到集群

集群

  • 正式 、 测试

模块、主机

  • 主要是监控 部署具体的功能上
  • 举例 停用模块 可以标记一下运营停用的状态, 如果是没有启用的模块 就不需要半夜打电话 要智能一点

要点3 面向运维场景

监控的接入

- 配置监控策略
    - 监控 应该配置应用、模块 应该以什么方式去监控
- 监控能自动发现主机录入 自动应用监控上去
- 机器下架后 监控自动下架 
- 判断主机所属的层级 有对应的监控策略
    - 主机属于测试环境的话 监控告警就不用生效
- 智能的判断 
    - 如果某个人收到告警的频率太高的话 需要降低告警的频率
    - 如果业务的频率高 可以调整
    - 高优先级的告警 还是要发

集群模版

  • 正式环境 部署多套

    • 定义集群下的角色 模块 主机属性
  • 测试环境 删除 重新部署的时候

  • 集群的模版 可以用过一键部署 可以复用配置

    • 游戏的上线 预估10个区 可能需要20个区 用模版就很方便了

业务配置文件管理

image.png

绑定模块和进程 精确无误管理业务的配置文件

配置文件模版

  • 可以使用一些 平台上的的原生数据 例如IP 模块信息 进程信息
  • 可以以变量的方式 将这些数据加入模版
    • 实际部署的时候 可以根据主机的属性 自动的分层 贴合实例的配置文件

    • 避免人工配置海量配置 犯错误的问题

进程管理

image.png

进程 端口的管理

  • GSEkit 可以从平台拿到端口、进程的启动方式、参数 从而可以操控进程
    • 基于底层管控
  • 蓝鲸监控 记录模块的进程、端口信息 然后可以监控自动启动的服务 如果没有启动的话 就会告警

样例 image.png

要点4 活起来的CMDB

自动发现信息

减轻手工录入 image.png

  • 装一个agent 自动安装agent 自动将数据采集 然后录入CMDB
  • 要保证录入的数据是标准化的
  • 对接一些底层的网络协议 网络路由、拓扑管理起来

实时快照

image.png

  • 不常变动的属性之外
    • cpu信息
  • 还有一些常变的信息
    • 底层的采集能力 cpu mem disk的使用率
  • 不仅仅是死的信息 也能看到活的信息
  • 这套数据上报 支持用户自定义采集

变更推送

用户和系统的变更 实时推送给周边关联系统 image.png

内存容量、磁盘容量的变化 怎么发现 怎么提醒运维?(例如机器问题 硬盘 掉了 )

  • 所有的对象、模型 属性发生变化的时候 位置转移、录入删除主机 都会产生事件
    • 提供一个API 注册一下 每次发生变更 可以推送信息给周边的系统
  • 内存变化的时候 对接到工单系统 某台机器 发生了变化
    • 需要确认是人为操作 还是机器故障

角色设定

image.png

例如 定义网络管理员 只能看网络设备的权限

网络 基础设施都会管理起来

API对接

现有的CMDB 怎么切入蓝鲸的平台 image.png

  • 企业不是白纸 不可能从0开始 都会既有的CMDB
  • 根据企业的实际需要 奖企业的数据同步到蓝鲸

自定义查询

组合查询条件成为一个自定义API的集合 image.png

例如 找主机 找一个模块的时候 需要关联查询

可视化的界面 可以定义业务条件、集群条件、主机条件 然后查询到自己的资源

使用案例

腾讯内部的情况

image.png

基本覆盖运维的所有场景 image.png

新集群搭建流程

image.png

1.获取资源

  • 使用主机资源池
  • 从资源池 将主机转到业务模块

2.新建大区实例

  • 建设集群和模块

3.主机注册

  • 将主机从空闲机划到业务模块下

4.创建DB

  • 获取端口和域名

5.部署程序

  • 不同的主机 部署不同类型的应用

6.初始化

  • 从CMDB读取业务的信息

7.拉起进程

  • 获取进程的端口、启动信息

8.部署监控

  • 模块的关联关系的拉群

9.验证

  • 写入操作 把状态转换 从未上线---测试状态

10.清理脏数据

11.对外开放

整个过程 和CMDB的关系密切

  • 通过自动化 每个流程都应该有状态流转

业务发布流程

image.png

模块故障替换流程

image.png

CMDB那些事儿

ansible-cmdb模块

image.png

现状 多套CMDB并存 监控系统一套 CMDB一套

要求 CMDB做了变更 其他周边的系统要能够感知到 并且应用到这些数据

信息怎么分类? 后期的系统建设能够体现什么价值 如何保证数据的准确性 - 线下数据 线上数据怎么保持一致

避免人工干预 要通过自动话的方式

可变信息和固定信息

image.png

有的数据可以用脚本拿到

怎么管理和设计? image.png

资源交付后 初始化脚本 走CMDB的API将数据同步进来 后期引用这些资源的时候 就可以知道归属 就可以进行关联 所以这个地方需要多个系统进行联动 自动化系统和CMDB系统的联动

CMDB的价值?

  • 支撑运维体系的建设
  • 数据统一起来

稳定 效率 成本 成本可以体现出非常大的价值

  • 服务器的成本价格
    • 每个月机器费用的投入
  • 假设服务器资源快满了 需要拿数据去找老板

难点

和其他部门的沟通 协调 推进 数据的准确性怎么保证 - 数据的盘点 - 自动化采集 但是要注意方法和规范

相关文档

Nacos nacos.io/zh-cn/docs/… CMDB 相关案例学习 <魅族CMDB运维自动化实践> zhuanlan.zhihu.com/p/48203305  王津银-应用CMDB 一体化DevOps及运维平台的基石v1.5 wenku.baidu.com/view/736c5a… 实战:阿里巴巴 DevOps 转型后的运维平台建设 www.gaowei.vip/info-JP9SG1…