1 引 言
随着计算机应用技术的发展,计算机应用已经早就从单机系统发展到网络系统。但是随着网络系统的扩大,要保证整个大系统的正常运转就远比保证单机系统的正常运转困难得多,不过只要处理好各个系统的协调关系以及提高关键系统(服务器系统)运行的可靠性,那么网络系统在某种程度上就比单机系统更有保障。
如何保证系统的可靠性,是当今科技应用研究的热点。现在常用的方法是:采用冗余技术提高系统的可靠性。常用的技术有:冷备份、温备份和热备份。冷备份指后备系统未运行;温备份指后备系统在工作系统停止之前启动并同步后才能停止运行系统;热备份指后备系统运行并保持与工作系统时时同步。这些技术各有优缺点。热备份需要时时保持后援系统与工作系统的状态一致,那么后援系统必须时时运行,降低了系统的使用寿命,可冷备份又不能保证后援系统启动后与工作系统的状态一致。
2 实际中遇到问题的描述
该问题是在一个网络ERP应用系统中遇到的,在该系统中,所有客户端运行的软件都需要访问数据库服务器上的数据库,而客户软件记录的是每天生产中的实时数据,这就必须保证数据库服务器正常工作,否则整个网络系统就不能运行,这将导致停止生产,给公司造成巨大的损失。如何保证系统的可靠性,就成为问题的关键所在。本文根据冗余技术的相关理论,结合三种备份技术的优缺点,使用温备份技术,设计了一个基于Nios处理器的智能容错系统,在实际应用中取得了良好的效果。
3 智能容错系统的整体规划
本文设计的系统可以在智能仲裁中制定系统的运行计划,即:可以制定系统中两个服务器的运行时间。在该系统中,每天两台服务器以12小时为单位交替运行。具体过程如下:
1)给智能仲裁器上电,然后按下仲裁器上的按钮启动一台服务器,这台服务器启动后就开始工作。
2)工作服务器在更新数据库的同时,通过串口通讯把相关同步信息发送给仲裁器(这里是操作数据库的SQL语句),仲裁器收到同步信息后就把这些信息存入与仲裁器相连接的IDE硬盘上(在同步信息不多的情况下,最好在仲裁器上使用Flash)。
3)当计划时间到了后,仲裁器就启动后援服务器,然后每隔一定的时间检测启动的后援服务器是否已经到了可以工作的状态。
4)如果在规定的检测次数中,启动的后援服务器还没有到达可以工作的状态,那么仲裁器就报警,提示用户后援服务器出现故障了,这时就保持原工作服务器继续运行。反之,如果在规定的检测次数中检测到后援服务器到达可以工作的状态,就接着如下步骤运行。
5)仲裁器向后援服务器发送启动同步的命令,后援服务器收到该命令后就通过串行口向仲裁器发送同步请求。
6)仲裁器收到后援服务器的同步请求后,就从硬盘中读取同步信息并发送给后援服务器,后援服务器收到后就根据同步信息执行同步操作(这里是运行操作数据库的SQL语句)。
7)当同步工作完成后,后援服务器就给仲裁器发送同步完成的消息,仲裁器收到该消息后,就分别向两台服务器发送网络配置信息(如:IP地址等),以便命令各个服务器修改自己的网络配置。
8)此时后援服务器已经成为工作服务器了,仲裁器向原工作服务器发送关机命令,以便关闭原工作服务器使之成为后援服务器。
整个过程到此为止,以后就反复上述过程运行整个系统,该系统的整体框架如图1所示:
图1 系统整体框架图
图1是工作服务器未发生故障时的流程。实际上,在工作服务器工作期间,仲裁器会在一定的时间间隔(这个时间间隔可以通过仲裁器设置,如系统要求的实时性较高,该间隔就要设置短一些;反之,设置长一些)内查询服务器的状态,从而得知服务器是否发生故障,如果发生故障,仲裁器就报警提示用户,并且此时仲裁器启动后援服务器。当仲裁器检测到后援服务器可以工作时,就从硬盘上获取同步信息进行后援服务器的同步工作。
4 智能容错系统具体实现思想
4.1 硬件设计思想
本文讨论的智能容错系统,主要使用FPGA芯片,利用Nios软核处理器强大的功能定制出一个满足我们实际需要的SOC(系统级芯片),并使用该芯片与相关的外围电路以及配合一定的软件设计,实现了一个智能仲裁器,其原理框图[5]如图2所示:
图2 仲裁器的原理图
下面对上述原理图进行简单的介绍:
1)通用IO口PIO1只是当作输出口使用,用于控制连接/断开服务器电源的两个继电器、表示服务器状态的双色发光二极管(红绿两种颜色)和用于显示时间间隔(用于决定多长时间检测服务器的状态)等级的一位八段数码管。LED1、LED2分别用于指示两台服务器的工作状态,绿色表示对应服务器正在工作;红色表示对应服务器停止工作;红色闪烁表示对应服务器发生故障,此时蜂鸣器会发出报警声音。上图中没有画出相应的驱动电路[7]。PIO1共占16位,高八位用于控制八段数码管;0~3位用于控制两个双色发光二极管;4~5位用于控制两个继电器;6位用于控制蜂鸣器。
2)通用IO口PIO2只是当作输入口使用,用于接受仲裁器上的控制按键。仲裁器上的SWA、SWB及SWL分别表示开启A服务器、开启B服务器及设置时间间隔等级的按键。SWA和SWB是开关型按键,即:按一下开,再按一下就关。SWL按键从0~9循环改变时间间隔的等级,并在八段数码管上显示等级。
3)IDE接口控制器是自定义用户逻辑,用于访问与仲裁器连接的IDE硬盘。
4)Timer1定时器用于控制各台服务器的工作时间以及定时查询服务器的工作状态的,该定时器采用中断方式工作。
5)Flash控制器,这里指的是CFI(Common Flash Interface)控制器,只要支持CFI命令的Flash都可以连接到该系统上。此处用于连接片外的16MB闪存,以便于存储用户程序和相关数据。在该仲裁器中,Flash的开始处保存Boot Loader,在系统启动时,它把用户程序复制到SDRAM中运行,这样可以提高系统效率。
6)SDRAM控制器,用于连接片外64MB同步动态随机访问存储器,以便于为程序提供运行环境。
7)UART0和UART1通过电平转换芯片(MAX3232)转换成RS-232电平以便与服务器通过串口通信。
8)WD Timer定时器,在这里作为看门狗定时器使用,以便提高仲裁器的可靠性,在仲裁器中运行的程序出现故障时,它给系统提供复位信号。
该系统是使用Quartus II进行硬件设计的,用其中的SOPC Builder工具[4]进行Avalon架构设计,图3是仲裁器的Avalon架构的设计最终界面。由于篇幅有限,此处仅提供UART0、UART1和IDE硬盘相关的部分原理图,如图4所示。
图3 SOPC Builder设计界面
图4 部分原理图
4.2 软件设计思想
以上主要介绍了硬件部分的设计思想,下面简单描述一下软件开发的相关思想。该仲裁器的软件开发使用Nios IDE[6](Nios集成开发环境),主要包括如下模块:
1)状态获取模块:该模块被Timer1定时器中断例程定期调用,主要用于获取服务器的当前状态,其设计流程如图5所示:
图5 状态获取模块流程
2)显示模块:用于输出用户关心的信息,如根据服务器的状态用不同颜色点亮双色发光二极管、显示当前时间间隔等级以及控制蜂鸣器报警。
3)通讯模块:主要用于与服务器进行通讯,以便给服务器发送命令以及获得工作服务器的同步信息并把同步信息写入硬盘中。
4)按键处理模块:用于处理用户按键,根据不同的按键进行不同的控制,如:开/关继电器以及设置时间间隔等级。
5)硬盘访问模块:用于提供对硬盘进行读写操作的函数,以便需要操作硬盘的模块调用。
6)读写Flash的模块:用于读取/修改仲裁器的相关参数,如:各服务器运行时间,检测服务器状态的时间间隔等。
5 结 论
本文提出的软硬件设计思想经实践证明是可行的,并且在实际的系统中工作良好。该思想可以进一步推广到多机容错系统中。在多机系统中,我们在定制好各台机器的工作计划后,就可以利用本文提到的给每台服务器一个计划运行时间这一思想来解决实际问题。另外,使用Nios软核处理器,可以定制很多的UART口,这一点就远远优于需要扩展串口电路的普通单片机,从而在硬件设计和软件设计上大大降低了难度。
本文作者创新点:1) 采用SOC(系统级芯片)设计出温备份高速仲裁器。2) 将同步信息放到了仲裁器中。这样,所有同步信息就不依赖于工作设备(如PC机),所以即使工作设备出现故障也无妨,这样就大大提高了系统的可靠性。3) 能够对工作设备进行计划定制,传统的温备份仲裁器没有这一功能。
参考文献
[1] 王仲生.智能故障诊断与容错控制[M].西安:西北工业大学出版社,2005。
[2] 潘松,黄继业,曾毓.SOPC技术实用教程[M].北京:清华大学出版社,2005。
[3] 宋保维,系统可靠性设计与分析.西安:西北工业大学出版社,2000。
[4] Sylvain Poussier, Hassan Rabah, Serge Weber.SOPC-based Embedded Smart Strain Gage Sensor. Lecture Notes in Computer Science[J],2002,2438:1131-1132。
[5] 徐光辉,程东旭等.基于FPGA的嵌入式开发与应用[M].北京:电子工业出版社,2006。
[6] 郭书军,王玉花, 葛纫秋.嵌入式处理器原理及应用——Nios系统设计和C语言编程[M].北京:清华大学出版社,2004。
[7] 沙占友,孟志永,王彦朋.单片机外围电路设计(第2版)[M].北京:电子工业出版社,2006。
[8] 王俊卿,杨扬,刘庆文.基于NIOS软核处理器的uClinux的移植[J].微计算机信息,2005,21-1:123-124。