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