一步步实施 DevOps (三)
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
Netkiller Management 手札
Mr.?Neo?Chan,?陳景峯(BG7NYT)
中國廣東省深圳市望海路半島城邦三期
518067
+86?13113668890
<netkiller@msn.com>
Copyright ? 2010-2018 netkiller
版權聲明
轉載請與作者聯(lián)系,轉載時請務必標明文章原始出處和作者信息及本聲明。
|
|
|
|
請首先閱讀:
?
Jenkins 不是 DevOps
持續(xù)集成是一種軟件開發(fā)實踐,即團隊開發(fā)成員經常集成他們的工作,通常每個成員每天至少集成一次,也就意味著每天可能會發(fā)生多次集成。每次集成都通過自動化的構建(包括編譯,發(fā)布,自動化測試)來驗證,從而盡快地發(fā)現(xiàn)集成錯誤。
持續(xù)集成可以解決什么問題:
持續(xù)集成不能解決什么問題:
持續(xù)集成智能單向操作,代碼->構建->測試->部署 等等。持續(xù)集成中我們遇到很多問題
例如就是通過 git hook 觸發(fā) Jenkins 實現(xiàn)持續(xù)集成,自動構建項目。問題來了,任何提交都會觸發(fā)一次 pipeline 腳本,當項目頻繁提交時,第一個構建過程還未運行完畢,第二個進程便啟動。導致構建排隊,阻塞,同時 pipeline 可能會爭奪資源(多個進程讀寫同一個文件),產生沖突,輕則稍等片刻,重則測試環(huán)境崩潰。
另外通過CI 持續(xù)集成部署代碼也不靠譜,會出現(xiàn)和上面相同問題,例如第一個進程用 scp 復制 jar 包到遠程主機,還未傳輸完成,第二個進程便做同樣的操作。
還有 第一個進程重啟 tomcat ,tomcat 還未停止退出,第二個請求便發(fā)出。最終導致 tomcat 崩潰。
以上的特性,你敢在生產環(huán)境上使用嗎?一旦發(fā)布失敗,或者需要回撤,持續(xù)集成并沒有很好的解決方案。
我認為,持續(xù)集成尚不完善,測試環(huán)境玩玩可以,生產環(huán)境還是不要了。
問題收集
例如來自運維的需求,?運維團隊需要什么呢?
大部分可以用Issue/Ticket 湊合,我們只撿重點的,環(huán)境配置,自動化部署,監(jiān)控/報警,備份/恢復。
我們就先從監(jiān)控說起把,你很發(fā)現(xiàn)很多 DevOps 的文章中,不會涉及到監(jiān)控,但是這是運維的重中之重。
每個企業(yè)都意識到監(jiān)控工作的重要性,但80%企業(yè)的監(jiān)控工作仍然處在監(jiān)控的初級階段。
什么是初級階段呢?
什么是中級階段呢?
什么是高級階段呢?
監(jiān)控從初級向中繼再到高級,是轉被動到主動,從人工到自動化。
監(jiān)控不應該局限在硬件與服務,還應該延伸到業(yè)務領域。
你在百度上搜索監(jiān)控多半是一些開源或商業(yè)軟件的安裝配置指南。這些文章中會告訴你怎樣監(jiān)控CPU、內存、硬盤空間以及網(wǎng)絡IP地址與端口號碼。
開源軟件無非是 Nagios, Cacti, Mrtg, Zibbix ..... 這些軟件在我的電子出書《Netkiller Monitoring 手札》中都有詳細說明安裝與配置方法。
商業(yè)軟件也有很多如 SolarWinds, Whit's Up,PRTG ......
所有的服務器,網(wǎng)絡設備,監(jiān)控你都做了,那么按照我上面的監(jiān)控分級,你處于監(jiān)控的那個階段?
怎樣監(jiān)控
監(jiān)控都有哪些手段跟方式呢?
衛(wèi)星監(jiān)測
中心衛(wèi)星站為中心站點向外放射,通常是通過IP地址訪問遠程主機,實施監(jiān)控,常用方法是SNMP,SSH,以及各種Agent(代理),方式是請求然后接收返回結果,通過結果判斷主機狀態(tài)。
Monitor Server| -------------------------------| | | [Web] [Mail] [Database]以監(jiān)控服務器為中心,星型散射連接其他監(jiān)控節(jié)點,沒有什么優(yōu)點,缺點是Web跟Mail節(jié)點的通信沒有監(jiān)控
逐級診斷
一級一級的向下探測,尋找故障點,需要在各個節(jié)點埋探針。
Monitor Server| ------------------------------- | | |V V V| | | [Web] ---> [Cache] ---> [Database]\ ^`------------------------|首先監(jiān)控服務器跟星型拓撲一樣監(jiān)控,再讓Web節(jié)點去訪問Cache節(jié)點然后返回監(jiān)控結果,以此類推,讓Cache節(jié)點訪問Database, 讓Web訪問Database節(jié)點。
將所有業(yè)務邏輯都逐一模擬一次,任何一個環(huán)節(jié)出現(xiàn)問題,立即發(fā)出警告。
模擬人工
這里主要監(jiān)控服務是否可用,可以檢查軟件的工作情況,涉及測試環(huán)節(jié)。
通過自動化測試工具輔助監(jiān)控,例如模擬鼠標點擊,鍵盤輸入,可以監(jiān)控圖形界面程序與網(wǎng)頁程序。
Windows 監(jiān)控可以通過 Windows Automation API實現(xiàn),通過程序控制,能夠模擬人工操作軟件,實現(xiàn)操作匹配返回結果實現(xiàn)自動化監(jiān)控
Web頁面監(jiān)控的方案就太多了,比較經典的是Webdriver衍生出的各種工具Selenium - Web Browser Automation最為出名。我通過這個工具模擬用戶操作,例如用戶注冊,登陸,發(fā)帖,下單等等,然后匹配返回結果實現(xiàn)自動化監(jiān)控與報警
數(shù)據(jù)分析
通過數(shù)據(jù)分析,將故障消滅在故障發(fā)生前。舉一個例子,開發(fā)人員忘記設置redis 時間,雖然程序一直完好工作,但redis內存不斷增長,總一天會出現(xiàn)故障。
我們通過采集redis狀態(tài)信息,分析一段時間內數(shù)據(jù)變化發(fā)現(xiàn)了這個問題。
監(jiān)控與開發(fā)
談到監(jiān)控很多人認為這是運維的事情,實則不然,不懂運維的測試不是好開發(fā)。
開發(fā)過程中需要考慮到監(jiān)控,例如Nginx的status模塊, MySQL的show status命令, Redis的info命令,都是為監(jiān)控預留的。那么你開發(fā)的程序是否考慮到了監(jiān)控這塊呢?
你可以通過日志形式或者管道,再或者Socket將程序的運行狀態(tài)提供給監(jiān)控采集程序。
總結
好的監(jiān)控的能讓你對系統(tǒng)了如指掌,做到心里有數(shù)。有數(shù)據(jù)才好說話。
?
?
?
轉載于:https://my.oschina.net/neochen/blog/2994462
總結
以上是生活随笔為你收集整理的一步步实施 DevOps (三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI - 常见算法简介(Common A
- 下一篇: [不屈的复习] - 编辑工具IDE选取与