现在的位置: 首页 > 综合 > 正文

openais 研究

2017年12月05日 ⁄ 综合 ⁄ 共 5443字 ⁄ 字号 评论关闭

最近,研究了一下SAF(Service Availability Forum)规范中,对AIS(Application Interface specification)的描述。由规范中所定义的各个service,组成了HA(high availability) middleware,用于各种电信级平台(Carrier Grade),比如LTE网络中,AGW(MME,S-GW和P-GW)。目前大部分电信级平台都转向基于Linux操作系统。我们接下来介绍的AIS的具体实现也是基于Linux的。

目前,对AIS有两种开源实现,一种是openSAF,另外一种是openAIS。这两种实现都是用C语言开发的。接下来我们主要分析openAIS对规范的实现。

OpenAIS主要分为三个部分,他们是openAIS业务框架,组播通信系统和业务,其中业务包括SAF中定义的标准业务,同时,也包含自定义的业务。我们接下来对这三部分进行简要分析。

openAIS业务框架,他是整个openAIS开发的基础,所有的业务都是构建在这个框架之上的,它定义了每种业务应该遵循的标准接口,以便框架根据一定的规则回调这些标准的接口。业务开发者,只需要实现具体业务逻辑,并且以动态链接库的形式进行发布即可,业务的加载,调用和卸载都由openAIS框架来完成,换句话说,这个框架对业务的生命周期进行了管理。加载业务时,框架只需根据环境变量所定义的搜索路径,对动态链接库进行搜索,并采用动态加载库(dl库),运行时动态加载业务逻辑。业务的调用,框架会根据业务类型,以及对应的消息标识符通过查找业务逻辑映射表,进行业务逻辑的调用。业务的卸载,当openAIS守护进程终止或者收到动态卸载业务指令后,框架会利用运行时动态链接库函数,对业务进行卸载。

组播通信系统,他是整套系统的通信基础。openAIS适用于cluster环境的应用,他为在这个cluster环境中的各种应用程序提供了通知,协作和保护的功能。由于消息的组播是建立在UDP/IP的基础上的,如何保证消息可靠并且高效的传递到在cluster环境下的其他节点呢?我们知道UDP是一种高效的协议,但是他并不提供可靠的传输,因此,openAIS实现了一套RRP(Redundant ring protocol)。该协议可以保证建立在不可靠传输基础上的数据的传递的可靠性。并且这套协议很适合分布式计算环境的应用,不仅为分布式计算环境提供了数据的可靠性传输,同时也提供了对数据的备份方法。我们知道,一般做redundancy是在节点之间,或者是同一节点不同应用之间,而这种协议提出,这种redundancy是在两个局域网之间。提供网络数据的备份,提供分布式计算环境的数据传输的备份。在很大程度上保证了系统的健壮性。现在,大概讲讲RRP协议,该协议主要由两部分组成,第一部分探讨了在同一个cluster网络环境中,数据传输的唯一性,可靠性以及不存在竞态。第二部分探讨的是如何在两个或者多个网络间进行数据备份。我们先来看看第一部分,在同一个cluster网络中,存在一个令牌,这个令牌采用单播的方式进行传输,当cluster中某个节点获取了这个令牌之后,才具有组播消息的权限,这个时候他会将令牌中携带的计数器加1后付值给将要向局域网组播的消息的消息头,之后将该消息组播出去,接着,该节点负责将令牌传递给下一个节点。以此类推。这样就能保证在cluster环境中组播的消息是唯一的,并且消息是由消息头中的序列号字段来标识的。同时,当下一个节点拿到令牌后,可以根据令牌中的消息计数器来判断局域网中组播的消息是否有丢失,如果有,可以申请重传。另外一部分讨论了如何在局域网间进行数据备份,协议提供了三种方式,他们是passive,active和passive-active。Passive模式,假如目前有N个redundant network用于数据备份,当working network中某个节点拿到令牌后,需要从这N个网络中选择一个,并将组播消息和令牌发送一份到该网络中去,网络的选择采用RR算法(Round-Robin)。Active模式,节点将组播消息和令牌同时发送到所有网络。Active-passive模式,从N个redundant network中,选择一个子集K,将消息和令牌发送到这个子集中的所有网络。下层所做的redundancy对于上层应用来说是完全透明的,上层应用并不知道目前所获取的消息是来自于哪个物理网络。

OpenAIS的业务部分,目前提供了遵循SAF规范的业务的实现(AMF,CLM,Event,Message,Lock和check point等),同时也提供了openAIS的一些补充业务,比如configuration。对于业务的实现,值得一提的是check point service,因为目前在实现一套用来做主备倒换中数据备份的一套系统。对于check point service来讲的话,他的所有备份数据,在所有节点上都保留了一份,这样的话,对于某些数据量很大,并且内存吃紧的应用来说的话,是不适合。比如AGW中,一个session占有8k数据,一张卡所提供的用户容量假如是10万,按照这样计算,内存消耗都是相当大的。所以经过考虑,不采用check point service提供这种功能。目前,打算直接在两个应用进程之间进行数据拷贝,这样在很大程度上节约了内存,不过带来的问题是,如何保证在不影响应用进程业务逻辑正常工作的情况下,进行数据备份的工作?

——————————————————————————————————————————————————————————————

一.AIS概述

应用接口规范(AIS)是用来定义应用程序接口(API)的开放性规范的集合,这些应用程序作为中间件为应用服务提供一种开放、高移植性的程序接口。是在实现高可用应用过程中是亟需的。服务可用性论坛(SA Forum)是一个开放性论坛,它开发并发布这些免费规范。使用AIS规范的应用程序接口(API),可以减少应用程序的复杂性和缩短应用程序的开发时间,这些规范的主要目的就是为了提高中间组件可移植性和应用程序的高可用性。SAF AIS是一个开放性工程,在不断更新中。目前主要的服务如图1所示:

 

openais集群分析

    绿色部分为AIS管理的服务包括IMM,NTF,LOG,和SEC。中间红色部分为AIS 管理框架,有AMF和SMF两个架构。右边红色部分为AIS提供的公共服务,包括CKPT,EVT,LCK,MSG,NAM,TMR。下边红色部分CLM和PLM。AIS各个实体之间关系如图2所示。PLM在处在AIS最底层提供硬件的逻辑视图和系统低级软件,这些低级软件可以构成了操作系统,并为各种应用程序提供了执行的环境。CLM是在集群中描述集群节点的信息和集群节点的配置信息。AMF,SMF是AIS的两个框架,AMF是集群框架,为集群各个实体提供注册、注销,错误报告,保护组管理,可用性管理,健康状况监控等。SMF是服务管理框架,作用包括保持活动状态模型、监控由于软件改变造成的潜在的错误信息、配置恢复错误信息的步骤等。AIS Utility Services为AIS提供公共服务。AIS Management Services是AIS管理服务的对象。(其他组件详细资料在AIS文档中,此处略)

 

 

openais集群分析

二.OpenAIS概述

OpenAIS是基于SA Forum 标准的集群框架的应用程序接口规范。OpenAIS提供一种集群模式,这个模式包括集群框架,集群成员管理,通信方式,集群监测等,能够为集群软件或工具提供满足 AIS标准的集群接口,但是它没有集群资源管理功能,不能独立形成一个集群。OpenAIS组件包括AMF,CLM,CKPT,EVT,LCK,MSG,TMR,CPG,EVS等,因OpenAIS分支不同,组件略有不同。(下面介绍)OpenAIS主要包含三个分支:Picacho,Whitetank,Wilson。Wilson是最新的,比较稳定的版本是从openais 1.0.0到openais1.1.4。Whitetank现在是主流分支版本,比较稳定的版本是openais0.80到openais0.86。Picacho第一代的OpenAIS的分支,比较稳定的版本是openais0.70和openais0.71。现在比较常用的是Whitetank和Wilson,两者之间有很多不同。OpenAIS从Whitetank升级到Wilson版本后,组件变化很大,Wilson把Openais核心架构组件独立出来放在Corosync(Corosync是一个集群管理引擎)里面。Whitetank包含的组件有AMF,CLM,CKPT,EVT,LCK ,MSG, CPG,CFG,EVS, aisparser, VSF_ykd,bojdb等。而Wilson只含有AMF,CLM,CKPT,LCK, MSG,EVT,TMR(TMR,Whitetank里面没有),这些都是AIS组件。其他核心组件被放到了Corosync内。Wilson被当做Corosync的一个插件。(详细资料看OpenAIS文档

三.Corosync概述

 

Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程。可以说Corosync是OpenAIS工程的一部分。OpenAIS从openais0.90开始独立成两部分,一个是Corosync;另一个是AIS标准接口Wilson。Corosync包含OpenAIS的核心框架用来对Wilson的标准接口的使用、管理。它为商用的或开源性的集群提供集群执行框架。Corosync执行高可用应用程序的通信组系统,它有以下特征:

● 一个封闭的程序组(A closed process group communication model)通信模式,这个模式提供一种虚拟的同步方式来保证能够复制服务器的状态。

● 一个简单可用性管理组件(A simple availability manager),这个管理组件可以重新启动应用程序的进程当它失败后。

●一个配置和内存数据的统计(A configuration and statistics in-memory database),内存数据能够被设置,回复,接受通知的更改信息。

●一个定额的系统(A quorum  system),定额完成或者丢失时通知应用程序。(详细参看Corosync文档

四.AIS、OpenAIS,Corosync的关系

1.AIS与Whitetank的关系

由图3可以看出,OpenAIS的分支版本Whitetank除了包含AIS标准的应用程序接口,同时也有自己独立的管理模块,这些独立的模块为图3中浅黄色部分,包含CPG,CFG,EVS, aisparser, VSF_ykd,bojdb等控制模块。

 

openais集群分析

2.AIS与Wilson的关系

当OpenAIS到了Wilson以后,OpenAIS一分为二,Wilson的组件基本都是AIS组件。其他控制的核心组件被添加到Corosync中,关系如图4所示。

 

 

openais集群分析

3.Corosync与OpenAIS关系

图5所示,Wilson与Whitetank的主要区别在于Wilson相比Whitetank缺少核心架构。Wilson 作为Corosync的插件支持SA Forum 。

 

 

openais集群分析

五.OpenAIS集群实例

1.CMAN(略)

CMAN是红帽RHCS套件的核心部分,CCS是CMAN集群配置系统,配置cluster.conf,而cluster.conf其实就是openais的配置文件,通过CCS映射到openais。

2.Pacemaker1.x+corosync1.x+openais1.x

Pacemaker升级到1.0版本后,从Heartbeat独立出来,Pacemaker achieves maximum availability for your cluster services by detecting and recovering from node and service-level failures. It achieves this by utilizing the messaging and membership capabilities provided by your preferred cluster infrastructure (currently either OpenAIS or Heartbeat)

 

注意:

        Pacemaker必须升级到1.0以后,OpenAIS必须为Wilson版本

3.成功实例

Pacemaker/Corosync/OpenAIS/OCFS2/GFS2 for Ubuntu 10.04(详情

Pacemaker/Corosync/OpenAIS for Fedora13(配置详情)

Novell cluster(详情)

六.集群测试思考

1.SAFTEST测试工具

OpenaAIS官网说明,Whitetank和Picacho版本是采用SAFTEST测试。测试结果详情OpenAIS官网。(SATtest官网)

2.builtbot

Builtbot是用来测试Corosync的测试工具,与Pacemaker CTS一起使用(builtbot官网

3.Pacemaker CTS

抱歉!评论已关闭.