汽車之家運維團隊傾力打造的配置管理系統AutoCMS

天府雲創發表於2017-07-18

管理 儲存 Hadoop 伺服器 運維 Puppet

作者介紹
王顯寶,汽車之家運維團隊成員,主要負責AutoCMS的開發工作和快取平臺的運維工作,擅長python自動化運維,分散式快取和分散式檔案系統應用管理。

汽車之家運維團隊,是汽車之家技術部裡最為核心的團隊,由op和dev共同組成。我們的目標是為汽車之家集團打造一個高效能,高可擴充套件,低成本,並且穩定可靠的網站基礎設施平臺。

團隊技術部落格地址為 http://autohomeops.github.io/

正文

一、前言
AutoCMS 是汽車之家目前正在使用的統一配置管理工具,本文將詳細介紹該系統的使用方法和架構實現。 

先來回顧下汽車之家軟體部署和配置檔案管理的經歷的幾個階段:

原始階段(依靠手工部署,wiki制定規範)
軟體包的來源沒有強制規範,帶來了很大的安全隱患。
新業務上線或者業務緊急擴容,運維投入大量人力來完成繁重的體力勞動。
部署目錄標準化依賴wiki規範維護,人力部署的時候經常會出現問題
最初階段軟體部署和配置檔案管理完全依賴人力完成。部署新業務,運維根據研發測試環境的軟體版本,去官網下載軟體包,在伺服器上編譯安裝,然後根據研發需求,手工配置檔案,啟動服務。該階段暴露出諸多問題:

半自動化階段(依賴人力打包,yum方式部署)
隨著運維自動化的推行,搭建自己的yum源,自己打包來規範軟體版本來源和部署目錄。需要批量部署的時候,逐臺登入伺服器執行yum install 安裝相關的軟體包即可,該階段已經節省了很大的人力,不過依然需要逐臺登入伺服器去修改配置檔案才能夠滿足上線需求。配置檔案變更前的備份和故障後的恢復依然需要人力維護。

自動化階段
現在正在使用的管理系統AutoCMS,實現頁面化管理軟體部署和配置檔案,實現快速批量管理軟體。

下面將詳細介紹一下我們正在使用的AutoCMS。

二、AutoCMS使用方法介紹
AutoCMS 是基於Puppet實現的軟體部署和配置檔案管理的一套系統,避免手動安裝部署軟體,提供可靠的軟體標準化部署,配置檔案和基礎服務的管理服務。 本系統主要實現以下幾點功能:

批量部署軟體包
頁面管理軟體的配置檔案變更,支援備份和回滾
多環境部署,開發,測試,線上環境相互隔離
灰度推送配置
遠端執行安全的命令
基本的統計功能

使用者操作流程如下:

建立主機組
主機組是需要批量部署同一個軟體或者下發相同配置的主機的集合,建立主機組的同時需要關聯一下配置模組,該配置模組是提前寫好的puppet模組。
新增主機
將需要部署該模組的主機加入該組內(本系統中主機的輸入源是cmdb介面)
選擇環境
根據需求選擇該主機的環境,各個環境的配置資料獨立儲存,彼此不受影響。
配置部署引數
根據配置模組不同,編寫配置檔案,生成不同的配置頁面,業務運維只要在頁面上選擇相應的引數,puppet會根據這些引數生成相應的配置檔案。
推送配置
業務運維再前端頁面配置完成後,返回主機組管理頁面,選擇主機並進行推送配置,便會觸發相關主機的puppet agent 執行,部署相應的軟體和配置。

三、系統架構說明
AutoCMS使用django作為前端框架,後端部署程式主要基於puppet實現,通過puppet的enc和report功能實現完整的部署和配置邏輯,整體架構如下:

簡要分析下:
前端配置頁面
由於各個軟體配置選項不同,所以前端的軟體引數配置頁面要採用配置檔案動態生成。

資料儲存
設計初期,我們在mySQL和MongoDB之間選擇了MongoDB,主要出於一下幾點考慮:
Schema-less,json風格儲存:由於配置資料根據軟體的不同,其資料不能依靠key-value能夠存放的,每個軟體的配置項可能會有自定義的結構,所以採用了json格式來處理,而MongoDB的bson恰好能夠滿足需求,省去了在mysql中頻繁使用外來鍵。此外,json格式資料易於掌握和理解,儲存的資料一目瞭然。

CRUD方便快捷,支援範圍查詢和正則查詢,還支援支援upsert選項(如果不存在則插入)。
與其他NoSQL產品相比,我們對mongodb的持久化和高可用方案更加熟悉。

部署實施層
該部分是通過puppet模組實現,模組中引用的引數通過自定義facter或者使用enc來讀取配置儲存的MongoDB獲得,
一臺主機的多例項部署通過create_resources函式實現,例如一臺主機需配置多個tomcat例項,資料會是如下結構:

多環境分離實現: 本系統中puppet程式碼部分有git作為版本控制,通過git自身的多分支的特性來做puppet程式碼層面的環境分離。根據需求來執行不同分支的puppet程式碼即可。

四、配置案例
下面以tomcat自動部署模組為例,進行詳細介紹:

1. 根據部署需求,設計出配置數引數的儲存結構

2. 填寫前端佈局的配置檔案,自動生成前端配置頁面。

3. 編寫puppet自動部署模組。

4. 編寫enc轉換程式

5.以上準備工作做好之後,系統上線,運維可以建立主機組,關聯tomcat模組,將需要批量部署的主機加入該組內,並進行引數配置 

6. 配置完成後,進行灰度釋出驗證沒問題後,進行全量推送,觀察狀態,配置完成。 

五、小結
隨著雲時代的到來,很多伺服器可以定製映象實現所需的執行環境,不過隨著業務規模的擴大,伺服器的個性化配置會越來越多,映象的維護工作也會逐步增加,使用AutoCMS可以靈活的解決這個問題。把各自的配置需求寫成配置模組,並把伺服器分組,批量推送下去,可以節省運維人員很多體力勞動。讓運維人員將精力投入到更有價值的工作中。

歡迎加入本部落格公開興趣群
軟體開發技術群
興趣範圍包括:Java,C/C++,Python,PHP,Ruby,shell等各種語言開發經驗交流,各種框架使用,外包專案機會,學習、培訓、跳槽等交流
QQ群:26931708

Hadoop原始碼研究群
興趣範圍包括:Hadoop原始碼解讀,改進,優化,分散式系統場景定製,與Hadoop有關的各種開源專案,總之就是玩轉Hadoop
QQ群:288410967 

相關文章