孔德亮:大規(guī)模集群運維經(jīng)驗(一)
原創(chuàng)愛之深,責之切。從近期的一些公司線上故障,在災備能力上引發(fā)不小的爭議,“異地多活”、“集群管理”、“自動化運維”等話題也異常的活躍,基本都在討論目前互聯(lián)網(wǎng)企業(yè)的應急反應以及IT運維處理能力。自己也看了一些個人的觀點和總結,周末抽了點時間,把我們在這方面的一些實踐經(jīng)驗分享出來,供大家討論,希望寫出的東西能展現(xiàn)我的誠意。
本文內容主要是基于360私有云-HULK云平臺的技術積累和挑戰(zhàn),這也是我們將運維這個服務產(chǎn)品化的結果。在過去幾年中我們從百十臺服務器,幾個機房,發(fā)展到數(shù)萬臺服務器,幾十個機房這種大規(guī)模的體系里面,以最基本、最通用的LNMP架構闡述前端WEB服務和后端數(shù)據(jù)庫服務,分享這“一前一后”在異地多活、集群管理等方面的實踐經(jīng)驗。
前端Web服務
在偌大的技術體系里面,前端Web服務隨著硬件條件的升級,給大家?guī)淼捏w驗我們并無法用多少嬌艷的措施來形容??梢赃@么理解,為了更好的用戶體驗,以及高可用的要求,我們的Web服務器都采用多機房、多網(wǎng)絡運營商部署,各WEB集群以項目劃分,基于項目的復雜關聯(lián)關系在HULK平臺中記錄。
1.獨享的Web服務器
通過獨享,其隔離性和安全性相對更好,不過獨享就會帶來資源利用率的問題。解決這個問題得益于良好的虛擬化、容器化支持。Web服務器都是虛擬機,資源按需分配、動態(tài)伸縮SLA較低的業(yè)務,我們可能在超配率50%-100%的虛擬化集群分配2+2,電信2臺、網(wǎng)通2臺,輔以多運營商代理方案。
2.“無狀態(tài)”的Web服務器
主要是指將Web服務器與業(yè)務邏輯解耦,讓Web服務器池作為實現(xiàn)具體功能的集群,通過Hulk存儲業(yè)務邏輯的相關子系統(tǒng)(zookeeper、puppet等)告知Web服務器具體的執(zhí)行方案。這樣大量的無狀態(tài),無差別的Web服務器就可以通過負載均衡設備動態(tài)、快速的進行切換,真正實現(xiàn)了資源的“云端共享”。
3.Web項目的域名解析
按運營商線路、區(qū)域劃分,例如北京聯(lián)通用戶的請求是到某個北京聯(lián)通機房的集群,華東各省的電信用戶的請求到某個上海電信的機房集群,這樣我們可以做到機房及地域上的容災,假設某個機房或者某個地域的故障,我們將用戶請求以就近、***體驗策略進行調整,保證是活著的。
看到這里大家可能會問,那么多機房,每個機房又那么多小的業(yè)務集群,每個業(yè)務集群上不同的域名,怎么管理?為了把這些復雜繁瑣的工作簡單化,我們將各個環(huán)節(jié)串接、管理起來,通過大家常見運維的工具化、平臺化、可視化去讓整個管理方式更加簡單明了。HULK云平臺,我更喜歡稱之為產(chǎn)品化,他是我們的管家,更需要強大、精確。達到可以通過鼠標的滑動完成集群管理、負載均衡上下線、新建域名解析、生成故障預案、按預案切換,等復雜易出錯任務,這些功能不僅運維工程師需要,還要把業(yè)務開發(fā)同事加入進來,自助完成。極大的簡化了相關的配置管理工作。
集群配置管理
在HULK中集群配置管理部分,如上文所述,Web服務器集群是項目獨享的,各個集群的環(huán)境也不一樣,簡單的舉個例子,像PHP環(huán)境就能夠支持PHP5.3、PHP5.4、PHP5.5版本等。
服務器集群為項目提供運行環(huán)境(軟件、配置文件、進程),而這些都可以統(tǒng)稱為“配置”(Configuration)。因此,集群的“配置”管理,關系到項目的快速部署、擴容、升級、回滾等問題。
下面是我們的工具棧,實現(xiàn)一種統(tǒng)一、可控、快速的配置管理。
首先要解決的是軟件的問題,外面的軟件包直接拿過來安裝是不可能的,我們有自己的版本要求、安全要求、編譯參數(shù)要求、安裝路徑要求等。所以我們有自己的軟件倉庫,涵蓋所有核心應用軟件,給軟件倉庫供血的是一套自動化的RPM構建系統(tǒng)。
其次是Hulk平臺與軟件倉庫的對接,Hulk可以通過API查詢軟件倉庫的信息,比如軟件包名字、版本,Hulk對倉庫里的這些軟件包又做了二次管理,例如同一名字但是版本不同的軟件包,還有某幾個軟件包劃分為一個組,整體安裝等等。由于Hulk同時記錄著服務器集群的信息,因此,將這二者整合,就實現(xiàn)了對任意服務器集群,選裝任意的軟件包。
“對任意服務器集群,選裝任意的軟件包”,是如何實現(xiàn)的呢?
我們通過Hulk作為控制中心,把這些“配置”信息發(fā)送給另外一個基于Puppet構建的系統(tǒng)。而我們的Puppet系統(tǒng)是采用Master-Agent架構,Master集群多機房部署,可以水平擴展,自己開發(fā)的眾多Puppet Module部署于Master集群,不同的Module實現(xiàn)不同的配置邏輯,受控服務器(Agent)就近與Master集群通信,獲取配置、完成配置、匯報結果。
除了Hulk主動觸發(fā)的配置任務,Agent上還有定期的配置同步機制。簡單說,就算誤刪除了一個核心軟件,不用任何人為干預,也會把該軟件補回成刪除之前的狀態(tài)。
另外,配置的同步都是批量進行的(上百臺機器的集群很常見),為此,我們實現(xiàn)了灰度上線,“新配置”會先同步到一臺服務器上,在成功且測試之后,就可以選擇批量同步了,如果不成功,還可以回滾至舊配置。
(本文未完,待續(xù)。請繼續(xù)關注51CTO,后面將呈現(xiàn)更精彩的內容!)
關于作者:
孔德亮(微信號:randykong),奇虎360云事業(yè)部總監(jiān),跨領域技術專家,現(xiàn)任360私有云、公有云項目負責人。
孔德亮2009年加入奇虎360,隨著360業(yè)務快速發(fā)展,他也開始了內部創(chuàng)業(yè)之旅,先后負責應用運維、DBA、基礎架構等工作,通過逐步積累形成了私有云平臺。眾所周知,運維的工作“臟、苦、累”,一旦出現(xiàn)問題,運維人員似乎永遠是那個背黑鍋的人,所以,他希望能夠將技術產(chǎn)品化,使業(yè)務團隊在借助云平臺的力量,縮短研發(fā)周期、降低運維成本,同時能讓IT技術人員在靈活的操作體驗中感受愉悅。