1. 程式人生 > >配置管理系統(CMDB)

配置管理系統(CMDB)

一、 前言

1.1 簡介

CMDB(Configuration Management Database)配置管理資料庫,是所有運維工具的資料基礎。70%~80%的IT相關問題與環境的變更有著直接的關係。實施變更管理的難點和重點並不是工具,而是流程。即通過一個自動化的、可重複的流程管理變更,使得當變更發生的時候,有一個標準化的流程去執行,能夠預測到這個變更對整個系統管理產生的影響,並對這些影響進行評估和控制。而變更管理流程自動化的實現關鍵就是CMDB

1.2 功能

應該知道包含這幾種功能:整合、調和、同步、對映和視覺化

使用者管理,記錄測試,開發,運維人員的使用者表

業務線管理,需要記錄業務的詳情

專案管理,指定此專案用屬於哪條業務線,以及專案詳情

應用管理,指定此應用的開發人員,屬於哪個專案,和程式碼地址,部署目錄,部署叢集,依賴的應用,軟體等資訊

主機管理,包括雲主機,物理機,主機屬於哪個叢集,執行著哪些軟體,主機管理員,連線哪些網路裝置,雲主機的資源池,儲存等相關資訊

主機變更管理,主機的一些資訊變更,例如管理員,所屬叢集等資訊更改,連線的網路變更等

網路裝置管理,主要記錄網路裝置的詳細資訊,及網路裝置連線的上級裝置

IP管理,IP屬於哪個主機,哪個網段, 是否被佔用等

二、 四種實現方式

2.1 Agent方式

  • 可以將伺服器上的Agent程式做定時任務,每隔一段時間就將資料資訊交給指定的API錄入資料庫
  • 本質上就是在各個伺服器上執行subprocess.getoutput()命令,然後將每臺機器上執行的結果返回給指定的API,主機API收到這些資料之後,將其放入到資料庫中,最終通過web介面展現給管理員或使用者

優缺點分析:

  優點: 速度快

  缺點: 需要為每一臺伺服器都部署一個Agent程式,機器過多時耗費的人力成本大

2.2 ssh方式

  • 基於python的 paramiko模組實現,中控機通過登入到每臺伺服器上,執行命令收集各個伺服器上的資訊

 

優缺點分析:

  優點: 不需要為每一臺伺服器都部署一個Agent程式

  缺點: 需要登入,執行速度慢

import paramiko

#建立ssh物件
ssh = paramiko.SSHClient()

# 連線伺服器
ssh.connect(hostname='localhost', port=22, username='root', password='123')

# 執行命令
stdin, stdout, stderr= ssh.exec_command('ifconfig')

# 拿到命令的執行結果
res = stdout.read()

# 關閉連線
ssh.close()
機器較少時可以使用此方法

2.3 saltstack方式

  • 本質上和前一種方案大致是差不多的流程,由中控機發送命令給伺服器執行。伺服器將結果放入另一個佇列中,中控機獲取收集到的伺服器資訊傳送到API進而錄入資料庫。

 

優缺點分析:

  優點: 速度快,開發成本低

  缺點: 需要依賴於第三方工具

  • saltstack安裝與配置
1. 安裝
    master端
        # 安裝salt-master
            yum install salt-master
        # 修改配置檔案:/etc/salt/master
            interface: 0.0.0.0    # 表示Master的IP
        # 啟動
            service salt-master start

    slave端:
        # 安裝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
2. 授權
    """
    salt-key -L                    # 檢視已授權和未授權的slave
    salt-key -a  salve_id      # 接受指定id的salve
    salt-key -r  salve_id      # 拒絕指定id的salve
    salt-key -d  salve_id      # 刪除指定id的salve
    """

3. 執行
    # 在master伺服器上對salve進行遠端操作
    salt 'c2.salt.com' cmd.run  'ifconfig'
    
    
    # 基於API的方式
    import salt.client
    local = salt.client.LocalClient()
    result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])

2.4 Puppet方式(瞭解)

  • 通過RPC訊息佇列將執行的結果返回給使用者!年代久遠,作為了解,不做敘述