盛大游戲是如何做到遠(yuǎn)程服務(wù)器的自動(dòng)管理的?
原創(chuàng)本文是WOT2016互聯(lián)網(wǎng)運(yùn)維與開發(fā)者大會(huì)的現(xiàn)場(chǎng)干貨,新一屆主題為WOT2016企業(yè)安全技術(shù)峰會(huì)將在2016年6月24日-25日于北京珠三角JW萬(wàn)豪酒店隆重召開!
盛大游戲是中國(guó)領(lǐng)先的網(wǎng)絡(luò)游戲開發(fā)商、運(yùn)營(yíng)商和發(fā)行商,有著上萬(wàn)臺(tái)的服務(wù)器,面對(duì)如此大量的服務(wù)器,盛大是如何做到遠(yuǎn)程服務(wù)器的自動(dòng)管理的?
服務(wù)器一般是基于應(yīng)用層的運(yùn)維,硬件層面如何管理服務(wù)器?大部分公司的處理方式是通過操作系統(tǒng)的agent來(lái)做監(jiān)管、監(jiān)控。但是有些項(xiàng)目不希望被安裝agent,比如盛大游戲,因?yàn)榘惭bagent對(duì)應(yīng)用是否會(huì)產(chǎn)生影響以及產(chǎn)生什么樣的影響都不得而知,但是項(xiàng)目組為了監(jiān)管可能會(huì)自己做一些agent放進(jìn)項(xiàng)目中。
服務(wù)器硬件的自動(dòng)化運(yùn)維也是有一定的需求的。
硬件的健康情況,服務(wù)器處于什么狀態(tài),內(nèi)存是否出現(xiàn)問題,電源有沒有問題,這些在系統(tǒng)里都不好控制。
服務(wù)器出現(xiàn)問題后怎么去處理?通常是打電話給運(yùn)營(yíng)商,或者讓現(xiàn)場(chǎng)的技術(shù)人員重裝系統(tǒng),重啟機(jī)器。但是這種操作方式需要找人幫助,時(shí)效性較差,無(wú)法快速操作服務(wù)器。
遠(yuǎn)程的KVM。當(dāng)系統(tǒng)宕掉,連接不上,無(wú)法確切判斷服務(wù)器的狀態(tài)時(shí),就會(huì)用到遠(yuǎn)程KVM的功能?;蛘呤窍到y(tǒng)自動(dòng)部署,這是IDC全自動(dòng)管理的很關(guān)鍵一環(huán)。全自動(dòng)安裝系統(tǒng)需要通過PXE啟動(dòng),這之后通過IDC 匹配從而完成系統(tǒng)的自動(dòng)安裝。
基于這些問題,盛大使用了帶外管理的方式。帶外管理是IPMI智能管理的平臺(tái),基于IPMI的服務(wù)器管理及監(jiān)控。IPMI最初是由英特爾、惠普、戴爾、NEC幾家聯(lián)合推出的一個(gè)跨平臺(tái)的基于硬件的一個(gè)管理規(guī)范。從最早的1998年到2001年推出了1.5版本,到2004年推出了2.0版本,到現(xiàn)在也一直推出過更新的版本。***一個(gè)版本是在2015年4月份有一個(gè)修訂。盛大跟英特爾有著非常密切的合作,一直在考慮如何讓IPMI的功能更加完善。
目前所提供的IPMI的功能,基本上是電源控制,可以開關(guān)機(jī),還有硬件的監(jiān)控,比如監(jiān)控主板的情況和內(nèi)存。再就是報(bào)警,可以設(shè)定閾值,提供一些報(bào)警的功能。還可以產(chǎn)生硬件層面的各種變化的日志。以及SOL串口的重定項(xiàng),串口的重定項(xiàng)功能在早期的服務(wù)器都不支持目前新出服務(wù)器的擴(kuò)展功能,所以我們看到的服務(wù)器屏幕上的信息是完全基于SOL做的。但是IPMI現(xiàn)在也還有很多問題,比如說(shuō)不支持掛載虛擬介質(zhì)等等。
IPMI基礎(chǔ)的架構(gòu),對(duì)IPMI功能開發(fā)上會(huì)有些幫助。因?yàn)镮PMI提供了一個(gè)標(biāo)準(zhǔn)的白皮書,雖然提出了一些工具,這些工具可能在某些場(chǎng)合下并不能完全達(dá)到開發(fā)者的要求,這時(shí)開發(fā)者要做一些基于硬件層面的,或者基于接口方面的開發(fā)。
硬件層面的架構(gòu)圖
其實(shí)帶外管理就是一個(gè)單片機(jī),可以理解成它是脫離服務(wù)器硬件的一塊單片機(jī),也就是說(shuō)在服務(wù)器的主板上又集成了一個(gè)小的單片機(jī)系統(tǒng)。這個(gè)小單片機(jī)里面也有它自己的操作系統(tǒng)。這個(gè)小單片機(jī)我們叫做BMC,就是基板控制器,它是帶外管理的主核心芯片。帶外BMC完全是脫離開操作系統(tǒng)層面、服務(wù)器主板以及服務(wù)器硬件層面的。整個(gè)硬件的板卡只在電源層面上跟服務(wù)器有連接,所以即使不開機(jī)也是可以正常工作的。
帶外所產(chǎn)生的一系列的信息,可以通過上面外部的接口和內(nèi)部的接口訪問所有的信息,就是System Interface。也就是說(shuō)系統(tǒng)層面上帶外是作為一個(gè)擴(kuò)展的硬件的板卡,在操作系統(tǒng)上安裝相應(yīng)的驅(qū)動(dòng)程序之后,通過系統(tǒng)可以訪問整個(gè)帶外系統(tǒng)所有提供的功能。
在BMC上有一個(gè)非實(shí)際性的存儲(chǔ)器,存儲(chǔ)器里保存了一個(gè)像IDL、SED、FIU這類的信息。IDL就是傳感器的倉(cāng)庫(kù)記錄,傳感器所產(chǎn)生的信號(hào)都放在IDL里面,可以通過命令來(lái)獲取IDL的信息,檢查傳感器的情況和狀態(tài)。SEL是事件日志,硬件層面的事件會(huì)記錄到SEL里面,通過獲取SEL事件記錄,能查到機(jī)器在什么時(shí)間出現(xiàn)過什么問題。再者是FIU可替換的管理單元,記錄了整個(gè)服務(wù)器硬件系統(tǒng)的各板卡硬件的信息。通過獲取FIU的信息,來(lái)識(shí)別板卡,服務(wù)器的廠家,SN號(hào)、資產(chǎn)號(hào)等。
BMC與外界的通訊是通過IPMB數(shù)據(jù)總線與外部數(shù)據(jù)進(jìn)行交互。像惠普、戴爾、浪潮、聯(lián)想這些服務(wù)商的服務(wù)器都有一塊擴(kuò)展器,擴(kuò)展的帶外卡里有一個(gè)MB芯片,在芯片上又加了一塊板卡。這個(gè)板卡起到了對(duì)BMC的擴(kuò)展功能。BMC是命令行的,沒有外部接口,只能通過命令來(lái)完成一些操作,獲取信息。如果想通過外部的方式更方便查看信息,就需要有一個(gè)擴(kuò)展卡,這個(gè)擴(kuò)展卡就是掛在IPMB總線上的。
服務(wù)器與服務(wù)器之間的通訊是通過ICMB總線去獲取的。也可以通過外部的接口,像Lan接口、網(wǎng)絡(luò)接口、串口、SL接口,來(lái)訪問BMC,SL實(shí)際就是以前的電話撥號(hào)或者PPP協(xié)議,現(xiàn)在應(yīng)用最多的還是Lan接口。圖中上部叫out of Band(帶外),下面我們叫in Band (帶內(nèi))。上層是服務(wù)器外部,通過外部的接口來(lái)獲取服務(wù)器的硬件信息。下層是通過操作系統(tǒng)內(nèi)部來(lái)獲取設(shè)備的信息。
軟件站
軟件站,上層是帶內(nèi)提供的一系列的訪問功能,比如可以通過IPC,SNMP協(xié)議在系統(tǒng)內(nèi)部獲取帶外的信息。還可以通過BMI、CIM、WMI獲取接口,從帶內(nèi)獲取它的信息。在windows很多信息都是可以通過WMI來(lái)獲取的。
網(wǎng)絡(luò)層的封裝,它使用的是ICMP協(xié)議,2.0版本使用的ICMP+協(xié)議。這個(gè)協(xié)議在最外層,物理網(wǎng)卡上的封裝。再往里使用的UDP623端口進(jìn)行封裝。再往里層就是IPM的信息傳遞的過程,包括它的NetFN、LUN,還有seq#、CMD、命令行,以及數(shù)據(jù)的封裝。
關(guān)于信息傳遞的格式,分為請(qǐng)求和應(yīng)答兩部分。數(shù)據(jù)請(qǐng)求,IS、ADD是做請(qǐng)求響應(yīng)的地址,有一個(gè)字節(jié)的長(zhǎng)度。低位的表示地址碼,***位0表示一個(gè)地址碼,為1的時(shí)候是一個(gè)軟件的ID。高區(qū)位表示具體的地址碼和軟件的ID。CMD是命令代碼,通過白皮書可以查到。完成代碼,也就是CMD執(zhí)行完之后,會(huì)返回一個(gè)代碼,長(zhǎng)度是一個(gè)字節(jié)。date是具體請(qǐng)求的數(shù)據(jù),或者是響應(yīng)的數(shù)據(jù)。LUN是它的邏輯單元碼。NetFn是功能類別,功能類別后面會(huì)跟LUN。NetFn長(zhǎng)度是一個(gè)字節(jié),偶數(shù)為消息請(qǐng)求,奇數(shù)為消息的響應(yīng)。LUN是高6位,請(qǐng)求的順序號(hào)。有請(qǐng)求生成一個(gè)序列號(hào),低兩位是響應(yīng)和接收消息的地址碼。***是檢測(cè)盒,檢測(cè)盒有一個(gè)算法,初始的時(shí)候檢測(cè)盒是1,所有的被校驗(yàn)的字節(jié)和checksum相加后256取模,如果是0的話,就說(shuō)明這個(gè)指令是正確的。
這些是在IPMI架構(gòu)里面比較重要的幾點(diǎn),在實(shí)際開發(fā)中應(yīng)用較多。
本文整理自,由51CTO傳媒主辦的WOT2016互聯(lián)網(wǎng)運(yùn)維與開發(fā)者大會(huì)上來(lái)自盛大游戲盛大游戲技術(shù)服務(wù)部副經(jīng)理、高級(jí)研究員閆強(qiáng)主題為《服務(wù)器帶外管理及其應(yīng)用》的精彩演講。
演講視頻:http://edu.51cto.com/lesson/id-100750.html
講師簡(jiǎn)介:
閆強(qiáng),盛大游戲高級(jí)研究員,目前主要負(fù)責(zé)公司數(shù)據(jù)中心規(guī)劃、建設(shè)及資源管理、IDC運(yùn)維等。十年盛大人,從IT到IDC,對(duì)硬件、系統(tǒng)、運(yùn)維等都有較為豐富的經(jīng)驗(yàn)。