簡(jiǎn)單介紹自動(dòng)化運(yùn)維工具clip
Clip是一款自動(dòng)化運(yùn)維工具,適用于海量服務(wù)器的管理場(chǎng)景,可以降低系統(tǒng)誤操作風(fēng)險(xiǎn),提高工作效率等。
Clip將傳統(tǒng)的IP管理緯度替換為String管理緯度,管理方式的改變使海量運(yùn)維時(shí)更加的便捷、可靠與高效。Clip是C/S架構(gòu),它將IP關(guān)系保存在Server端,Client端可以下載SDK,通過SDK遍歷Server端的IP與模塊關(guān)系等,并在本地對(duì)獲取的IP模塊關(guān)系進(jìn)行重新的組織與編排,這就是Clip。在此基礎(chǔ)上Clip還提供了遠(yuǎn)程命令、文件拷貝、IP組織樹遍歷、歷史命令查看、IP對(duì)應(yīng)String關(guān)系正反解析與導(dǎo)入等功能。為海量服務(wù)器運(yùn)維保駕護(hù)航,奠定基礎(chǔ)。
下面來詳細(xì)介紹以下clip這款自動(dòng)換運(yùn)維工具。
首先,傳統(tǒng)服務(wù)器管理方式與String管理方式的相比,String管理方式的3點(diǎn)優(yōu)勢(shì):
1) 傳統(tǒng)為IP管理方式,IP由4組無意義的數(shù)字組成,比較難記憶。與傳統(tǒng)方式相比String可以見名識(shí)意,方便記憶;
2) 管理海量服務(wù)時(shí),IP相似經(jīng)常會(huì)導(dǎo)致運(yùn)營(yíng)故障,譬如A模塊(10.131.24.37 )和B模塊(10.117.24.37) ,后兩位數(shù)字一致,慣性的認(rèn)為兩個(gè)B模塊就是A模塊,發(fā)送配置導(dǎo)致線上故障。通過string管理方式可以很方便的規(guī)避此問題;
3) String 可以解析1個(gè)IP,也可以解析一組IP ,根據(jù)IP也可以反解析String對(duì)應(yīng)關(guān)系,這讓我們管理一組服務(wù)更加的方便。
我們?cè)賮砜匆幌耂tring的組成。String由(idc-product-modules-group) 4段組成,了解cmdb的同學(xué)會(huì)發(fā)現(xiàn)它與cmdb的結(jié)構(gòu)很像,4級(jí)模塊定位一個(gè)服務(wù),但是隨著業(yè)務(wù)的發(fā)展,筆者覺得4級(jí)服務(wù)已經(jīng)無法定位到一個(gè)服務(wù),譬如,在一臺(tái)服務(wù)器上混合部署不同的業(yè)務(wù)模塊,這里4級(jí)只能定位到服務(wù)的IP級(jí)別,而無法精確定位到真正的服務(wù),所以Clip在此基礎(chǔ)上增加了一級(jí)(idc-product-modules-group-port),port端口,通過5段定位一個(gè)服務(wù),這也是Clip優(yōu)勢(shì),靈活變換來定位一組服務(wù),滿足業(yè)務(wù)需求。再來舉一個(gè)實(shí)際的例子,上海機(jī)房,A模塊使用80端口提供服務(wù),目前有100多個(gè)機(jī)器 ,B模塊使用8080端口提供服務(wù),目前有100多個(gè)機(jī)器,由于業(yè)務(wù)流量下降,為了節(jié)約資源目前想將兩個(gè)模塊200臺(tái)機(jī)器資源合并,但功能不合并 。我們可將兩個(gè)服務(wù)表示到不通的String中,如A模塊(sh-weixin-friend-a-80), B模塊(sh-weixin-friend-b-8080),通過String就很容易的將兩個(gè)服務(wù)分別開,并部署在相同的服務(wù)器上提供服務(wù)了。
剛介紹到Clip 為C/S架構(gòu) ,String對(duì)應(yīng)的IP關(guān)系保存在server服務(wù)器中,Client 通過Clip的SDK獲取IP ,其優(yōu)勢(shì)3點(diǎn):
1) IP與String建議一次關(guān)系后,所有的的服務(wù)器上通過SDK都可以調(diào)用到。
2)SDK在解析IP的基礎(chǔ)上提供了其他豐富的功能,如掃描服務(wù)器,遠(yuǎn)程命令,遠(yuǎn)程拷貝等。
3)Clip 提供簡(jiǎn)單清晰的API與SDK代碼結(jié)構(gòu)與文檔,當(dāng)Clip不能滿足我們需求時(shí),可以通過文檔很容易的擴(kuò)展Clip 滿足自己的需求。
接著我們來看Clip SDK,目前SDK共有8個(gè)子命令:
各SDK子命令功能如下:
◆scan:用于對(duì)String對(duì)應(yīng)的IP進(jìn)行端口存活狀態(tài)掃描;
◆cstring:用于對(duì)String對(duì)應(yīng)IP解析,與IP對(duì)應(yīng)String關(guān)系的解析;
◆ssh:用于對(duì)String對(duì)應(yīng)IP,遠(yuǎn)程執(zhí)行系統(tǒng)命令;
◆scp:用于對(duì)String對(duì)應(yīng)IP,遠(yuǎn)程拷貝文件;
◆tree:遍歷String下的子節(jié)點(diǎn);
◆history:顯示歷史執(zhí)行過的命令;
◆import:導(dǎo)入IP對(duì)應(yīng)String關(guān)系;
◆lt:從本地獲取IP關(guān)系進(jìn)行管理;
◆help:顯示Clip當(dāng)天有多少子命令。
***,我們?cè)賮砜匆幌聭?yīng)用案例 ,來比較一下傳統(tǒng)方式vs clip管理方式差異:
傳統(tǒng)方式:在 A 模塊的100臺(tái)服務(wù)器上,執(zhí)行uptime命令,具體的操作步驟如下:
1) 找到要同步的A模塊ip列表;
2) 編寫腳本與ip列表中的服務(wù)器建立連接;
3) 連接服務(wù)器時(shí)輸入賬號(hào)密碼;
4) 賬號(hào)密碼認(rèn)證成功后拷貝文件;
5) 在每個(gè)IP重復(fù)以上步驟。
Clip 方式:
1)建立A模塊ip列表與string對(duì)應(yīng)關(guān)系,譬如為tj-qzone-qzoneini-access6;
2)clip ssh -p 密碼 root@tj-qzone-qzoneini-access6 “執(zhí)行命令”,以下為結(jié)構(gòu)。
#p#
Clip Server安裝
1) 安裝Apache\PHP和MySQL
# yum install httpd php msyql mysql-server
2) 安裝Clip WEB接口程序。(注: Clip WEB程序由Doitphp框架開發(fā))
2.1) mkdir -p /data/webroot/ (創(chuàng)建http虛擬主機(jī)發(fā)布目錄)
2.2) wget http://blog.puppeter.com/download/clip/clip_web.tar.gz
2.3) tar -xvzf clip_web.tar.gz -C (Apache程序發(fā)布目錄/data/webroot/)
2.4) 配置httpd.conf ,追加虛擬主機(jī)配置信息。
NameVirtualHost *:80
ServerAdmin wds@tencent.com
DocumentRoot /data/webroot/clip_server/
ServerName clip.puppeter.com
ErrorLog logs/clip.puppeter.com-error_log
CustomLog logs/clip.puppeter.com-access_log common
2.5) 啟動(dòng)httpd。
3)service mysqld start 啟動(dòng)Mysql
3.1) wget http://blog.puppeter.com/download/clip/clip_db.tar.gz 下載表結(jié)構(gòu)
3.2 ) mysql -u root -p 進(jìn)入mysql,導(dǎo)入表結(jié)構(gòu)
mysql-> create databases clip 創(chuàng)建clip庫
mysql-> mysql -u root -p clip < clip.sql 導(dǎo)入數(shù)據(jù)表。
3.3 ) SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘newpass’); 設(shè)置mysql密碼
3.4 ) FLUSH PRIVILEGES; 刷新mysql配置
4 ) 設(shè)置Clip WEB連接mysql
編輯 /data/webroot/clip_server/application/config/clip.ini.php
Clip SDK安裝
Cllip SDK 由Python開發(fā),以下為Clip依賴環(huán)境安裝過程:
1)下載安裝Python (注:目前支持Python 2.6.* 和 2.7.*版本) && expect
# yum install python expect
# python源碼安裝,推薦2.6.6(下載頁面:https://www.python.org/download/releases/2.6.6/)
2)下載Clip SDK
# wget http://blog.puppeter.com/download/clip/clip_latest.tar.gz
3)安裝Cllip SDK
# tar -xvzf clip_p1.0.tar.gz -C /usr/local/servcers (注:指定安裝目錄)
4)設(shè)置Clip。 編輯 clip/conf/clip.ini 文件,變更server_ip選項(xiàng)為Clip_webIP
5)導(dǎo)入環(huán)境變量
export PATH=$PATH:/usr/local/services/clip/ (安裝路徑)
或者 echo ‘export PATH=$PATH:/usr/local/services/clip/ ‘ >> /etc/profile && source /etc/profile
6)執(zhí)行Cllip命令 (見截圖)
#p#
Clip SDK使用
Clip SDK 功能用于獲取Server上的IP關(guān)系,并在Client上重新組織編排IP關(guān)系。(注:目前clip也支持將IP存放到本地文件中管理)。目前Clip 提供8個(gè)子命令,以下Clip子命令的參數(shù)解釋與演示(更多案例參考:Clip SDK 案例):
clip scan (用于對(duì)String對(duì)應(yīng)的IP進(jìn)行端口存活狀態(tài)掃描)
◆–query_string(-q)# 根據(jù)String掃描IP的端口
◆–ip (-i) # 掃描指定IP的端口
◆–query_string (-q) *-test-*-*,*-docker-*-* # 多String掃描用逗號(hào)分隔
◆–append (-a) # 在原有String基礎(chǔ)上,追加IP,追加多個(gè)(192.168.0.1,192.168.0.2)IP用逗號(hào)分隔
◆–remove_ip (-r) # 刪除String原有IP列表的IP
◆–limit(-l)# 掃描String中指定范圍的IP范圍
◆–port (-P) # 指定自定義掃描端口(注:默認(rèn)為80端口)
◆–log_disable(-o)# 默認(rèn)日志會(huì)上報(bào)服務(wù)器,并通過history命令查看歷史,通過此命令可以關(guān)閉日志上報(bào),建議頻繁使用clip關(guān)閉clip
clip scan 使用演示:
掃描*-puppet-*-* 對(duì)應(yīng)開放的端口
clip cstring(正解與反解String對(duì)應(yīng)IP關(guān)系)
◆–query_string(-q)# 解析String對(duì)應(yīng)的IP列表
◆–ip (-i) # 解析IP對(duì)應(yīng)的String
◆–query_string (-q) *-test-*-*,*-docker-*-* # 解析多個(gè)String對(duì)應(yīng)IP列表,多String用逗號(hào)分隔
◆–limit(-l)# 解析String中指定范圍的IP范圍
◆–append (-a) #在原有String基礎(chǔ)上,追加IP,追加多個(gè)(192.168.0.1,192.168.0.2)IP用逗號(hào)分隔
◆–remove_ip (-r) # 刪除String原有IP列表的IP
◆–join (-j) # 指定輸出的格式,支持(“|” “,” “\n”,space) 4種格式輸出
◆–log_disable(-o)# 默認(rèn)日志會(huì)上報(bào)服務(wù)器,并通過history命令查看歷史,通過此命令可以關(guān)閉日志上報(bào),建議頻繁使用clip關(guān)閉clip
◆–count (-c) # 統(tǒng)計(jì)輸出IP個(gè)數(shù)
◆–dryrun (-d) # 輸出調(diào)用接口用例
clip cstring演示:
解析*-qq-*-* 對(duì)應(yīng)的IP關(guān)系。
解析192.168.0.7 對(duì)應(yīng)的String。
clip ssh (遠(yuǎn)程命令執(zhí)行工具)
◆–password (-p) # 密碼
◆–append (-a) # 在原有String基礎(chǔ)上,追加IP,追加多個(gè)(192.168.0.1,192.168.0.2)IP用逗號(hào)分隔
◆–remove_ip (-r) # 刪除String原有IP列表的IP
◆–limit(-l)# 解析String中指定范圍的IP范圍
◆–port (-P) #指定自定義端口(注:默認(rèn)為22端口)
◆–dryrun (-d) # 輸出調(diào)用接口用例
◆–log_disable(-o)# 默認(rèn)日志會(huì)上報(bào)服務(wù)器,并通過history命令查看歷史,通過此命令可以關(guān)閉日志上報(bào),建議頻繁使用clip關(guān)閉clip
clip ssh演示:
查看string(sh-docker-base_v1-*) 對(duì)應(yīng)機(jī)器上負(fù)載。
查看string(sh-docker-base_v1-*)的***臺(tái)服務(wù)器對(duì)應(yīng)負(fù)載。
clip scp (遠(yuǎn)程命令執(zhí)行工具)
◆–password (-p) # 密碼
◆–append (-a) # 在原有String基礎(chǔ)上,追加IP,追加多個(gè)(192.168.0.1,192.168.0.2)IP用逗號(hào)分隔
◆–remove_ip (-r) # 刪除cstring原有IP列表的IP
◆–limit(-l)# 解析String中指定范圍的IP范圍
◆–port (-P) # 指定自定義端口(注:默認(rèn)為22端口)
◆–dryrun (-d) # 輸出調(diào)用接口用例
◆–log_disable(-o)# 默認(rèn)日志會(huì)上報(bào)服務(wù)器,并通過history命令查看歷史,通過此命令可以關(guān)閉日志上報(bào),建議頻繁使用clip關(guān)閉clip
clip scp演示:
將ip文件推送到string(sh-docker-base_v1-*)對(duì)應(yīng)機(jī)器的/tmp目錄上。
tree(String關(guān)系遍歷工具)
◆–query_string(-p) # 密碼
◆–json (-j) # 指定輸出的格式
◆–dryrun (-d) # 輸出調(diào)用接口用例
◆–log_disable(-o)# 默認(rèn)日志會(huì)上報(bào)服務(wù)器,并通過history命令查看歷史,通過此命令可以關(guān)閉日志上報(bào),建議頻繁使用clip關(guān)閉clip
clip tree 演示:
遍歷*-*-*-* 下的節(jié)點(diǎn)
import(IP關(guān)系導(dǎo)入工具)
◆–insert (-i) # 將文件內(nèi)的clip對(duì)應(yīng)關(guān)系導(dǎo)入數(shù)據(jù)庫
◆–bulid (-b) # 創(chuàng)建clip導(dǎo)入數(shù)據(jù)庫,關(guān)系模板文件
◆–list_struct (-l) # 顯示clip數(shù)據(jù)庫結(jié)構(gòu)
clip import 演示:
clip import -b 創(chuàng)建導(dǎo)入string與關(guān)系模板
lt(Local tools 本地獲取IP關(guān)系管理工具)
◆–password (-p) # 密碼
◆–append (-a) # 追加IP,多個(gè)IP用逗號(hào)分隔
◆–remove (-r) # # 刪除原有IP列表的IP
◆–port (-P) # 指定自定義端口(注:默認(rèn)為22端口)
clip import 演示:
clip lt 根據(jù)本地文件IP文件,進(jìn)行遠(yuǎn)程ssh command,其中root@“本地IP關(guān)系文件名”