回到主页

干货 | EasyOps 的CMDB主机自动发现方案

Ice Liang

· 操作指南

概述

自动获取主机信息在CMDB搭建中是一个重要场景,优维广州研发中心的小伙伴Ice对于对于CMDB的主机自动发现方案做了些许整理。

作者简介:Ice Liang毕业于中山大学软件工程系。曾任职于阿里移动事业群,目前是优维广州研发中心的开发成员

broken image

背景

本文介绍了IT资源管理中主机的自动发现的实现方法,包括主机信息从自动采集到自动上报、入库,以及后续的维护。

方案

实现自动发现,需要以下组件的配合:

  • agent 采集主机信息

  • receiver 用于接收 agent 采集的信息,并存入队列

  • gateway 用于给 agent 下发命令

  • auto_detect 从队列中读取数据,把采集信息按规则调用 cmdb 更新或新增接口

  • cmdb 更新、新增主机 API 接口

  • console, web 端展现, 需要用户干预部分的 ui 交互

设计

3.1采集

采集字段

broken image
broken image

采集策略

broken image

3.2处理

broken image

采用这种多 key 方案主要是考虑到以下场景:

  1. 更换网卡设备
  2. 虚拟机克隆
  3. 机器搬迁

基本上,若在 IT 资源管理中找到 mac 地址一样的主机,可以认为就是同一主机,直接进行更新即可。那么是不是可以仅仅用 mac 来做唯一标志就可以了?如果网卡设备坏了,换上新的,mac 地址自然就变了,但机器还是同一台,所以还需要其他字段来辅助标志主机的唯一。

uuid 是由 agent 生成的,加上 agent 本身的 uuid 就可以很好地解决了更换网卡设备所带来的问题。而在发生虚拟机克隆的时候,uuid 会是一样的,这时候 gateway 会检测到一样的 uuid,gateway 就会通知最近连接的 agent 重新生成 uuid。

当 mac 和 uuid 在 IT 资源管理中都找不到时,就要判断 ip 是否能找到了,如果也找不到,明显就是一台新机器,直接执行新增主机操作就好。但要是 ip 找到了,却是麻烦事。

因为会有两种场景,一是先手动录入了主机,而录入主机时只有 ip 字段,mac 和 uuid 字段都是空的,这时候就可以直接更新了;要是 mac 和 uuid 不为空,就可能是只有 ip 相同,比如灾备环境的机器与生产环境的机器的 ip 一一对应,相同 ip 对应着两台主机(我们倾向提倡 IT 资源管理中主机的 ip 唯一),这时,就有可能也是要执行新增操作。所以,只能由用户来干预确认了。

使用 mac+uuid+ip 多 key 的方式来确定主机的唯一性,下面罗列出一些场景(☑️ :在IT资源管理中能找到,✖️: 在IT资源管理中没找到)

broken image

3.3冲突缓存

在 CMDB 中, 新增对 HOSTRESOLVED 对象,由 auto_detect 来新建,由 web 端来查询或更新

HOSTRESOLVED 定义为

broken image

过程:

  • 由 console 查询 state 为 new 的纪录

  • 拥有新建及更新主机权限的用户才能操作

  • 如果用户选择为 create, 直接调用 cmdb 接口来新增主机

  • 如果用户选择 update, 直接调用 cmdb 接口来更新 mac, uuid