原贴:
http://www.gd-linux.org/bbs/showthread.php?p=11191#post11191
GDLC--在ATCA上实现高可用中间件
广东省Linux公共服务技术支持中心 邹晟
在电信级服务器领域要使中间件得到广泛应用,需要将ATCA、CGL以及SA论坛的HPI、AIS这几个规范标准结合起来并遵守,这看起来很容易,实际上却要复杂的多。尽管这些标准毫无疑问的使服务器系统各层之间更容易组合和相匹配,但每个平台都需要做一些工作来产生一个高整合度的系统。这篇文章将介绍整合的具体实施步骤,以Newstart高可用中间件和Adlink的ATCA硬件作为例子,但方法对所有SA Forum兼容的中间件和ATCA硬件都是有效的。
ATCA(Advanced Telecom Computing Architecture)标准即先进的电信计算平台,它脱胎于在电信、航天、工业控制、医疗器械、智能交通、军事装备等领域应用广泛的新一代主流工业计算技术——CompactPCI标准。是为下一代融合通信及数据网络应用提供的一个高性价比的,基于模块化结构的、兼容的、并可扩展的硬件构架。随着ATCA目前逐渐被业界接受,距大规模普及已经为时不远,电信级高可用中间件也随之有了相应的发展。
SA Forum(服务高可用性论坛)发布了两个重要的标准:硬件平台接口(HPI)和应用接口标准(AIS)。如下图所示,HPI为应用程序和中间件使用管理不同的硬件平台提供了接口,目的是为了提升应用程序、中间件和操作系统的跨平台移植性,最近的一版HPI是B.02.01(在2006年底发布)。作为对接口本身的补充,还有一个从HPI到ATCA的映射规范,重点指出了HPI如何映射到普通ATCA的传感器和控制器,和一个HPI简单网络管理协议(SNMP)及其管理信息库(MIB)。
HPI的实现大体上由硬件制造商在以下三方面提供:一个头文件、一个可链接的用户库和一个针对特定硬件平台的后台程序。另外还有一个开源的HPI实现名称为openHPI,在www.sourceforge.net上可以下载,openHPI可以在多种硬件平台上提供HPI更完整的实现。
AIS在应用程序和高可用中间件之间提供一致的接口,将其中一个从另一个中抽象出来,使得当底层中间件更换后应用程序可以很简单的得到复用。AIS由可用性管理框架(AMF)和一系列服务组成,AMF协调利用冗余资源来避免服务中断,一系列服务包括集群成员服务、检查点服务、事件服务、消息服务、锁服务、信息模型管理和记录服务,这些服务为应用程序和AMF提供必要的功能。
实现步骤概述
要实现一个电信级、应用就绪型(application-ready)的平台有以下这些必须的步骤:
找到一个使用正常的HPI实现
在HPI实现上测试你的高可用中间是否使用正常
创建相关硬件配置
与特定硬件的控制器和传感器结合
为现场可置换单元(FRUs)实现热拔插(hot swap)
实现合适的报警管理和策略
激活外部管理接口
下面将对这些步骤做具体的说明。
如何开始
首先一个问题就是你所使用硬件的厂商是否为你的目标平台提供了HPI实现,现在一部分硬件制造商(Motorola、Radisys等)提供自己的HPI库,而另一部分厂商不提供,那么就需要使用openHPI或者中间件厂商提供的合适硬件接口。很显然使用openHPI是比较好的办法,因为它独立于厂商,同时它功能更为完整且更容易实现。
一旦你有了一个工作正常的HPI库,无论是由硬件厂商提供还是使用HPI,下一步就是在HPI库上测试你的高可用中间件,首先就是对中间件的平台资源管理服务(PRMS)的“冒烟测试”,PRMS提供对硬件资源的管理,通过调用HPI和处理HPI事件及报警来实现功能。
接下来会自动运行一个程序来执行资源发现,操作传感器、控制器与存盘信息,设定阈值等。当这些测试可以确定基本的功能都运行正常,就可以进入到下一个步骤了。
创建相关硬件配置
当建立一个高度整合、应用就绪的平台,为每个预期的配置创建一个配置文件就非常必要。大部分的用户都有多种配置,比如说设备生产厂商会有几种不同的模式,每一个都使用相同的基本平台和框架,但在每个配置中都有不同数量和种类的板。
配置信息有时候也被称为系统模式,存放在内存数据库中,支持对象管理、对象分类分层与依赖、服务分组以及一整套可用性管理框架(AMF)提供的功能。系统模式的提供有两种方法,分别是静态提供和动态管理对象。
静态提供是预先建立好配置,存储在本机存储器中并向集群中的所有可管理节点发送。如果发生集群范围的错误,这将使得任何节点都可以将系统恢复到预先建立好的配置。一开始,PRMS调用HPI来列举节点里所有的对象,这些对象将同预先建立好的配置进行比较,如果有不同,可能就是故障或者丢失模块造成的,这时将会触发一个报警信息。
动态管理对象不是预先提供的,它在运行过程中动态建立并与特定的资源绑定(比如说一块新插入的板子)。动态管理对象是更灵活的配置提供办法但不能帮助检测系统判别与预期配置相背的异常。
与特定硬件的控制器和传感器结合
在文章的开始提到SA Forum提供了一个HPI到ATCA的映射规范,重点描述了如何从HPI映射到ATCA传感器与控制器。理想状况下,中间件厂商提供了对HPI到ATCA映射的支持。这将覆盖任何厂商的ATCA设备的80-90%的传感器和控制器,能节省大量的工作。
对每个特定的平台,通常会有OEM特殊的控制器和传感器,NewstartHA通过为每个平台提供一个平台特别库(PSL)并为新平台准备一个通用的PSL来解决这个问题。PSL提供三个方面的功能:热拔插管理、报警管理和对OEM特殊控制器和传感器的访问。
热拔插管理
对正在运行的系统进行硬件的拔插需要高可用中间件的管理,这包括是否允许拔插、将进程切换到备用资源的初始化以及平稳的停止现有资源。以拔出操作为例(见下图),当硬件资源处于拔出等待状态时,一连串的事件和决定在中间件和HPI里发生。高可用中间件应使得开发者能方便的对这一连串的事件和决定的每一步定制策略和行为。
[img] [/img]
当热拔插与特定平台相结合时,必须支持一系列的操作。比如说一次拔出被拒绝,必须在硬件状态显示上表现一条合适的信息。如果拔出被允许,热拔插管理服务(HSMS)将对象执行一次关闭操作使得所有依赖这个硬件资源的程序都能平稳的转移到备用资源上,当所有程序成功转移后,关闭硬件的供电,并使该硬件的热拔插指示灯持续闪烁。
中间件通过HPI对热拔插的实现在不同的平台中有细微的不同,比如说对一种产品在拔出过程中只需要设置热拔插指示器,对另一种产品除了设置热拔插指示器还需要关闭电源。这些操作在PSL中已经针对所有支持的平台预编译好,如果是新的平台就要在通用PSL上手动修改。
报警管理
每个系统都必须对可能危害系统正常运行的情况进行管理,报警管理服务(ALMS)应该提供一系列的功能使报警更容易管理:
为系统维护一个激活的报警链表
允许用户创建或删除应用特定的报警
当硬件资源状态切换、失败或无资源时,能检查、生成并发送报警
提供可配置的严格等级来调整系统如何对报警信号作出反应
提供根据严格等级、资源ID来对报警进行过滤的功能
不同的平台在产生传送和处理报警时也有细微的不同,特别的,OEM值必须转化为能准确描述当前资源状态的通用值。比如OEM寄存器返回的值是“0x0008”,就应该将其转化为更准确的描述“Processor disabled”。
外部管理接口
高可用中间件通常都自动的从错误中恢复和响应报警信号,但是也许你希望让操作者知道系统发生了一个错误,有些时候让操作者介入是非常必要的。外部系统管理是一条双向道,一方面将设备的信息传递给操作者,另一方面将操作者的指令传达到设备。现在大部分的系统管理接口都是命令行接口(CLI)和SNMP。
为了支持SNMP浏览器,必须创建针对不同配置的管理信息库(MIB)。一般要有三个MIB模块,一个提供对系统模式的访问,第二个提供对HPI信息的访问(包括初始化和管理热拔插),第三个提供对所有驻留内存的数据库的访问。