簡介
CMDB是所有運維工具的數據基礎
為什么使用CMDB系統
1.為了提高運維效率(實現運維自動化的第一步)
2.Excel管理資產過於混亂, 不方便年底進行資產的審計, 因此需要開發一套cmdb
CMDB功能
1.用戶管理,記錄測試,開發,運維人員的用戶表
2.業務線管理,需要記錄業務的詳情
3.項目管理,指定此項目用屬於哪條業務線,以及項目詳情
4.應用管理,指定此應用的開發人員,屬於哪個項目,和代碼地址,部署目錄,部署集群,依賴的應用,軟件等信息
5.主機管理,包括雲主機,物理機,主機屬於哪個集群,運行着哪些軟件,主機管理員,連接哪些網絡設備,雲主機的資源池,存儲等相關信息
6.主機變更管理,主機的一些信息變更,例如管理員,所屬集群等信息更改,連接的網絡變更等
7.網絡設備管理,主要記錄網絡設備的詳細信息,及網絡設備連接的上級設備
8.IP管理,IP屬於哪個主機,哪個網段, 是否被占用等
CMDB實現的核心邏輯(三種方式)
方式1:agent主動推送的方式
每台主機上寫一個agent的py腳本,然后將主機上的信息發送API
適應場景:服務器多
優點:速度快
缺點:需要為每一台主機裝agent程序
import requests import subprocess res = subprocess.getoutput('ipconfig') # 執行linux命令 print(res) requests.post(url='http://127.0.0.1',data=res.encode('UTF-8')) # 將信息推送到API上
agent方式架構圖

方式2:SSH方式實現(paramiko模塊)
通過中控機操作采集信息,發送到API過濾處理數據
適應場景:服務器較少的情況下
優點:不需要每台機器裝agent程序
缺點:有一個中控機,速度慢
import paramiko ssh = paramiko.SSHClient() # 生成ssh客戶端連接對象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允許連接不在know_hosts文件中的主機 ssh.connect(hostname='10.0.0.51', port=22, username='root', password='1') # 連接服務器,ip地址,端口,主機名,主機密碼 stdin,stdout,stdress = ssh.exec_command('ifconfig') # 執行linux命令 # stdin:輸入的命令 stdout:輸出的內容,stdress: result = stdout.read() print(result.decode('utf-8')) ssh.close() # 關閉連接
ssh方式架構圖

方式3:Salt-Stack方式
跟ssh方式差不多,中控機發送命令給服務器執行。服務器將結果放入另一個隊列中,中控機獲取將服務信息發送到API進而錄入數據庫。
使用場景:公司已經使用了Salt-Stack軟件
優點:快,開發成本低
缺點:依賴於第三方工具
salt-stack安裝
# master主機上
# 安裝salt-master
yum install salt-master
# 修改配置文件:/etc/salt/master
interface: 0.0.0.0
# 表示Master的IP
# 啟動
service salt-master start
# minion奴隸機上
# 安裝salt-minion
yum install salt-minion
# 修改配置文件 /etc/salt/minion
master: 10.211.55.4
# master的地址
或
master:
- 10.211.55.4
- 10.211.55.5
random_master: True
id: c2.salt.com
# 客戶端在salt-master中顯示的唯一ID
# 啟動
service salt-minion start
給主機授權
salt-key -L # 查看已授權和未授權的slave salt-key -a salve_id # 接受指定id的salve
salt-key -A # 允許所有的奴隸機
salt-key -r salve_id # 拒絕指定id的salve salt-key -d salve_id # 刪除指定id的salve
在master服務器上對salt進行遠程操控
salt 'db01' cmd.run 'ifconfig' # 獲取奴隸機的信息
基於API的方式遠程操控master
# 只適用於python2
import salt.client local = salt.client.LocalClient() result = local.cmd('db01', 'cmd.run', ['ifconfig']) # 執行linux操作命令
# python3 API方式
salt-stack方式架構圖

