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