CMDB與自動(dòng)化運(yùn)維
一、IT運(yùn)維的分類
IT運(yùn)維俭令,指的是對(duì)已經(jīng)搭建好的網(wǎng)絡(luò),軟件部宿,硬件進(jìn)行維護(hù)抄腔。運(yùn)維領(lǐng)域也是細(xì)分的,有硬件運(yùn)維和軟件運(yùn)維理张。
- 硬件運(yùn)維主要包括對(duì)基礎(chǔ)設(shè)施的運(yùn)維赫蛇,比如機(jī)房的設(shè)備,主機(jī)的硬盤雾叭,內(nèi)存這些物理設(shè)備的維護(hù)悟耘。
- 軟件運(yùn)維主要包括系統(tǒng)運(yùn)維和應(yīng)用運(yùn)維,系統(tǒng)運(yùn)維主要包括對(duì)OS织狐,數(shù)據(jù)庫暂幼,中間件的監(jiān)控和維護(hù),這些系統(tǒng)介于設(shè)備和應(yīng)用之間移迫,應(yīng)用運(yùn)維主要是對(duì)線上業(yè)務(wù)系統(tǒng)的運(yùn)維
這里討論的主要是軟件運(yùn)維的自動(dòng)化旺嬉,包括系統(tǒng)運(yùn)維和應(yīng)用運(yùn)維的自動(dòng)化
二、傳統(tǒng)運(yùn)維的痛點(diǎn)
- 日常工作繁瑣
日常運(yùn)維工作是比較繁瑣的厨埋,研發(fā)同學(xué)會(huì)經(jīng)常需要到服務(wù)器上查日志邪媳,重啟應(yīng)用,或者是說今天上線某個(gè)產(chǎn)品,需要部署下環(huán)境悲酷。這些瑣事是傳統(tǒng)運(yùn)維的大部分工作
- 應(yīng)用運(yùn)行環(huán)境不統(tǒng)一
在部署某應(yīng)用后套菜,應(yīng)用不能訪問,就會(huì)聽到開發(fā)人員說设易,在我的環(huán)境運(yùn)行很好的,怎么部署到測(cè)試環(huán)境后蛹头,就不能用了顿肺,因?yàn)楦黝惌h(huán)境的類庫不統(tǒng)一
還有一種極端情況,運(yùn)維人員習(xí)慣不同渣蜗,可能憑自己的習(xí)慣來安裝部署軟件屠尊,每種服務(wù)器上運(yùn)行軟件的目錄不統(tǒng)一
- 運(yùn)維及部署效率低下
想想運(yùn)維人員需要登陸到服務(wù)器上執(zhí)行命令,部署程序耕拷,不僅效率很低讼昆,并且非常容易出現(xiàn)人為的錯(cuò)誤,一旦手工出錯(cuò)骚烧,追溯問題將會(huì)非常不容易
- 無用報(bào)警信息過多
經(jīng)常會(huì)收到很多報(bào)警信息浸赫,多數(shù)是無用的報(bào)警信息,造成運(yùn)維人員經(jīng)常屏蔽報(bào)警信
另外如果應(yīng)用的訪問速度出了問題赃绊,總是需要從系統(tǒng)既峡、網(wǎng)絡(luò)、應(yīng)用碧查、數(shù)據(jù)庫等一步步的查找原因
- 資產(chǎn)管理和應(yīng)用管理混亂
資產(chǎn)管理运敢,服務(wù)管理經(jīng)常記錄在excel、文本文件或者wiki中忠售,不便于管理传惠,老員工因?yàn)楸容^熟,不注重這些文檔的維護(hù)稻扬,只有靠每次有新員工入職時(shí)卦方,資產(chǎn)才能夠更正一次
三、自動(dòng)化運(yùn)維平臺(tái)的特性
針對(duì)傳統(tǒng)運(yùn)維的痛點(diǎn)腐螟,我們可以知道自動(dòng)化運(yùn)維需要支持哪些功能
運(yùn)維自動(dòng)化最重要的就是標(biāo)準(zhǔn)化一切
- OS的選擇統(tǒng)一化愿汰,同一個(gè)項(xiàng)目使用同樣的OS系統(tǒng)部署其所需要的各類軟件
- 軟件安裝標(biāo)準(zhǔn)化,例如JAVA虛擬機(jī)乐纸,php衬廷,nginx,mysql等各類應(yīng)用需要的軟件版本汽绢,安裝目錄吗跋,數(shù)據(jù)存放目錄,日志存放目錄等
- 應(yīng)用包目錄統(tǒng)一標(biāo)準(zhǔn)化,及應(yīng)用命名標(biāo)準(zhǔn)化
- 啟動(dòng)腳本統(tǒng)一目錄和名字跌宛,需要變化的部分通過參數(shù)傳遞
- 配置文件標(biāo)準(zhǔn)化酗宋,需要變化的部分通過參數(shù)傳遞
- 日志輸出,日志目錄疆拘,日志名字標(biāo)準(zhǔn)化
- 應(yīng)用生成的數(shù)據(jù)要實(shí)現(xiàn)統(tǒng)一的目錄存放
- 主機(jī)/虛擬機(jī)命名標(biāo)準(zhǔn)化蜕猫,虛擬機(jī)管理使用標(biāo)準(zhǔn)化模板
- 使用docker比較容易實(shí)現(xiàn)軟件運(yùn)行環(huán)境的標(biāo)準(zhǔn)化
四、資產(chǎn)管理系統(tǒng)(CMDB)
CMDB是所有運(yùn)維工具的數(shù)據(jù)基礎(chǔ)
五哎迄、CMDB包含的功能
- 用戶管理回右,記錄測(cè)試,開發(fā)漱挚,運(yùn)維人員的用戶表
- 業(yè)務(wù)線管理翔烁,需要記錄業(yè)務(wù)的詳情
- 項(xiàng)目管理,指定此項(xiàng)目用屬于哪條業(yè)務(wù)線旨涝,以及項(xiàng)目詳情
- 應(yīng)用管理蹬屹,指定此應(yīng)用的開發(fā)人員,屬于哪個(gè)項(xiàng)目白华,和代碼地址慨默,部署目錄,部署集群衬鱼,依賴的應(yīng)用业筏,軟件等信息
- 主機(jī)管理,包括云主機(jī)鸟赫,物理機(jī)蒜胖,主機(jī)屬于哪個(gè)集群,運(yùn)行著哪些軟件抛蚤,主機(jī)管理員台谢,連接哪些網(wǎng)絡(luò)設(shè)備,云主機(jī)的資源池岁经,存儲(chǔ)等相關(guān)信息
- 主機(jī)變更管理朋沮,主機(jī)的一些信息變更,例如管理員缀壤,所屬集群等信息更改樊拓,連接的網(wǎng)絡(luò)變更等
- 網(wǎng)絡(luò)設(shè)備管理,主要記錄網(wǎng)絡(luò)設(shè)備的詳細(xì)信息塘慕,及網(wǎng)絡(luò)設(shè)備連接的上級(jí)設(shè)備
- IP管理筋夏,IP屬于哪個(gè)主機(jī),哪個(gè)網(wǎng)段, 是否被占用等
六图呢、CMDB實(shí)現(xiàn)的四種方式
(1)Agent實(shí)現(xiàn)方式
Agent方式条篷,可以將服務(wù)器上面的Agent程序作定時(shí)任務(wù)骗随,定時(shí)將資產(chǎn)信息提交到指定API錄入數(shù)據(jù)庫
其本質(zhì)上就是在各個(gè)服務(wù)器上執(zhí)行
subprocess.getoutput()
命令,然后將每臺(tái)機(jī)器上執(zhí)行的結(jié)果赴叹,返回給主機(jī)API鸿染,然后主機(jī)API收到這些數(shù)據(jù)之后,放入到數(shù)據(jù)庫中乞巧,最終通過web界面展現(xiàn)給用戶
優(yōu)點(diǎn):速度快
缺點(diǎn):需要為每臺(tái)服務(wù)器部署一個(gè)Agent程序
應(yīng)用場(chǎng)景:大公司涨椒、服務(wù)器數(shù)量多
(2)ssh實(shí)現(xiàn)方式(基于Paramiko模塊)
中控機(jī)通過Paramiko(py模塊)登錄到各個(gè)服務(wù)器上,然后執(zhí)行命令的方式去獲取各個(gè)服務(wù)器上的信息
優(yōu)點(diǎn):不需要使用Agent腳本
缺點(diǎn):速度慢
應(yīng)用場(chǎng)景:適合服務(wù)器較少的環(huán)境
import paramiko
# 創(chuàng)建SSH對(duì)象
ssh = paramiko.SSHClient()
# 允許連接不在know_hosts文件中的主機(jī)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 連接服務(wù)器
ssh.connect(hostname='c1.salt.com', port=22, username='root', password='123')
# 執(zhí)行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 獲取命令結(jié)果
result = stdout.read()
# 關(guān)閉連接
ssh.close()
(3)salt-stack 方式
此方案本質(zhì)上和第二種方案大致是差不多的流程摊欠,中控機(jī)發(fā)送命令給服務(wù)器執(zhí)行丢烘。服務(wù)器將結(jié)果放入另一個(gè)隊(duì)列中,中控機(jī)獲取將服務(wù)信息發(fā)送到API進(jìn)而錄入數(shù)據(jù)庫些椒。
優(yōu)點(diǎn):快,開發(fā)成本低
缺點(diǎn):依賴于第三方工具
應(yīng)用場(chǎng)景:適合于公司一開始就使用這種方式掸刊,比較推薦
-
安裝以及配置
# master 端
# 1.安裝 salt-master
yum install salt-master
# 2.修改配置文件
vim /etc/salt/master
interface: 172.19.102.103 # 表示master的IP
# 3.啟動(dòng)
systemctl start salt-master
=============================
# slave 端
# 1.安裝 salt-minion
yum install salt-minion
# 2.修改配置文件
vim /etc/salt/minion
master: 172.19.102.103 # 表示master的地址
# 3.啟動(dòng)
systemctl start salt-minion
# 查看是否啟動(dòng)
ps aux |grep salt-master
ps aux |grep salt-minion
-
授權(quán)
salt-key -L # 查看已授權(quán)和未授權(quán)的slave
salt-key -a salve_id # 接受指定id的salve
salt-key -r salve_id # 拒絕指定id的salve
salt-key -d salve_id # 刪除指定id的salve
-
執(zhí)行命令
# 授權(quán)成功后免糕,主機(jī)(master)可以對(duì) “奴隸機(jī)”(slave)進(jìn)行遠(yuǎn)程操作
# * 表示所有奴隸機(jī)
salt '*' cmd.run 'ifconfig'
-
基于API的方式
import salt.client
local = salt.client.LocalClient()
result = local.cmd('c2.salt.com', 'cmd.run', ['ifconfig'])
補(bǔ)充:Puppet(ruby語言開發(fā))(了解)
每隔30分鐘,通過RPC消息隊(duì)列將執(zhí)行的結(jié)果返回給用戶