要想要更好的学习必须要先了解什么是CMDB,CMDB,Configuration Management Database的简称,从英文单词中直译”配置管理数据库“,但实际上更多的被称呼为”资产管理系统“。
### 方案一:agent方案
```python
web服务<=>数据库<=>API程序<=>agent(部署到服务器上python服务)
1.python代码利用subprocess模块执行linux命令
import subprocess
res1 = subprocess.getoutput('ipconfig')
res2 = subprocess.getoutput('...')
...
2.利用requests模块post方法将命令结果发送回API程序
3.API程序对数据进行二次分析过滤,之后发送存储到数据库
4.web服务展示数据
```
### 方案二:ssh类方案
```python
web服务<=>数据库<=>API程序<=>中控机(paramiko)<=>服务器
选择1:paramiko模块链接服务器
选择2:ansible批量管理 # 底层链接也是基于paramiko
```
### 上述两套方案对比
```python
# 1.agent方案
优点
定时执行agent脚本,速度快
缺点
每次都需要部署
应用场景
服务器数量特别多
# 2.ssh类
优点
不需要部署agent服务
缺点
使用paramiko登陆服务器速度比较慢
应用场景
服务器较少
```
### 方案三:saltstack方案
```python
'''saltstack也是用python写的一个软件,master与所有minion彼此之间底层通过两个zeromq进行数据交互'''
web服务<=>数据库<=>API程序<=>中控机(salt-master)<=>服务器(salt-minion)
# 优点
不需要写任何代码,直接在中控机和服务器上yum install salt-master/minion
# 使用场景
服务器上已经部署了saltstack,那就多一事不如少一事
```
### 方案四:puppet方案
```python
'''较老,底层用ruby on rails编写,目前基本不用了'''
新浪第一代cmdb使用的就是puppt,后来由于ruby使用者较少不便于后续编写及维护所以之后基本不在使用了
架构跟salt-stack方案一致,大致每30分钟统计一次
```