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