本文为WOT2016互联网运维暨开发者大会现场干货。全新主题WOT2016企业安全技术峰会将于2016年6月24-25日在北京珠三角JW万豪酒店举行!盛大游戏是中国领先的网络游戏开发商、运营商和发行商。它有数万台服务器。面对如此庞大的服务器数量,盛大是如何自动管理远程服务器的呢?服务器一般基于应用层的运维。如何在硬件层面管理服务器?大多数公司的处理方式是通过操作系统的代理进行监督和监控。但是也有一些项目是不想安装代理的,比如盛大游戏,因为不知道安装代理会不会影响应用,会有什么样的影响。但是,项目组可能会制作一些代理人,将其放入项目中进行监督。服务器硬件也有一定的自动化运维需求。硬件的健康度,服务器的状态,内存有没有问题,电源有没有问题,这些在系统中是不容易控制的。服务器问题如何处理?这通常涉及致电操作员,或让现场技术人员重新安装系统并重新启动机器。但是这种操作方式需要有人帮忙,时效性差,无法快速操作服务器。远程KVM。当系统宕机,无法连接,无法准确判断服务器状态时,就会使用远程KVM功能。或者系统的自动部署,这是IDC全自动管理的关键环节。全自动安装系统需要通过PXE启动,然后通过IDC匹配完成系统的自动安装。基于这些问题,盛大采用了带外管理方式。带外管理是IPMI智能管理平台,基于IPMI服务器管理和监控。IPMI最初是由Intel、HP、Dell、NEC联合推出的跨平台的基于硬件的管理规范。从1998年推出最早的1.5版到2001年,2004年推出2.0版,一直到现在还推出了更新的版本。***2015年4月的一个版本进行了修订。盛大与英特尔的合作非常密切,一直在考虑如何让IPMI的功能更加完善。IPMI目前提供的功能基本是电源控制,可以开关机,还有硬件监控,比如监控主板和内存的状态。然后是alarm,可以设置阈值,提供一些报警功能。还可以生成硬件级别各种更改的日志。以及SOL串口的重置,早期的串口重置功能不支持新服务器的扩展功能,所以我们在服务器屏幕上看到的信息完全是基于SOL的。但是IPMI仍然存在很多问题,比如不支持挂载虚拟媒体等等。IPMI的基本架构将有助于IPMI功能的开发。因为IPMI提供了一个标准的白皮书,虽然提出了一些工具,但是这些工具在某些场合可能并不能完全满足开发者的要求。这时候,开发者就需要做一些基于硬件或者接口的开发。.硬件层面的架构图其实就是单片机做带外管理,可以理解为单片机脱离服务器硬件,也就是一个小型的单片机系统集成在服务器主板上。这个小型微控制器内部也有自己的操作系统。我们称这个小型单片机为BMC,它是底板控制器,是带外管理的主要核心芯片。带外BMC与操作系统层面、服务器主板、服务器硬件层面完全分离。整块硬件板只在电源层与服务器相连,即使不开机也能正常工作。带外产生的一系列信息,可以通过上面的外部接口和内部接口访问所有的信息,这就是系统接口。也就是说,在系统层面,带外是一块扩展的硬件板卡。在操作系统上安装相应的驱动程序后,就可以通过系统访问整个带外系统提供的所有功能。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接口。图片的上半部分称为outofBand(带外),下面我们称为inBand(带内)。上层在服务器外部,通过对外接口获取服务器的硬件信息。下层通过操作系统获取设备信息。软件站软件站的上层是带内提供的一系列访问功能,例如可以通过IPC、SNMP协议获取系统内部的带外信息。接口也可以通过BMI、CIM、WMI获取,其信息可以带内获取。windows中的很多信息都可以通过WMI获取。网络层的封装使用ICMP协议,2.0版本使用的ICMP+协议。这个协议封装在最外层,物理网卡上。然后使用UDP623端口进行封装。下一层是IPM信息传递的过程,包括它的NetFN、LUN、seq#、CMD、命令行、数据封装。关于信息传输的格式,分为请求和响应两部分。数据请求,IS,ADD为请求响应地址,长度为1字节。低位表示地址码,第一位0表示地址码,为1时为软件ID。高区位表示具体的地址码和软件ID。CMD是命令码,可以通过白皮书查到。完成代码,即CMD执行后,会返回一个长度为一个字节的代码。date是具体请求的数据,或者响应的数据。LUN是它的逻辑单元代码。NetFn是一个功能类,功能类后面会跟着LUN。NetFn的长度为一个字节,偶数为报文请求,奇数为报文响应。LUN是高6位,请求的序号。有请求生成序列号,低两位是响应和接收报文的地址码。***是检测框。检测框有一个算法。初始检测框为1,将所有待检测字节和校验和相加后,取256模。如果为0,则表示命令正确。.这些是IPMI架构中比较重要的点,在实际开发中被广泛使用。本文整理自盛大游戏盛大游戏技术服务部副经理、高级研究员闫强在自媒体主办的WOT2016互联网运维暨开发者大会上关于《服务器带外管理及其应用》主题的精彩演讲。讲座视频:http://edu.51cto.com/lesson/id-100750.html讲师简介:颜强,盛大游戏高级研究员,目前主要负责公司数据中心规划、建设、资源管理、IDC运营和维护等。十年盛大人,从IT到IDC,拥有丰富的硬件、系统、运维等经验。
