蔡國華 黃鵬 秦國鋒
摘 要:中國搜索應用運維自動化平臺,是根據技術業務實際需求設計和研發的,實現了對關系型數據庫、nosql數據庫、存儲和緩存系統等自動化部署和管理,有效地提升了應用運維的效率,降低了技術系統因故障隱患而產生的風險。
關鍵詞:應用運維;自動化;SaltStack
一、平臺建設背景
傳統運維管理對服務器的操作幾乎都是手動方式:手動安裝操作系統、手動部署應用、手動更新等。中國搜索隨著業務快速發展,服務器數量日趨龐大,技術架構也越來越復雜,涉及到關系型數據庫、nosql數據庫、存儲和緩存系統等使用和管理。在日常的應用運維工作中,也碰到了越來越多的問題,主要表現在:
·服務器數量龐大,通過手動方式部署應用和更新,運維效率較低。
·應用系統和數據庫版本不統一,維護起來比較困難。
·線上業務種類復雜,各個應用系統采用不同的配置,無法進行統一配置管理
·以傳統方式登陸服務器查看應用日志,效率比較低,無法對日志做出有效的處理和分析。
為了提高運維效率,對涉及到的應用系統和數據庫進行統一管理,將運維人員從重復性的工作中解放出來,有必要開發一套應用運維自動化平臺,實現對關系型數據庫、nosql數據庫、存儲和緩存系統等自動化部署和管理。
二、應用運維自動化平臺技術介紹
中國搜索應用運維自動化平臺是基于開源軟件SaltStack,使用python開發,是集應用系統安裝、配置、管理、監控于一體的自動化運維平臺。主要使用的技術如下:
(一)開源軟件Saltstack
SaltStack是一個服務器基礎架構集中化管理平臺,具備配置管理、遠程執行、監控等功能,基于Python語言實現,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊構建。通過部署SaltStack,可以在大規模服務器集群上做到批量執行命令,根據不同業務進行配置集中化管理、分發文件、采集服務器數據、操作系統基礎及軟件包管理等。
SaltStack具有以下特性,實現系統批量管理:
·部署簡單、管理方便。
·支持大部分的操作系統,如Unix/Linux/Windows環境;架構上使用C/S管理模式,易于擴展。
·配置簡單、功能覆蓋廣。
·主控端(Master)與被控端(Minion)基于證書認證,確保安全可靠的通信。
·支持API及自定義Python模塊,輕松實現功能擴展。
SaltStack的異步執行模式可以很好地應對上千臺設備(甚至更多)的任務執行,特別適合耗時場景的應用。
(二)前端界面采用Vue開發
Vue是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合。另一方面,當與現代化的工具鏈以及各種支持類庫結合使用時,Vue也完全能夠為復雜的單頁應用提供驅動。
(三)后端程序采用Python+flask
Flask是一個基于Python開發并且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,對于Werkzeug本質是Socket服務端,其用于接收http請求并對請求進行預處理,然后觸發Flask框架,開發人員基于Flask框架提供的功能對請求進行相應的處理,并返回給用戶,如果要返回給用戶復雜的內容時,需要借助jinja2模板來實現對模板的處理。
三、應用運維自動化平臺架構
(一)部署方案
中國搜索應用運維自動化平臺,以SaltStack為底層架構,前端采用Vue技術,后端采用Python+flask,前后端分離,功能上實現集安裝,配置,集中管理為一體。部署過程如下:
·服務器端Master 角色的安裝,配置好yum 源。
·客戶端Minion角色的安裝,配置好yum 源。
·客戶端Minion 配置
SaltStack-Minion 是 SaltStack 安裝在客戶端的代理,負責接收服務器端發布的指令并執行,同時負責客戶端的狀態監控。客戶端要想被 master 管理,需要修改其配置文件,將服務器指向到 Master 的地址。其配置文件位于/etc/salt/目錄下,名為 minion。
·服務器端Master 配置
SaltStack-Master 是 SaltStack 組件的核心服務,負責發布指令及配置文件的分發與管理,及客戶端的管理功能。Master 要想正常提供服務,需要接受客戶端的證書認證請求。SaltStack 是通過 SSL 證書認證的方式進行通信的。輸入 salt-key? l 來查詢客戶端證書狀態,并輸入 salt-key? A 接受客戶端認證。
·搭建Flask+uwsgi+Nginx部署
在WEB服務器上搭建Flask+uwsgi+Nginx環境,并將后端代碼上傳到指定位置并啟動相應的服務。
(二)整體架構
·SaltStack Minion Master架構
SaltStack采用 C/S 的架構,從部署結構上看,SaltStack的在部署上可以分為Master和Minion兩個部分,其中Master相當于統領所有機器的總管,而Minion則是部署在被管理機器上面的agent進程,Master 可以發送任何指令讓 Minion 執行,salt 有很多可執行模塊,比如說CMD模塊,在安裝Minion的時候已經自帶了,它們通常位于python 庫中。
SaltStack客戶端(Minion)在啟動時,會自動生成一套密鑰,包含私鑰和公鑰。之后將公鑰發送給SaltStack服務器端(Master),服務器端驗證并接受公鑰,以此來建立可靠且加密的通信連接。同時通過消息隊列ZeroMQ在客戶端與服務端之間建立消息發布連接。
·Python+Flask架構
利用Python的Salt模塊,自定義開發相應的應用模塊,并調用SaltStack Master 遠程執行和下發相應的命令在SaltStack Minion上面執行。
四、應用運維自動化平臺功能
中國搜索應用運維自動化平臺主要提供了以下功能:
·應用安裝:Mysql高可用集群、Redis集群、MongoDB集群、ES集群、FastDFS集群自動化安裝。
·配置管理:日常運維涉及的配置文件管理,包括配置文件比對、配置文件批量更新等。
·日常運維:網站靜態文件上線,回滾等日常操作。
·集中監控: 自動安裝配置各個應用系統的監控腳本,使用Zabbix實現集中監控。
·集中備份: 集中備份關鍵數據,例如Mysql,Mongodb等數據。
·集中日志管理: 使用ELK管理操作日志,方便查詢、統計。
(一)Mysql主從高可用架構的自動化部署
Mysql是一個關系型數據庫管理系統,其體積小、速度快,是目前最流行的關系型數據庫管理系統之一。
應用運維自動化平臺實現了Mysql的自動化安裝和配置。同時實現了對Keepalived和LVS自動化配置,實現了Mysql讀寫分離,主從自動化切換的高可用架構。實現步驟如下:
·使用SaltStack把Mysql+LVS+Keepalived的高可用架構模塊化。
·根據Web調用情況,程序會將Mysql安裝模塊下發到需要執行Mysql安裝的機器。
·然后根據用戶輸入修改Keepalived配置和生成虛擬的讀寫IP。
·設置Mysql備份策略,實現自動化定時備份。
·查看每個管理的Mysql慢查詢的統計情況。
(二)Redis集群自動安裝配置
Redis集群是Redis官方提供的分布式解決方案,在3.0版本后推出的,有效地解決了Redis分布式的需求,當一個Redis節點掛了可以快速的切換到另一個節點。當遇到單機內存、并發等瓶頸時,可以采用分布式方案要解決問題。
應用運維自動化平臺可以自動化安裝配置Redis,一鍵構建Redis集群。應用自動化平臺可以控制Redis實例啟停。應用自動化平臺實現了Redis連接集中管理。實現步驟如下:
·使用SaltStack把Redis實例安裝模塊化。
·根據Web調用情況,程序會將Redis安裝模塊下發到需要執行Redis安裝的機器。
·根據Redis實例的安裝情況,一鍵構建Redis集群。
·可以查看Redis各個實例的連接數情況。
(三)MongoDB分片集群自動安裝配置
MongoDB分片是一種在多臺機器上分配數據的方法。MongoDB使用分片來支持具有非常大的數據集和高吞吐量操作。
應用運維自動化平臺實現了MongoDB分片集群的自動化安裝。實現了MongoDB實例的數據節點、集中配置、路由的自動化配置。實現了MongoDB實例的集中啟停,集中備份等功能。實現步驟如下:
·開發SaltStack MongoDB 安裝模塊、配置模塊、啟停模塊。
·通過前端Vue的請求下發MongoDB模塊到指定的機器。
·通過Python 調用Salt MongoDB安裝模塊,遠程安裝MongoDB。
·通過Python MongoDB配置模塊,遠程配置MongoDB。
·通過MongoDB啟停模塊,可以管理整個MongoDB機器。
·通過遠程管理MongoDB主機實現MongoDB定時備份。
(四)ES集群自動安裝配置
ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發的,作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。
應用運維自動化平臺實現了ElasticSearch集群自動化安裝,并根據不同的應用要求調整ElasticSearch集群中Node節點的配置,以便實現Node節點不同的角色,并管理整個ElasticSearch集群中Node節點的啟停。
(五)FastDFS集群自動安裝配置
FastDFS是一款開源的高性能分布式文件系統。主要功能包括文件存儲,文件同步和文件訪問,以及高容量和負載平衡,主要解決了海量數據存儲問題,特別適合以中小文件為載體的在線服務。
應用運維自動化平臺實現了FastDFS存儲集群的安裝,并可以定制FastDFS跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Clinet)的配置,并管理上述不同FastDFS角色啟停。
五、總結與展望
中國搜索應用運維自動化平臺,是根據公司技術業務實際需求設計和研發的,實現了對關系型數據庫、nosql數據庫、存儲和緩存系統等自動化部署和管理,有效地提升了應用運維的效率,降低了技術系統因故障隱患而產生的風險。該平臺可靈活擴展至更多運維場景,具備向數據化、智能化演進的可能性。目前我們正在對平臺向容器和微服務方向進行研發與集成,使自動化覆蓋面能夠更加廣泛。后續我們還將根據業務實際需求,將機器學習和大數據技術應用于自動化運維中,實現智能化運維。
參考文獻:
[1]SaltStack官方說明:http://docs.saltstack.cn/
[2]Vue官方教程:https://cn.vuejs.org/v2/guide/
[3]Flask教程:http://docs.jinkan.org/docs/flask/