具体实施方式
为使本申请的目的,技术方案及优点更加清楚明白,以下参照附图对本申请方案做进一步的详细说明。
为了解决现有技术中存在的问题,本发明提供了一种BMC模块更新方法以及装置。
图1为本发明BMC模块更新方法所应用的组网环境示意图,该组网可以为包括多个可相互访问的服务器的对等网络(局域网),该对等网络中包括多个服务器(例如图1中的服务器1、服务器2以及服务器3),其中,各个服务器均是具有BMC模块的服务器,各个服务器的BMC模块可以通过其TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/因特网互联协议)层访问系统与局域网中的其他服务器的BMC模块进行通信。
请参考图2,为本发明提供的BMC模块更新方法的处理流程示意图,该BMC模块更新方法可应用于具有BMC模块的本地服务器。该BMC模块更新方法包括以下步骤:
步骤201,在所述BMC模块出现异常时,在预设的版本信息库中确定出具有稳定版本固件的健康服务器;
实际应用中,在服务器的BMC模块启动后,可以向局域网发送UDP(UserDatagramProtocol,用户数据报协议)的广播报文,以向局域网中开启BMC模块的所有服务器通告自身BMC模块所运行的版本信息。
其中,该广播报文中包括BMC模块版本信息(服务器BMC模块所运行的版本信息)以及标识信息,该标识信息具体可以包括发送该广播报文的服务器的IP地址以及主机名称(例如,服务器BMC模块的名称)等信息。
之后,本地服务器还可以接收到局域网中BMC模块已启动的其他服务器根据发送的广播报文回复的具有其他服务器的BMC模块版本信息以及标识信息的回应报文。
本地服务器可以获取接收的回应报文中携带的其他服务器的BMC模块版本信息以及标识信息,并将获取的BMC模块版本信息以及标识信息的对应关系添加至预设的版本信息库中。
并且,后续局域网中有服务器BMC模块启动时,本地服务器也可以接收到局域网中的其他服务器在BMC模块启动时发送的携带BMC模块版本信息以及标识信息的广播报文,在本地服务器将广播报文中的其他服务器的BMC模块版本信息以及标识信息的对应关系添加至预设的版本信息库中的同时,还可以向发送所述广播报文的其他服务器发送本地服务器BMC模块版本信息以及标识信息,以使其他服务器将本地服务器BMC模块版本信息以及标识信息保存至所述其他服务器的版本信息库。
这样一来,局域网中的所有服务器均可以保存有完整的版本信息库。
例如,该版本信息库的内容可以如表1所示:
主机名称 |
IP地址 |
BMC模块版本信息 |
BMC1 |
192.168.X.1 |
BMC v1版本 |
BMC2 |
192.168.X.2 |
BMC v1版本 |
BMC3 |
192.168.X.3 |
BMC v2版本 |
表1
表1示出了预设的版本信息库,仅是为进一步理解本发明的示例,并不用于限制本发明实施例中版本信息库的具体内容。
本发明实施例中,在服务器的BMC模块被关闭前,通常会向局域网发送关闭BMC模块的广播报文。在本地服务器接收到局域网中的某个服务器发送的关闭BMC模块的广播报文后,可以将版本信息库中保存的与关闭BMC模块的服务器所对应的BMC模块版本信息以及标识信息删除,或者将与关闭BMC模块的服务器所对应的BMC模块版本信息以及标识信息添加用于表征该服务器拒绝访问的标记,以保证版本信息库中保存有BMC模块版本信息的服务器均是可进行访问的服务器。
需要说明的是,若使用上述将与关闭BMC模块的服务器所对应的BMC模块版本信息以及标识信息添加标记的方式表征该服务器拒绝访问,本发明的另一示例中还可以按照以下流程进行处理:
在服务器的BMC模块启动后,可以向局域网发送UDP的广播报文,以向局域网中开启BMC模块的所有服务器通告自身BMC模块所运行的版本信息。
本地服务器在接收到局域网中BMC模块已启动的其他服务器发送的广播报文后,可以获取广播报文中携带的其他服务器的BMC模块版本信息以及标识信息,并将获取的BMC模块版本信息以及标识信息的对应关系添加至预设的版本信息库中。同时将与开启BMC模块的服务器所对应的BMC模块版本信息以及标识信息添加标记,例如“1”,用于表征该服务器为可以访问的服务器。
当本地服务器后续接收到局域网中的某个服务器发送的关闭BMC模块的广播报文后,可以将版本信息库中保存的与关闭BMC模块的服务器所对应的BMC模块版本信息以及标识信息的标记进行修改,例如将“1”修改为“0”,用于表征该服务器为拒绝访问的服务器,以避免其他服务器对该服务器进行无效的访问。
本发明中各服务器的BMC模块可以设置多种异常检查策略,以使服务器的BMC模块可以具有自动检测自身是否出现异常的功能,并且在检查到自身出现异常时还可以辨别是软件发生故障(即BMC模块运行的服务出现异常)还是硬件发生故障。例如,本发明实施例中用以辨别软件发生故障(BMC模块运行的服务出现异常)而设置的多种异常检查策略包括但不限于如下几种:
1、当BMC模块获取到外围设备的无效参数时,综合考虑获取的相关参数,进而鉴别出是否是服务异常。例如,该无效参数可以是温感设备定义的无效值,cpu风扇转速参数,环境温度参数等。
2、若BMC模块进程发生异常退出,可以确定出现服务异常。
3、BMC模块进程流程中的软件流程出现异常时,可以确定出现服务异常,比如与硬件无关的软件抛出异常。
4、在BMC模块启动阶段,软件初始化过程中出现非正常启动情况,可以确定出现服务异常。
各服务器的BMC模块在运行过程中,若根据上述异常检查策略一旦检测到BMC模块出现异常,则可以在预设的版本信息库中确定出具有稳定版本固件的健康服务器。
在预设的版本信息库中确定出具有稳定版本固件的健康服务器具体可以包括:在所述预设的版本信息库中查找BMC模块版本信息中低于本地服务器运行的固件版本的服务器,将与低于本地服务器运行的固件版本的服务器对应的BMC模块版本信息作为稳定版本固件;获取具有稳定版本固件的服务器的健康状态信息;对所述健康状态信息进行评估后得到评估结果,根据所述评估结果确定具有稳定版本固件的服务器为健康服务器。
假设,本地服务器为服务器3,服务器3的BMC模块运行的版本信息为BMCv2版本,那么根据版本信息库中的BMC模块版本信息可知,BMCv1则是低于服务器3的BMC模块运行的版本(BMCv2版本),那么BMCv1则是稳定版本固件。
之后,获取运行稳定版本固件(BMCv1版本)的服务器(服务器1以及服务器2)的健康状态信息。该健康状态信息包括服务器内部资源的使用情况、软件异常事件以及元器件访问成功/失败等信息。
本发明实施例中的各个服务器均会将自身的健康状态信息保存至指定位置,在需要获取服务器1以及服务器2的健康状态信息时,本地服务器3可以根据版本信息库中保存的服务器1以及服务器2的IP地址分别访问服务器1以及服务器2,进而获取服务器1以及服务器2的健康状态信息。
接着,根据获取到的健康状态信息来评估服务器1以及服务器2的健康状况,并得到评估结果,根据该评估结果确定出健康服务器。
其中,在确定健康服务器时具体的评估方法可以参考现有技术的IPMI协议中对服务器进行健康状况评估的方法,例如,可以对获取的健康状态信息中的服务器内部资源的使用情况、软件异常事件以及元器件访问成功/失败等因素进行综合评估,得到评估结果,并根据评估结果选取出最优的服务器作为健康服务器等方法,在此不再一一赘述。
若根据评估结果确定出多个最优服务器,那么可以进一步确定出多个最优服务器中负载最轻的服务器作为健康服务器。
假设,根据评估结果确定服务器1为最优服务器,那么,可以确定服务器1为具有稳定版本固件的健康服务器。
步骤202,若出现异常的BMC模块为BMC模块运行的其中一个服务出现异常,获取所述健康服务器上与所述其中一个服务对应的服务文件,并根据所述服务文件重新启动所述服务。
通常情况下,若BMC模块出现异常可能是BMC模块运行的其中一个服务出现异常,也可能是BMC模块运行的多个服务都出现异常。当有两个服务或两个以上服务出现异常时,可以确定多个服务出现异常。在步骤201中根据异常检查策略检查到服务出现异常时,即可得知出现异常的BMC模块是一个服务出现异常或是多个服务出现异常。
本发明实施例可以针对BMC模块的一个服务出现异常以及多个服务出现异常时分别设置不同的处理方法,例如:
1、出现异常的BMC模块为BMC模块运行的其中一个服务出现异常。
在本地服务器BMC模块的自动检测功能检测出BMC模块运行的其中一个服务出现异常时,可以从确定出的健康服务器上拷贝与本地服务器出现异常的其中一个服务对应的服务文件,并根据拷贝的服务文件重新启动该出现异常的服务,以使该出现异常的服务可以继续正常运行。
之后,再从该具有稳定版本固件的健康服务器上下载稳定版本固件,或者,也可以从网络中预存的某个存储地址下载该稳定版本固件,然后将下载的稳定版本固件保存至ROM(存储器)的备份分区中。
在稳定版本固件下载完成后,将服务器系统的引导地址进行切换,即:将ROM中保存原有固件版本的主分区切换为新的备份分区,将保存了稳定版本固件的备份分区切换为新的主分区,并根据新的主分区中的稳定版本固件启动BMC模块,以对BMC模块进行更新。
这样一来,本发明实施例中由于对BMC模块出现异常的服务进行了更新,即使在BMC模块的固件版本在更新期间仍可以继续运行,进而大幅缩短了BMC模块更新期间BMC模块服务的中断时间,有效提升了服务器的可靠性。
2、出现异常的BMC模块为BMC模块运行的多个(两个或两个以上)服务出现异常。
在本地服务器BMC模块的自动检测功能检测出BMC模块运行的多个服务均出现异常时,仍然可以按照上述对其中一个服务出现异常的处理流程来依次对多个异常服务进行处理。
然而,在本发明优选地实施方式中,为了避免因需要拷贝多个服务文件而花费较多时间,还可以不对健康服务器上的服务文件进行拷贝,而是在本地服务器上运行支撑系统,由确定出的健康服务器作为临时托管服务器,并由临时托管服务器的BMC模块与本地服务器的支撑系统建立托管通道,以使临时托管服务器通过该托管通道临时管理本地服务器BMC模块的多项服务,其中,可以被托管服务器临时托管的多项服务可以是数据读取等服务,例如:温度数据的获取、风扇转速数据获取、拓扑数据的获取等。
在本地服务器的服务被健康服务器进行托管期间,本地服务器即可从健康服务器上下载稳定版本固件,或者,也可以从网络中预存的某个存储地址下载该稳定版本固件,然后将下载的稳定版本固件保存至ROM(存储器)的备份分区中。
在稳定版本固件下载完成后,将服务器系统的引导地址进行切换,即:将ROM中保存原有固件版本的主分区切换为新的备份分区,将保存了稳定版本固件的备份分区切换为新的主分区,并根据新的主分区中的稳定版本固件启动BMC模块,以对BMC模块进行更新。
这样一来,由于出现异常的BMC模块运行的多项服务被健康服务器进行了临时托管,避免了在对本地服务器BMC模块更新期间,BMC模块服务停止运行的情况,进而有效提升了服务器的可靠性。另外,在人为的对服务器的BMC模块进行更新,并需要保证服务不中断时,也可以参照上述在出现异常的BMC模块为BMC模块运行的多个服务出现异常的处理流程对服务器的BMC模块进行更新,在此不再赘述。
进一步地,在所述BMC模块运行过程中,或者由健康服务器托管本地服务器的多项服务期间,若当前产生的日志信息存储量达到预设上限,或者,在到达预设的日志备份时间时,可以将本地服务器保存的日志信息保存至健康服务器,此时,本地服务器上保存的日志信息还可以根据实际需要选择保存或删除,以保证BMC模块日志信息的可靠性,或者节省本地服务器的存储空间。
进一步地,若根据稳定版本固件对本地服务器的BMC模块更新失败,可以关闭所述本地服务器的BMC模块,并由预先设置的备份服务器作为健康服务器管理本地服务器BMC模块的多项服务。
具体地,在根据稳定版本固件对本地服务器的BMC模块进行更新并失败后,说明该服务器可能存在故障,那么由健康服务器的BMC模块控制故障服务器关闭故障服务器的BMC模块,并通过支撑系统建立的托管通道长期托管故障服务器BMC模块的多项服务,以保证BMC模块的服务不中断。
或者,由健康服务器的BMC模块控制关闭出现故障的服务器,启动预先为该故障服务器设置的备份服务器,并由该备份服务器来管理故障服务器BMC模块的多项服务,以保证BMC模块的服务不中断。
本发明实施例提供的BMC模块更新方法,在BMC模块运行的其中一个服务出现异常时,根据从健康服务器获取的服务文件更新出现异常的服务,仍可以保证在重启BMC模块时,BMC模块出现异常的服务可以继续运行,即使是BMC模块运行的多个服务出现异常,通过健康服务器对异常BMC模块服务的临时托管,也可以保证在重启BMC模块时,BMC模块出现异常的服务可以继续运行。与现有技术中在对BMC模块进行更新时需停止服务运行相比,本发明可大幅缩短了BMC模块更新期间运行服务的中断时间,有效提升了服务器的可靠性。
本发明还提供一种BMC模块更新装置,图3为该BMC模块更新装置的结构示意图,该装置可以应用于具有BMC模块的本地服务器,该BMC模块更新装置可以包括确定单元301、获取单元302以及更新单元303,其中:
确定单元301,用于在所述BMC模块出现异常时,在预设的版本信息库中确定出具有稳定版本固件的健康服务器;
获取单元302,用于在出现异常的BMC模块为BMC模块运行的其中一个服务出现异常时,获取所述健康服务器上与所述其中一个服务对应的服务文件,并根据所述服务文件启动所述服务;
更新单元303,用于从所述健康服务器上,或者从预存的存储地址获取所述稳定版本固件,并根据所述稳定版本固件对所述本地服务器的BMC模块进行更新。
进一步地,所述装置还包括管理单元304,用于在确定所述BMC模块出现异常时,若判断出现异常的BMC模块为BMC模块运行的多个服务出现异常,在预设的版本信息库中确定出具有稳定版本固件的健康服务器后,由所述健康服务器管理所述本地服务器BMC模块的多项服务;所述更新单元303还用于从所述健康服务器上、或者从预存的存储地址获取稳定版本固件,并根据所述稳定版本固件对所述本地服务器的BMC模块进行更新。
进一步地,所述获取单元302还用于接收到局域网中的其他服务器启动时发送的广播报文后,获取所述广播报文中携带的所述其他服务器的BMC模块版本信息以及标识信息;所述预设的版本信息库包括所述广播报文中携带的BMC模块版本信息以及标识信息的对应关系。
进一步地,所述确定单元301具体用于在所述预设的版本信息库中查找BMC模块版本信息中低于本地服务器运行的固件版本的服务器,将与低于本地服务器运行的固件版本的服务器对应的BMC模块版本信息作为稳定版本固件;获取具有稳定版本固件的服务器的健康状态信息;对所述健康状态信息进行评估后得到评估结果,根据所述评估结果确定所述具有稳定版本固件的服务器为健康服务器。
进一步地,所述更新单元303具体用于将从所述健康服务器上获取的稳定版本固件保存至存储器的备份分区;将所述备份分区切换为新的主分区,并根据所述新的主分区中的稳定版本固件对所述BMC模块进行更新。
进一步地,所述装置还包括保存单元305,用于在判断运行的服务所产生的日志信息存储量达到预设上限,或者,在到达预设的日志备份时间时,将本地保存的日志信息保存至所述健康服务器。
进一步地,所述管理单元304还用于在对所述本地服务器的BMC模块更新失败时,关闭所述本地服务器的BMC模块,并由预先设置的备份服务器作为健康服务器管理所述本地服务器BMC模块的多项服务。
本发明应用于具有BMC模块的本地服务器的BMC模块更新装置在具体的处理流程中可以与上述BMC模块更新方法的处理流程一致,在此不再赘述。
上述装置可以通过软件实现,也可以通过硬件实现,本发明BMC模块更新装置所在网络设备的硬件架构示意图均可参考图4所示,其基本硬件环境包括中央处理器CPU、转发芯片、存储器以及其他硬件,其中存储器件中包括机器可读指令,CPU读取并执行机器可读指令执行图3中各单元的功能。
从以上各种方法和装置的实施方式中可以看出,本发明实施例提供的BMC模块更新方法以及装置,在BMC模块运行的其中一个服务出现异常时,根据从健康服务器获取的服务文件更新出现异常的服务,仍可以保证在重启BMC模块时,BMC模块出现异常的服务可以继续运行,即使是BMC模块运行的多个服务出现异常,通过健康服务器对异常BMC模块服务的临时托管,也可以保证在重启BMC模块时,BMC模块出现异常的服务可以继续运行。由此可见,本发明可大幅缩短了BMC模块更新期间运行服务的中断时间,有效提升了服务器的可靠性。
另外,本发明实施例提供的BMC模块更新方法以及装置可以在不增加硬件的前提下,还无需进行人为监控,在增强了系统稳定性的同时,还减少了服务器维护人员的工作量,进而有效节约了成本。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。