实现应用高可用性的方法和装置转让专利

申请号 : CN200910127589.0

文献号 : CN101847148B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 钟虓杨杰邱杰李影

申请人 : 国际商业机器公司

摘要 :

公开了一种用于实现应用高可用性的方法和装置,其中应用分别被安装在第一节点和第二节点上,第一节点用作活动节点,第二节点用作备用节点,该方法包括:在应用在活动节点上的运行过程中监视应用对文件的访问操作;如果应用在对文件的访问操作过程中对文件进行更新,则将所监视的应用对文件的所述更新从活动节点复制到备用节点可访问的存储设备;探测应用在活动节点上的运行;以及响应于探测到应用在活动节点上的运行发生故障,将活动节点切换到第二节点,并启动第二节点上的应用。

权利要求 :

1.一种用于实现应用高可用性的方法,其中应用分别被安装在第一节点和第二节点上,第一节点用作活动节点,第二节点用作备用节点,该方法包括:在应用在活动节点上的运行过程中监视应用对文件的访问操作;

如果应用在对文件的访问操作过程中对文件进行更新,则将所监视的应用对文件的所述更新从活动节点复制到备用节点可访问的存储设备;

探测应用在活动节点上的运行;以及

响应于探测到应用在活动节点上的运行发生故障,将活动节点切换到第二节点,并启动第二节点上的应用,其中,在第一节点上创建有第一子文件系统并且第一专用块设备被挂接在第一子文件系统上,在第二节点上创建有第二子文件系统并且第二专用块设备被挂接在第二子文件系统上,且该方法还包括:将所监视的应用对文件的所述更新重定向到第一子文件系统,

且所述将所监视的应用对文件的所述更新从活动节点复制到备用节点可访问的存储设备包括:将第一专用块设备中的更新复制到第二专用块设备中,

其中,所述方法还包括判断应用是否为高可用性应用,且所述将所监视的应用对文件的所述更新重定向到第一子文件系统以及将第一专用块设备中的更新复制到第二专用块设备中是响应于判断应用为高可用性应用执行的。

2.根据权利要求1的方法,其中所述将第一专用块设备中的更新复制到第二专用块设备是由挂接到操作系统中的磁盘操作挂钩程序实现的,且每当将对文件的更新写入第一专用块设备时,该挂钩程序被启动。

3.根据权利要求1的方法,其中,所述将所监视的应用对文件的所述更新重定向到第一子文件系统包括:响应于所监视的应用对所述第一子文件系统之外的文件的第一次更新,将该文件从所述第一子文件系统之外复制到所述第一子文件系统之内,并在内存中创建与所述第一子文件系统之内的复制文件相关联的文件描述符的文件数据结构;以及使用所述文件数据结构将所监视的应用对所述第一子文件系统之外的文件的更新写入所述第一子文件系统之内的复制文件。

4.根据权利要求1的方法,所述判断应用是否为高可用性应用包括:响应于任何应用由一专用的启动器启动,将该应用的标识注册到注册列表中;

响应于接收到来自一应用的文件访问请求,判断该应用的标识是否在所述注册列表中;以及响应于判断该应用的标识在所述注册列表中,判断该应用是高可用性应用。

5.根据权利要求1-2中任何一个的方法,其中,所述监视应用对文件的访问操作以及将应用对文件的更新重定向到所述第一子文件系统是通过挂接到操作系统的文件访问系统调用的文件操作挂钩程序实现的。

6.根据权利要求1的方法,其中,所述应用分别安装在所述第一子文件系统和所述第二子文件系统中,且所述将所监视的应用对文件的所述更新重定向到第一子文件系统包括:将所监视的应用对所述第一子文件系统之外的文件的访问操作重定向到第一子文件系统。

7.一种用于实现应用高可用性的装置,其中,应用分别被安装在第一节点和第二节点,第一节点用作活动节点,第二节点用作备用节点,该装置包括:监视模块,用于在应用在活动节点上的运行过程中监视应用对文件的访问操作;

复制模块,用于如果应用在对文件的访问操作过程中对文件进行更新,则将所监视的应用对文件的所述更新从活动节点复制到备用节点可访问的存储设备;

探测模块,用于探测应用在活动节点上的运行;以及

切换模块,用于响应于探测到应用在活动节点上的运行发生故障,将活动节点切换到第二节点,并启动第二节点上的应用,其中,在第一节点上创建有第一子文件系统并且第一专用块设备被挂接在第一子文件系统上,在第二节点上创建有第二子文件系统并且第二专用块设备被挂接在第二子文件系统上,且该装置还包括:重定向模块,用于将所监视的应用对文件的所述更新重定向到第一子文件系统,且所述复制模块用于:将第一专用块设备中的更新复制到第二专用块设备中,

其中,所述重定向模块还包括:用于判断应用是否为高可用性应用的装置,且所述重定向模块将所监视的应用对文件的所述更新重定向到第一子文件系统以及所述复制模块将第一专用块设备中的更新复制到第二专用块设备中是响应于判断应用为高可用性应用执行的。

8.根据权利要求7的装置,其中所述复制模块是由挂接到操作系统中的磁盘操作挂钩程序实现的,且每当将对文件的更新写入第一专用块设备时,该挂钩程序被启动。

9.根据权利要求7的装置,其中,所述重定向模块用于:

响应于所监视的应用对所述第一子文件系统之外的文件的第一次更新,将该文件从所述第一子文件系统之外复制到所述第一子文件系统之内,并在内存中创建与所述第一子文件系统之内的复制文件相关联的文件描述符的文件数据结构;以及使用所述文件数据结构将所监视的应用对所述第一子文件系统之外的文件的更新写入所述第一子文件系统之内的复制文件。

10.根据权利要求7的装置,所述用于判断应用是否为高可用性应用的装置包括:用于响应于任何应用由一专用的启动器启动,将该应用的标识注册到注册列表中的装置;

用于响应于接收到来自一应用的文件访问请求,判断该应用的标识是否在所述注册列表中的装置;以及用于响应于判断该应用的标识在所述注册列表中,判断该应用是高可用性应用的装置。

11.根据权利要求7-8中任何一个的装置,其中,所述监视模块和重定向模块是通过挂接到操作系统的文件访问系统调用的文件操作挂钩程序实现的。

12.根据权利要求7的装置,其中,所述应用分别被安装在所述第一子文件系统和第二子文件系统中,且所述重定向模块用于:将所监视的应用对所述第一子文件系统之外的文件的访问操作重定向到第一子文件系统。

说明书 :

实现应用高可用性的方法和装置

技术领域

[0001] 本发明涉及计算机领域,具体涉及应用的高可用性,更具体涉及一种用于实现应用的高可用性的方法和装置。

背景技术

[0002] 应用的高可用性(HA)是指应用可以持续不间断地为用户提供访问的能力,它对企业来说是至关重要的。
[0003] 图1示意性地示出了现有技术中用于实现应用的高可用性的解决方案。其中,在第一服务器和第二服务器上分别安装有相同的应用,第一服务器用作当前服务器,第二服务器用作备用服务器。在应用中包含有(或者与应用相关联地存在着)一个特定于该应用的用于HA的文件管理机制,该机制用于监视应用在运行过程中对磁盘文件的访问操作,并将应用对磁盘文件的更改复制到备用服务器上或者当前服务器与备用服务器之间的一共享存储器中。在与第一服务器和第二服务器连接的第三服务器上安装有HA管理器(HA管理器也可以直接安装到第一服务器和第二服务器上),该HA管理器用于监视当前服务器上的应用的运行状态,以及在应用发生故障时启动备用服务器上的应用,并将用于该应用的IP地址切换到备用服务器上。在这种解决方案中,只有应用所包含的特定于应用的用于HA的文件管理机制才知道应用的文件结构及其访问操作,并能够进行更新文件的复制,而HA管理器并不知道应用的文件结构。
[0004] 也就是说,在现有技术中,不同的应用具有其自己的HA机制,而不存在通用的HA机制。例如,大型数据库软件DB2可以将数据储存库配置到一个用于HA的特定目录中,WAS(WebSphere应用服务器)可以将事务日志配置到一个用于HA的特定目录中,再例如,IBM公司的TivoliSystem Automation(TSA),Veritas Cluster实际上是具有策略支持的脚本执行框架,它提供了针对特定应用的HA自动化。然而,却不能将这种HA机制应用到一般的应用中。这是由于不同的应用在运行中所访问的文件是不同的,其文件目录结构也是不同的,并且一个应用在运行过程中所访问的文件往往分布在应用的安装目录之内和之外的多处,例如Apache包括如下用于配置和数据的不同路径:/etc/apache2-httpd配置(不可改变);/etc/sysconfig/apache2-包含配置文件;/usr/share/apache2-所有与apache相关的数据,因此,在现有技术中不存在一个通用的HA机制,能够把不同应用在运行过程中所更新的文件复制到备用服务器上。
[0005] 现有技术的这种解决方案要求应用的设计者具有很高的设计技能,并付出很大的努力来设计HA机制,也要求应用的开发者具有很高的开发技能,并付出很大的努力来实现HA机制,此外还要求应用的部署者理解特定于应用的实现,并付出很大努力来正确地配置应用。

发明内容

[0006] 为解决现有技术中的上述问题,提出了本发明的解决方案。
[0007] 在本发明的一个方面,提出了一种用于实现应用高可用性的方法,其中应用分别被安装在第一节点和第二节点上,第一节点用作活动节点,第二节点用作备用节点,该方法包括:在应用在活动节点上的运行过程中监视应用对文件的访问操作;如果应用在对文件的访问操作过程中对文件进行更新,则将所监视的应用对文件的所述更新从活动节点复制到备用节点可访问的存储设备;探测应用在活动节点上的运行;以及响应于探测到应用在活动节点上的运行发生故障,将活动节点切换到第二节点,并启动第二节点上的应用。
[0008] 在本发明的另一个方面,提出了一种用于实现应用高可用性的装置,其中,应用分别被安装在第一节点和第二节点,第一节点用作活动节点,第二节点用作备用节点,该装置包括:监视模块,用于在应用在活动节点上的运行过程中监视应用对文件的访问操作;复制模块,用于如果应用在对文件的访问操作过程中对文件进行更新,则将所监视的应用对文件的所述更新从活动节点复制到备用节点可访问的存储设备;探测模块,用于探测应用在活动节点上的运行;以及切换模块,用于响应于探测到应用在活动节点上的运行发生故障,将活动节点切换到第二节点,并启动第二节点上的应用。
[0009] 本发明的解决方案消除了应用的设计者和开发者进行HA设计和开发的负担,也消除了在部署应用时进行针对HA的配置的负担。

附图说明

[0010] 所附权利要求中阐述了被认为是本发明的特点的创造性特征。但是,通过参照附图阅读下面对说明性实施例的详细说明可更好地理解发明本身以及其优选使用模式、目标、特征以及优点,在附图中:
[0011] 图1示意性地示出了现有技术中用于实现应用的高可用性的技术方案;
[0012] 图2示意性地示出了本发明的基本概念;
[0013] 图3示出了本发明的实施例的体系结构;
[0014] 图4示出了根据本发明的实施例的应用启动器的具体实施方式;
[0015] 图5示出了根据本发明的实施例的文件重定向器的工作示意图;
[0016] 图6示出了根据本发明的一个实施例的文件重定向器的具体实施方式;
[0017] 图7示出了根据本发明的一个实施例由挂钩程序实现的文件重定向器执行的操作的流程;
[0018] 图8示出了根据本发明的另一个实施例的文件重定向器的具体实施方式;
[0019] 图9示出了根据本发明的另一个实施例由挂钩程序实现的文件重定向器执行的操作的流程;
[0020] 图10示出了根据本发明的实施例执行的块复制的示意图;以及
[0021] 图11示出了本发明的另一实施例的示意图。

具体实施方式

[0022] 下面参照附图来说明本发明的实施例。在下面的说明中,阐述了许多具体细节以便更全面地了解本发明。但是,对于本技术领域内的技术人员明显的是,本发明的实现可不具有这些具体细节中的一些。此外,应当理解的是,本发明并不限于所介绍的特定实施例。相反,可以考虑用下面的特征和要素的任意组合来实施本发明,而无论它们是否涉及不同的实施例。因此,下面的方面、特征、实施例和优点仅作说明之用而不应被看作是所附权利要求的要素或限定,除非权利要求中明确提出。
[0023] 图2示意性地示出了本发明的基本概念。如图所示,在活动服务器和备用服务器上分别安装有HA应用,本发明的用于实现HA的装置也分别安装在活动服务器和备用服务器上。本发明的用于实现HA的装置不是特定于应用的,而是位于应用之外,并可用于实现任何应用的高可用性。在活动服务器上,在应用的运行过程中,用于实现HA的装置以透明的方式分别与应用、OS文件系统以及磁盘进行交互,负责更新文件的复制、IP地址切换及应用的启动。具体地,所述交互包括:在应用在活动服务器上运行过程中监视应用对文件的访问;将所监视的应用对文件的更新从活动服务器复制到备用服务器或者活动服务器与备用服务器之间的共享存储设备;探测应用在活动服务器上的运行;以及响应于探测到应用在活动服务器上的运行发生故障,切换到备用服务器,并启动备用服务器上的应用。
[0024] 图3示出了本发明的实施例的体系结构。如图所示,在活动节点和备用节点上分别安装有相同的服务器应用,并且分别安装有相同的本发明的用于实现应用高可性的装置中的各模块。这样,当响应于活动节点发生故障将活动节点切换到备用节点,并在备用节点上启动应用之后,备用节点就成为新的活动节点,而原活动节点可在故障恢复后成为新的备用节点。
[0025] 本发明的用于实现高可用性的装置包含位于活动节点和备用节点上的用户空间以及内核空间中的各模块。在用户空间中,有应用启动器301。在内核空间中,有文件重定向器302和块复制器303。
[0026] 应用启动器301用于启动应用,并注册被启动的应用的标识例如进程ID(PID),以便由文件重定向器302使用。也就是说,每一个由应用启动器301启动的应用的标识都将被注册,从而可被视为高可用性应用。应用启动器301还用于在应用已故障转接到备用节点后探测应用在备用节点(此时已成为新的活动节点)上的运行,并在新的活动节点上应用的运行发生故障时,启动原活动节点上的应用。
[0027] 文件重定向器302用于通过文件操作挂钩程序栏截应用在运行过程中的文件访问系统调用,根据该应用的应用标识判断该应用是否为已注册的由应用启动器301启动的应用即HA应用,并响应于判断该应用为HA应用,将应用的文件访问操作重定向到一个事先创建的复制子文件系统中。对复制子文件系统的写操作都会被记录到与块复制器303相关联的块设备中。
[0028] 块复制器303用于监视复制子文件系统中的对块设备的写操作,并以块复制(block replication)的方式将挂接到复制子文件系统的块设备中的内容复制到备用节点中相应的块设备中。所述块设备可以为一个磁盘,也可以为一个逻辑分区。可以在将应用安装到服务器上之前在服务器上创建复制子文件系统,并随即将该块设备挂接到该复制子文件系统,并且创建复制子文件系统以及将块设备挂接到复制子文件系统应当在活动节点和备用节点这两处进行。块复制器303可以通过挂钩到操作系统中的磁盘操作挂钩程序来实现。例如,在Linux系统中利用kprobe将磁盘操作挂钩程序挂载到ll_rw_block0函数上。这样,每当文件系统通过调用写磁盘函数将对文件的更新写入块设备时,该挂钩程序被启动。如果判断所写入的决设备是挂接到复制子文件系统的块设备,则该挂钩程序将对活动节点上的块设备的数据更新远程复制到备用节点上的块设备。该挂钩程序可以利用本领域中所知的多种远程磁盘同步工具或方法中的任何一种来进行块设备的远程复制。
[0029] 图4示出了根据本发明的实施例的应用启动器的具体实施方式。如图所示,应用启动器301位于每一个节点上,并且包括应用管理器401,存储管理器402,IP切换器403和探测器404。
[0030] 应用管理器401用于启动和终止应用。可以将应用的路径,可执行文件名以及运行参数通过命令行选项或者配置文件传递给应用管理器401,应用管理器401根据这些信息创建子进程启动应用,得到该应用的进程ID。并可凭此进程ID在需要的情况下终止应用运行。
[0031] 存储管理器402用于将应用的标识例如进程ID注册到内核空间预分配的注册列表中,以由文件重定向器302用于判断该应用是否为HA应用。
[0032] IP切换器403用于通过网卡驱动程序修改所在节点的IP地址,例如,备用节点上的IP切换器403响应于探测器404探测到活动节点上的应用故障,将备用节点的IP地址修改为活动节点的IP地址,或者活动节点上的IP切换器403响应于探测器404探测到备用节点上的已故障转换的应用的运行再次发生故障,将活动节点的IP地址修改为原来的IP地址以便再次进行故障转接。
[0033] 探测器404用于探测另一节点上的应用的运行状态,并在另一节点上的应用发生故障时,开始故障转接过程,包括通过应用管理器401启动所在节点上的应用,通过IP切换器403将用于该应用的IP地址切换到所在节点。探测器404可以使用本领域中所知的多种探测方法或工具中的任何一种来探测另一节点上的应用的运行状态。
[0034] 尽管在图4以及以上描述中仅示出和说明了一个节点上的各模块所执行的操作,但显而易见的是,当另一个节点成为活动节点时,该另一个节点上的各模块可执行相同的操作。其中备用节点为活动节点的镜像,为方便说明,相关附图以及说明书中只是描述了备用节点相关细节。但本领域技术人员根据对活动节点的描述完全明了备用节点转换为活动节点时的相关操作。
[0035] 图5示出了根据本发明的实施例的文件重定向器302的工作示意图。如图右上部分所示,在文件系统中已创建了一用于复制的子文件系统。根据本发明的一个实施例,在应用安装时,直接将应用安装在该复制子文件系统中。根据本发明的另一个实施例,在应用安装时,不需要将应用安装在该子文件系统中,而是可以将应用安装在该子文件系统之外。此外,应指出的是,在文件系统中创建复制子文件系统,以及将应用安装在该复制子文件系统之内或之外需要在活动节点和备用节点两者之中相对应地进行。也就是说,应当在活动节点和备用节点两者中分别创建复制子文件系统;并且如果在活动节点中将应用安装在复制子文件系统之内,在备用节点中也应当将应用安装在复制子文件系统之内;而如果在活动节点中将应用安装在复制子文件系统之外,在备用节点中也应当将应用安装在复制子文件系统之外。
[0036] 文件重定向器302通过挂钩程序拦截应用的文件访问系统调用,包括文件打开、文件读和文件写,根据内核空间中的HA注册列表以及该应用的应用标识判断该应用是否为HA应用,并响应于判断该应用为HA应用,将应用对文件系统中位于复制子文件系统之外的文件的访问重定向到复制子文件系统。在将应用直接安装在复制子文件系统中的本发明的实施例中,只需要将应用对应用的安装目录之外的文件的访问重定向到该复制子文件系统中。而在将应用安装在复制子文件系统之外的本发明的实施例中,需要将应用对所有文件的访问重定向到该复制子文件系统中。例如,如图所示,假设复制子文件系统的路径名为DSS,应用在运行时访问了文件系统中路径为/Local/temp的文件,则文件重定向器302将对该文件的访问重定向到复制子文件系统中的具有相应路径DSS/Local/temp的文件。
[0037] 图6示出了根据本发明的一个实施例的文件重定向器302的具体实施方式。如图所示,应用在运行过程中的文件访问操作(包括文件打开、文件读和文件写)将产生相应的文件访问系统调用。本发明的该实施例利用了操作系统所提供的挂钩机制来拦截这些文件访问系统调用,并通过插入每一个文件访问系统调用的挂钩程序实现文件重定向器302。例如,在Linux中利用Kprobe机制,对文件打开(sys_open),读(sys_read)和写(sys_write)操作进拦截,并插入相应的文件操作挂钩程序。对于文件打开系统调用,挂钩程序将首先检查要打开的文件的路径,如果该文件的路径位于复制子文件系统之外,则在操作系统在内存中创建的该文件的文件描述符的文件数据结构中添加一外部标志。对于针对一文件的第一次文件写系统调用,挂钩程序检查该文件的文件数据结构中是否存在外部标志,如果存在外部标志,则将该文件从复制子文件系统的外部复制到复制子文件系统的内部,例如将文件/local/temp复制到DSS/local/temp,并在内存中创建与复制子文件系统内的该复制文件相关联的文件描述符的文件数据结构,称为影子文件数据结构,然后在原文件描述符的文件数据结构中添加一指向该影子文件数据结构指针,称为影子指针。此后,每当再次拦截到针对该文件的文件写系统调用时,除了利用该文件的文件描述符的文件数据结构写入位于复制子文件系统外部的该文件之外,还通过该文件数据结构中的影子指针找到影子文件数据结构,并利用影子文件数据结构写入复制子文件系统中的复制文件。以这种方式,复制子文件系统中将保存应用所更新的所有更新文件。除了在原文件描述数据结构中添加影子指针外,另一种可能的办法是在内核空间中创建一个影子文件关联表。当影子文件数据结构被创建的时候,在关联表中添加其和原文件描述数据结构的关联关系。在写文件的时候,通过关联表中查找与当前文件关联的影子文件数据结构。
[0038] 现参照图7,其更具体地示出了根据本发明的一个实施例由文件操作挂钩程序实现的文件重定向器执行的操作的流程。
[0039] 当文件操作挂钩程序由应用在运行过程中产生的文件访问系统调用所启动后,首先在步骤701检查该应用的进程ID,根据HA注册列表判断该进程ID是否属于已注册的由应用启动器301所启动的应用的进程ID。
[0040] 如果该判断为否,表明该应用不是HA应用,则进行到步骤710,从挂钩程序返回到文件访问系统调用,以进行正常的文件打开处理。
[0041] 如果该判断为是,表明该应用是HA应用,则进行到步骤702,进一步判断该文件访问系统调用的类型。
[0042] 响应于在步骤702判断该文件访问系统调用的类型为文件打开,进行到步骤703,进一步判断要打开的文件的路径是否位于前述所创建的复制子文件系统之外。
[0043] 如果步骤703的判断为否,表明要打开的文件的路径位于所创建的复制子文件系统之内,则进行到步骤710,从挂钩程序返回到文件访问系统调用,以进行正常的文件打开处理。
[0044] 如果步骤703的判断为是,表明要打开的文件的路径位于所创建的复制子文件系统之外,则进行到步骤704,向操作系统在内存中建立的用于该文件的文件描述符的文件数据结构中添加一外部标志。
[0045] 然后,在步骤705判断在所述复制子文件系统中是否存在具有与该文件的路径相对应的路径的文件,例如,假设所要打开的文件路径为/Local/temp,判断在复制子文件系统中是否存在路径为DSS/Local/temp的文件。
[0046] 如果该判断为是,则进行到步骤706,判断内存中是否存在对应于复制子文件系统中的相应文件的文件数据结构,也称为影子文件数据结构。
[0047] 如果在步骤706中的判断为否,即内存中不存在影子文件数据结构,则在步骤707将复制子文件系统中的文件复制到原目录中,即复制到复制子文件系统之外的相应路径中,例如将DSS/Local/temp文件复制到/Local/temp。
[0048] 然后,在步骤708中在内存中建立复制子文件系统中的相应文件的文件数据结构,即影子文件数据结构。所建立的该文件数据结构中包含的数据项是特定于操作系统的,且通常包括文件路径、虚拟存储位置信息等。
[0049] 接着,在步骤709中,在原文件数据结构(即对应于所打开的文件的文件描述符的文件数据结构)中添加一个指向所创建的影子文件数据结构的影子指针。
[0050] 如果步骤706的判断为是,即内存中已存在影子文件数据结构,或者步骤705的判断为否,即复制子文件系统中不存在具有与该文件的路径相对应的路径的文件,则进行到步骤710,由挂钩程序返回到文件访问系统调用。
[0051] 另一方面,响应于在步骤702判断该文件访问系统调用的类型为文件读,则进行到步骤710,由挂钩程序返回到文件访问系统调用,以进行正常的文件读取处理。
[0052] 再一方面,响应于在步骤702判断该文件访问系统调用的类型为文件写,则进行到步骤711,判断操作系统在内存中建立的用于该文件的文件描述符的文件数据结构中是否存在外部标记。
[0053] 响应于在步骤711的判断为否,则进行到步骤710,由挂钩程序返回到文件访问系统调用,以进行正常的文件读取处理。
[0054] 响应于在步骤711的判断为是,则进行到步骤712,进一步判断所述文件数据结构中是否存在影子指针。
[0055] 响应于在步骤712的判断为是,则进行到步骤713,利用所述文件数据结构中的影子指针所指向的影子数据结构来写入复制子文件系统中的相应文件。
[0056] 然后,进行到步骤710,由挂钩程序返回到文件访问系统调用,以进行正常的文件写处理。
[0057] 响应于在步骤712的判断为否,则进行到步骤714,将所要写入的文件从原路径下复制到复制文件子中相应的路径下。
[0058] 然后,在步骤715,创建对应于复制子文件系统中的复制文件的文件描述符的文件数据结构,即影子文件数据结构。
[0059] 接着,在步骤716,在对应于所要写入的文件的文件数据结构中添加指向影子文件数据结构的指针,即影子指针。
[0060] 接着,在步骤717,针对复制子文件系统中的复制文件执行写入操作。
[0061] 然后,进行到步骤710,由挂钩程序返回到文件访问系统调用,以进行正常的文件写处理。
[0062] 图8示出了根据本发明的另一个实施例的文件重定向器的具体实施方式。如图所示,通过插入每一个文件访问系统调用的文件操作挂钩程序实现文件重定向器。对于文件打开系统调用,文件操作挂钩程序将首先检查要打开的文件的路径,如果该文件的路径位于复制子文件系统之外,则在操作系统在内存中创建的该文件的文件描述符的文件数据结构中添加一外部标志。对于文件写系统调用,文件操作挂钩程序检查该文件的文件数据结构中是否存在外部标志,如果存在外部标志,则将该文件从复制子文件系统的外部复制到复制子文件系统的内部,例如将文件/local/temp复制到DSS/local/temp,并修改该文件的文件描述符的文件数据结构,使其与复制子文件系统内的复制文件相关联。此后,每当再次写入该文件时,都将利用修改后的文件描述符的文件数据结构直接写入复制子文件系统内的复制文件,而不再写入复制子文件系统外部的原来文件。以这种方式,复制子文件系统中将保存应用对文件所作的所有更新。
[0063] 现参照图9,其更具体地示出了根据本发明的该另一个实施例由文件操作挂钩程序实现的文件重定向器执行的操作的流程。
[0064] 如图所示,当挂钩程序由应用在运行过程中产生的文件访问系统调用所启动后,首先在步骤901检查该应用的进程ID,根据HA注册列表判断该进程ID是否属于已注册的由应用启动器301所启动的应用的进程ID。
[0065] 如果该判断为否,表明该应用不是HA应用,则进行到步骤907,从挂钩程序返回到文件访问系统调用,以进行正常的文件访问处理。
[0066] 如果该判断为是,表明该应用是HA应用,则进行到步骤902,进一步判断该文件访问系统调用的类型。
[0067] 响应于在步骤902判断该文件访问系统调用的类型为文件打开,进行到步骤903,进一步判断要打开的文件的路径是否位于前述所创建的复制子文件系统之外。
[0068] 如果步骤903的判断为否,表明要打开的文件的路径位于所创建的复制子文件系统之内,则进行到步骤907,从挂钩程序返回到文件访问系统调用,以进行正常的文件打开处理。
[0069] 如果步骤903的判断为是,表明要打开的文件的路径位于所创建的复制子文件系统之外,则进行到步骤904,向操作系统在内存中建立的用于该文件的文件描述符的文件数据结构中添加一外部标志。
[0070] 然后,在步骤905判断在所述复制子文件系统中是否存在具有与该文件的路径相对应的路径的文件,例如,假设所要打开的文件路径为/Local/temp,判断在复制子文件系统中是否存在路径为DSS/Local/temp的文件。
[0071] 如果步骤905的判断为否,则进行到步骤907,从挂钩程序返回到文件访问系统调用,以进行正常的文件打开处理。
[0072] 如果步骤905的判断为是,则进行到步骤906,修改该文件的文件数据结构,例如修改文件数据结构中的虚拟存储位置信息,以使其与复制子文件系统中的文件相关联。
[0073] 然后进行到步骤907,从挂钩程序返回到文件访问系统调用,以进行正常的文件打开处理。
[0074] 另一方面,响应于在步骤902判断系统调用的类型为文件读,进行到步骤907,从挂钩程序返回到文件访问系统调用,以进行正常的文件读处理。
[0075] 而响应于在步骤902判断系统调用的类型为文件写,进行到步骤908,判断操作系统在内存中建立的用于该文件的文件描述符的文件数据结构中是否包含外部标记。
[0076] 响应于步骤908的判断为否,则进行到步骤907,从挂钩程序返回到文件访问系统调用,以进行正常的文件读处理。
[0077] 响应于步骤908的判断为是,则进行到步骤909,判断所述文件数据结构是否与复制子文件系统中的文件相关联。
[0078] 如果步骤909的判断为是,则进行到步骤907,从挂钩程序返回到文件访问系统调用,以进行正常的文件读处理,包括利用所述文件数据结构写入复制子文件系统中的文件。
[0079] 如果步骤909的判断为否,则进行到步骤910,将所要写入的文件从原路径下复制到复制子文件系统中相应的路径下。
[0080] 然后,在步骤911,修改所述文件数据结构,例如修改文件数据结构中的虚拟存储位置信息,以使其与复制子文件系统中的复制文件相关联。
[0081] 对于操作系统允许同时多次打开同一个文件的情况,则可能在内存中存在对应于同一个文件的多个文件描述符及其文件数据结构,因此在步骤911中需要修改对应于该文件的所有文件描述符的文件数据结构,以使它们都与复制子文件系统中的复制文件相关联。这可以通过下述方式实现:在内存中维护一个外部文件列表,每当在步骤904中向文件描述符的文件数据结构添加外部标志时,也向该外部文件列表添加该文件描述符,这样该外部文件列表将记录所有被打开的外部文件的所有文件描述符;当在步骤911中修改当前文件的当前文件描述符的文件数据结构时,在该外部文件列表中查找当前文件的所有文件描述符,并修改所找到的所有文件描述符的文件数据结构,以使它们都与复制子文件系统中的复制文件相关联。
[0082] 然后,进行到步骤907,由挂钩程序返回到文件访问系统调用,以进行正常的文件读处理,包括利用所述文件数据结构写入复制子文件系统中的复制文件。
[0083] 应指出的是,以上描述的根据本发明的实施例的文件重定向器302的具体实施方式及其所执行的操作流程的细节,仅仅是示例性说明,而不是对本发明的限制。在本发明的其他实施例中,文件重定向器302可采用其他实施方式,并且其执行的操作流程可具有更多、更少或不同的步骤,或不同顺序的步骤。事实上,只要文件重定向器302能够将应用对文件的更新复制或重定向到一复制子文件系统,以便远程块复制到备用节点,则都处于本发明的精神和范围之内。
[0084] 图10示出了根据本发明的实施例执行的块复制的示意图。如图所示,在活动节点上所创建的复制子文件系统为/var/HA,逻辑分区/device/hda3被挂接到该复制子文件系统/var/HA上。在备用节点上所创建的复制子文件系统为/var/HA,逻辑分区/device/hda2被挂接到该复制子文件系统/var/HA上。当活动服务器中文件系统通过调用写磁盘函数将对文件的更新写入磁盘/device/hda3时,挂载在该函数上的块复制程序启动。由块复制器303所执行的块复制过程将把活动服务器磁盘/device/hda3上的更新复制到备用服务器的磁盘/device/hda2上,从而使两个磁盘上的数据完全一致,这样就实现了使活动节点的复制子文件系统/var/HA中的内容与备用节点的复制子文件系统/var/HA中的内容完全一致。
[0085] 图11示出了本发明的另一实施例的示意图。在该实施例中,在活动节点和备用节点之间共享的存储设备分别挂接到活动节点上的复制子文件系统和备用节点上的复制子文件系统,这样,当活动节点上的应用在运行过程中将对文件的更新写入复制子文件系统后,备用节点上的应用可以在启动后直接访问共享存储设备中的更新数据。在这样的实施例中,不需要进行块复制,因此用于实现应用HA的装置中将不包括块复制器303。
[0086] 以上描述了根据本发明的用于实现应用高可用性的装置及其各模块的示例性实现方式,应指出的是,以上描述仅为示例,而不是对本发明的限制。在本发明的其他实施例中,该装置可具有不同的模块,且各模块可具有不同的实现方式。例如,在本发明的一些实施例中,该装置可不包括文件重定向器302和块复制器303,而是在监视到活动节点上应用对文件的更新后,直接将对文件的更新远程复制到备用节点上的相应文件。此外,可以将以上所描述的各模块和子模块及其功能进行不同的划分和组合。例如,所述应用启动器301中的应用管理器401、存储管理器402、IP切换器403、探测器404都可以是单独的模块,文件重定向器302的监视功能也可由单独的监视模块来完成。
[0087] 本发明可以硬件、软件、或硬件与软件的结合的方式实现。本发明可以集中的方式在一个计算机系统中实现,或以分布方式实现,在这种分布方式中,不同的部件分布在若干互连的计算机系统中。适于执行本文中描述的方法的任何计算机系统或其它装置都是合适的。一种典型的硬件和软件的组合可以是带有计算机程序的通用计算机系统,当该计算机程序被加载和执行时,控制该计算机系统而使其执行本发明的方法,并构成本发明的装置。
[0088] 本发明也可体现在计算机程序产品中,该程序产品包含使能实现本文中描述的方法的所有特征,并且当其被加载到计算机系统中时,能够执行所述方法。
[0089] 尽管已参照优选实施例具体示出和说明了本发明,但是本领域内的那些技术人员应理解,可在形式和细节上对其进行各种改变而不会背离本发明的精神和范围。