CN107526659A - 用于失效备援的方法和设备 - Google Patents

用于失效备援的方法和设备 Download PDF

Info

Publication number
CN107526659A
CN107526659A CN201610454922.9A CN201610454922A CN107526659A CN 107526659 A CN107526659 A CN 107526659A CN 201610454922 A CN201610454922 A CN 201610454922A CN 107526659 A CN107526659 A CN 107526659A
Authority
CN
China
Prior art keywords
node
cluster
application
section point
migration
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610454922.9A
Other languages
English (en)
Other versions
CN107526659B (zh
Inventor
彭海林
邹勇
吴鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
EMC Corp
Original Assignee
EMC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by EMC Corp filed Critical EMC Corp
Priority to CN201610454922.9A priority Critical patent/CN107526659B/zh
Priority to US15/627,598 priority patent/US10372565B2/en
Publication of CN107526659A publication Critical patent/CN107526659A/zh
Priority to US16/450,079 priority patent/US11003553B2/en
Application granted granted Critical
Publication of CN107526659B publication Critical patent/CN107526659B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • G06F11/203Failover techniques using migration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2002Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where interconnections or communication control functionality are redundant
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • G06F11/2025Failover techniques using centralised failover control functionality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2043Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant where the redundant components share a common memory address space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/805Real-time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/815Virtual

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Hardware Redundancy (AREA)

Abstract

本公开的实施例公开了用于失效备援的方法和设备。在一个实施例中,提供一种在包括多个异质节点的集群中的第一节点处执行的方法。该方法包括:确定集群中的第二节点处的应用是否发生故障;以及响应于确定应用发生故障,促使与应用相关联的数据和服务从第二节点向集群中的第三节点的迁移,该迁移涉及集群中与第二节点异质的至少一个节点。还公开了在该集群中的第三节点处执行的方法以及相应的设备和计算机程序产品。

Description

用于失效备援的方法和设备
技术领域
本公开的实施例总体上计算机技术领域,并且更具体地,涉及用于失效备援的方法和设备。
背景技术
随着企业数字数据的剧增,通过升级硬件来提高系统性能和容量的纵向扩展方式受限于硬件更新速度已经无法满足客户日益增长的需求。为此,提出了一种通过增加物理设备或者虚拟设备数目而动态升级系统的横向扩展方式。在此使用的术语“物理设备”是指诸如工作站、刀片机、主机、台式计算机、便携式计算机等等物理实体。术语“虚拟设备”是指通过虚拟技术运行于物理实体之上的诸如虚拟机(VM)等的逻辑设备。与纵向扩展方式相比,横向扩展在实时性方面的优势是很明显的。
在横向扩展方式中,例如,可以使用由多个物理设备组成的集群代替单个物理设备来提供服务。继而,可以通过向集群中添加新的物理设备来实现性能和容量等等的进一步提高。然而,这种由物理设备组成的集群系统目前缺少用于集群管理的核心集群基础架构特征,诸如集群成员管理、消息传送、失效备援等等。
除了物理设备的横向扩展,还提出了虚拟设备的横向扩展。例如,常用的软件定义数据中心(SDDC)通常部署在一种类型的虚拟机(VM)上。在本公开的上下文中,一种类型的VM是指基于一种虚拟化平台和架构、与一种虚拟机管理程序相关联的VM。相应地,不同类型的VM基于不同的虚拟化平台和架构,与不同的虚拟机管理程序相关联。在需要系统升级时,可以向SDDC添加该种类型的VM,以实现横向扩展。然而,在这种系统中,运行VM的物理设备通常是独立的。数据无法在不同物理设备之间移动,从而无法实现负载均衡。另外,当某个VM发生故障时,只能在某个物理机上重启另一个VM,这会造成较长时间的服务中断。
发明内容
总体上,本公开的实施例提出用于失效备援的方法和设备。
在第一方面,本公开的实施例提供一种在包括多个异质节点的集群中的第一节点处执行的方法。该方法包括:确定集群中的第二节点处的应用是否发生故障;以及响应于确定应用发生故障,促使与应用相关联的数据和服务从第二节点向集群中的第三节点的迁移,该迁移涉及集群中与第二节点异质的至少一个节点。
在此方面,本公开的实施例还提供一种电子设备。该电子设备包括:处理器以及存储有指令的存储器,该指令在被处理器运行时使得电子设备执行根据此方面的方法。
在此方面,本公开的实施例还提供一种计算机程序产品,其被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,机器可执行指令在被执行时使机器执行根据此方面的方法的步骤。
在第二方面,本公开的实施例提供一种在包括多个异质节点的集群中的第三节点处执行的方法。该方法包括:确定与集群中的第二节点处的应用相关联的数据和服务是否要迁移到第三节点,该迁移涉及集群中与第二节点异质的至少一个节点;以及响应于确定迁移,获取与应用相关联的数据和服务。
在此方面,本公开的实施例还提供一种电子设备。该电子设备包括:处理器以及存储有指令的存储器,该指令在被处理器运行时使得电子设备执行根据此方面的方法。
在此方面,本公开的实施例还提供一种计算机程序产品,其被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,机器可执行指令在被执行时使机器执行根据此方面的方法的步骤。
通过下文描述将会理解,根据本公开的实施例,当集群中的一个节点处的应用发生故障时,可以将与应用相关联的数据和服务从该节点迁移到集群中的另一个节点,该迁移过程涉及异质节点。以此方式,实现了应用的数据和服务在异质节点之间的无缝迁移,显著减少了故障恢复时间和服务中断时间。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
图1示出了本公开的实施例可以实施于其中的示例集群;
图2示出了集群中的各个设备之间的通信和处理过程;
图3示出了根据本公开的某些实施例的在包括异质节点的集群中的节点处实施的示例方法的流程图;
图4示出了根据本公开的某些其他实施例的在包括异质节点的集群中的节点处实施的示例方法的流程图;
图5示出了根据本公开的某些实施例的装置的框图;
图6示出了根据本公开的某些其他实施例的装置的框图;以及
图7示出了一个可以用来实施本公开的实施例的电子设备的示意性框图。
在所有附图中,相同或相似参考数字表示相同或相似元素。
具体实施例
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
在此使用的术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”。其他术语的相关定义将在后文描述中给出。
如上文所述,纵向扩展方式通过升级硬件来提高系统的容量和性能。例如,物理的专用备份设备(PBBA)系统将包括中央处理单元(CPU)、存储器、非易失性存储器(NVRAM)、磁盘和网络等等的硬件、包括操作系统和专有文件系统等等的软件、以及备份能力和特征等组合在单箱物理设备中。在需要升级时,PBBA系统通常更换最新的硬件,诸如新一代的英特尔芯片、更高密度的磁盘、等等。然而,这种升级方式严重受限于硬件更新速度,无法满足例如由于企业数字数据剧增而导致的客户需求的剧增,而且成本往往很高。另外,采用纵向扩展方式,PBBA系统还存在数据去重成本过高、故障恢复时间过长等等问题。
在这种情况下,横向扩展系统日益受到广泛关注。这种系统可以通过动态添加物理或虚拟的个体设备来实现横向扩展。与纵向扩展方式相比,横向扩展在及时性方面的优势是很明显的。如上所述,一种方式是使用由物理设备组成的物理集群代替单箱物理设备来提供服务,继而可以通过向集群中添加新的物理设备来实现系统升级。然而,这种集群系统同样存在故障恢复时间过长的问题。另外,如上所述,这种集群系统目前还缺少能够提供集群管理的核心集群基础架构特征,诸如集群成员管理、消息传送、失效备援等等。
另一种横向扩展方式是使用由VM组成虚拟集群来提供服务。例如,越来越多的企业应用和备份数据源在SDDC上运行,而SDDC通常部署同种类型的VM上。在需要系统升级时,可以向SDDC添加该类型的VM。然而,如上所述,在SDDC中,运行VM的物理设备通常在备份方面是独立的,因而在不同物理设备之间无法进行数据移动以实现负载均衡。而且,这些物理设备在去重方面也通常是独立,因而不能提供全局去重特征来实现较佳的去重率。另外,当VM发生故障时,只能在某个物理机上重启另一个VM。通过虚拟机重启来实现故障恢复的时间仍然很长,而且该重启会引起很长时间的服务中断。
考虑到物理设备和虚拟机、以及不同类型的虚拟机具有各自的优劣势。例如,与物理设备相比,虚拟机虽然升级成本低,但其性能和容量会受限。另外,某种类型的虚拟机可能需要昂贵的许可费,导致使用成本过高。因此,将物理设备以及不同类型的虚拟机一起组成集群将会是有利的。例如,这种集合了物理设备以及不同类型的虚拟机的集群系统可以提供更灵活的使用平台。还可以不限于物理设备和虚拟机、不限于虚拟机管理程序的类型而进行系统扩展。而且,可以将数据保护域跨物理设备和虚拟设备以及跨虚拟机管理程序的类型而扩展。然而,目前并没有构建这种集群的机制。
为了解决这些以及其他潜在问题,本公开的实施例提供一种将集群部署在异质节点的机制。在此使用的术语“节点”是指能够为客户提供服务的任意适当类型的物理设备和虚拟设备。在此使用的术语“异质节点”是指诸如物理设备和虚拟设备的不同类型的节点,或者诸如不同类型的VM的不同类型的节点。在这种集群中,可以以方便灵活和简单快捷的方式来进行系统的横向扩展。
本公开的实施例还提供了一种在这种集群中跨异质节点迁移应用的数据和服务的方法。该方法在集群中的一个节点处的应用发生故障时,可以将与应用相关联的数据和服务从该节点迁移到另一个节点,该迁移过程涉及异质节点。以此方式,实现了应用的数据和服务在异质节点之间的无缝迁移,显著减少了故障恢复时间和服务中断时间。
图1示出了本公开的实施例可以实施于其中的示例集群100。集群100包括三个节点110、120和130。第一节点110是集群100的主节点,而第二节点120和第三节点130是集群100的从节点。这三个节点110、120和130中至少有两个节点彼此异质,它们可以例如经由集群互连网络(未示出)彼此通信。集群互连网络可以是任何目前已知或者将来开发的有线和/或无线的通信介质,包括通信网络、计算机网络和/或进程间通信之类的机器内部通信渠道。图1所示的节点的数目仅仅是出于说明之目的而无意于限制。系统100可以包括任意适当数目的节点。
如图所示,应用(application)在第二节点120处具有一个实例125(称为“第一应用实例125”),并且在第三节点130处具有另一个实例135(称为“第二应用实例135”)。在此使用的术语“实例”(instance)是应用在给定目标环境中的具体化实现。也就是说,当一个应用被部署到一个节点之后,就在该节点上创建了一个应用的实例。
根据本公开的实施例,当第二节点120处的第一应用实例125发生故障时,可以将与应用相关联的数据和服务迁移到第三节点130处的第二应用实例135。第二节点120可以任意适当方式来检测第一应用实例125是否发生了故障。作为示例,如图所示,在某些实施例中,
第二节点120中包括第一服务失效备援单元(SFU)121,其中封装有第一应用实例125以及相关联的进程、库和配置数据等(126)。此外,在某些实施例中,第一SFU 121还封装有第一SFU代理123,其可以与第一应用实例125交互。可以使用现在已有和将来开发的任意适当技术来实现该封装。例如,可以使用诸如Linux容器(LXC)的容器技术。这种容器技术是本领域中已知的,在此不再赘述。
如图所示,第二节点120处的第一应用实例125正在运行。已经为第一应用实例125分配了互联网协议(IP)地址(例如动态IP地址)和存储设备(127)。取决于具体实现,存储设备可以位于第二节点120内部,也可以位于在第二节点120之外、集群100之内,例如位于外部的集群存储池内。存储设备中可以存储与应用相关联的数据以及服务相关信息,服务相关信息例如包括与应用相关联的进程、库和配置信息等等。
此时,第一SFU 121也处于运行状态,其第一SFU代理123正与第一应用实例125通信。通过该通信,第一SFU代理123可以监控第一应用实例125的状态,例如确定第一应用实例125是否发生了故障,后文将对此详述。
根据本公开的实施例,在第二节点120确定第一应用实例125发生了故障之后,可以任意适当方式执行与应用相关联的数据和服务向第三节点130的迁移。如图所示,在某些实施例中,第二节点120中还包括第二集群管理单元128,而第二集群管理单元128可选地包括可以与第一SFU 121中的第一SFU代理123通信的第一SFU模块129。集群管理单元(更具体地,其中包含的SFU模块)能够有效地确保异质节点之间的故障备援。
具体而言,第一SFU代理123在检测到第一应用实例125的故障之后,将故障情况报告给第一SFU模块129。可以任意适当消息来实现该报告。例如,可以使用远程过程调用(Remote Process Call,RPC)消息来发送该报告。这样,第二节点120处的第二集群管理单元128可以获知应用的故障情况。继而,第二集群管理单元128可以通过诸如高速(例如,10GB/s)以太网的集群互连网络来与第一节点110处的第一集群管理单元118以及第三节点130处的第三集群管理单元138通信,以协助进行与应用相关联的数据和服务到第三节点130的迁移。节点之间具体的交互过程将在后文详述。
如图所示,在某些实施例中,应用在第三节点130处的第二应用实例135被封装在第二SFU 131中。同样可以使用诸如容器技术的任意适当技术来实现该封装。此时,第二SFU131和第二应用实例135都处于停止状态。响应于获知与应用相关联的数据和服务将要迁移到本地,在某些实施例中,第三节点130可以例如从与第一应用实例125相关联的存储设备获取数据和服务信息,并且启动第二SFU 131和第二应用实例135。以此方式,可以实现故障应用的数据以及服务的无缝迁移。具体的失效备援过程将在后文详述。
应当理解,上文所描述的仅仅是故障备援的一些示例机制和过程,无意以任何方式限制本公开的范围。故障应用的其他检测方式以及迁移方式也是可行的。例如,第二节点120处的第二集群管理单元128可以直接与第一应用实例125交互,以监控第一应用实例125的故障情况。第二节点120在确定第一应用实例125发生了故障后,可以不经过第一节点110直接与第三节点130交互,以将相关联的数据和服务迁移到第三节点130。
在某些实施例中,集群管理单元118、128和138可以为上层应用定义一组与节点类型无关的应用程序接口(Application Programming Interface,API),使得应用以及相关联的SFU可以无需修改而运行在任意类型的底层物理或虚拟设备之上。如上所述,通过SFU模块,集群管理单元可以监控相应的SFU的可用性和可服务性。下面是用于管理SFU的数据结构和API的一个示例定义:
除此之外,在某些实施例中,集群管理单元118、128和138还可以通过相应的SFU模块对相应的SFU进行如下管理:管理SFU的失效备援相关操作,使SFU启动或停止,管理SFU的相关IP地址和存储设备,等等,后文将对此详述。
除了应用级的失效备援,在某些实施例中,通过集群管理单元还可以实现VM级的失效备援。例如,响应于某个VM发生故障,可以通过相应的集群管理单元在集群中启用相同类型的VM,后文将对此详述。下面是用于VM失效备援的数据结构和API的示例定义:
/*初始化VM管理程序配置和登录*/
uint32_t PHACS_sddc_init_config(PHACS_sddc_type_t type,
PHACS_sddc_config_t*config);
/*获取集群中当前的成员列表*/
uint32_t PHACS_sddc_get_nodes(PHACS_sddc_node_info_t**nodes,uint32_t*nodes_num);
/*启动特定VM*/
uint32_t PHACS_sddc_start_node(const char*nodename);
/*停止特定VM*/
uint32_t PHACS_sddc_stop_node(const char*nodename);
/*重置特定VM*/
uint32_t PHACS_sddc_reset_node(const char*nodename);
/*特定VM到目标SDDC主机的失效备援*/
uint32_t PHACS_sddc_failover_node(const char*nodename,const char*hostname);
下面是启动特定VM的数据结构和API的示例定义:
在某些实施例中,集群管理单元118、128和138还可以包括支持集群的动态创建和删除以及集群中的节点的动态添加和移除等等的集群管理接口。例如,节点可以通过相应的集群管理单元创建集群。节点还可以通过集群管理单元删除已创建的集群。删除集群可以是集群的主节点具有的功能。另外,在集群创建之后,集群中的节点可以通过相应的集群管理单元向集群中添加新的节点或者将集群中的某个已有节点移除。
下面是与添加VM相关联的数据结构和API的示例定义:
此外,在某些实施例中,集群管理单元118、128和138还具有用于管理集群100的其他特征和功能,例如包括心跳机制、消息传送域机制等等。例如,通过心跳机制,节点能够获知集群中的成员状况,例如成员列表和主从节点等,还能够获知集群中的其他节点的状态。心跳机制的具体算法是本领域中已知的,在此不再赘述。
作为另一示例,通过集群管理单元118、128和138还可以实现集群中的消息传送域机制。消息传送域是指进程通信组,该组中包括多个节点上运行的多个进程。根据本公开的实施例,每个消息传送域具有唯一的名称,以便使不同的消息传送域能够彼此区分,从而向一个消息传送域广播的消息不会被传递到另一消息传送域。
在一个实施例中,一个消息传送域可以专门设计用于一个应用在集群中不同节点上运行的不同应用实例。这些应用实例之间在该消息传送域中交互的集群消息可以是全局有序的,以实现集群范围内针对该应用的协调和决策。实现消息全局有序的算法是本领域中已知的,在此不再赘述。
可以任意适当方式实现同一应用对于某个消息传送域的专用。例如,应用可以调用集群消息API以通过提供某个消息传送域的特定名称而加入该消息传送域,继而该应用可以注册回调函数,用于在有消息到来时调用。在有消息要发送时,该应用可以调用另一集群消息API来广播消息。该消息可以经由应用和集群管理单元之间的快速进程间通信(IPC)信道以及集群管理单元之间的集群互连网络等传递到集群中的所有节点处加入该消息传送域的所有进程。下面是用于应用对消息传送域的专用的数据结构和API的示例定义:
/*注册集群消息回调函数*/
uint32_t cluster_register_message_callback(cluster_lib_handle_thandle,const char*application_name,void(*cluster_msg_call_back)(cluster_message_t*msg));
/*向集群广播消息*/
uint32_t cluster_broadcast_message(cluster_lib_handle_t handle,
cluster_message_t*msg);
集群管理单元118、128和138可以由硬件、软件或者其组合来实现。例如,集群管理单元118、128和138可以通过在物理PBBA主机的操作系统(OS)上运行或者在SDDC虚拟机的OS上运行的计算机程序来实现。作为备选,集群管理单元118、128和138也可以由逻辑电路来实现。基于计算机程序和逻辑电路的组合的实现也是可行的。
根据本公开的实施例,如上所述,在确定第二节点120处的应用发生故障后,可以将与应用相关联的数据和服务从第二节点120迁移到第三节点130。下面将结合图2对故障应用的迁移过程的示例实现进行详细说明。
下面将参考图2所示的示意图来描述本公开实施例的思想和原理。图2示出了集群100中的各个设备之间的通信和处理过程200。为讨论方便,以下将结合图1进行说明。注意,过程200中的很多动作/步骤并非是必须的,在其他实施例中可以省去,下文还将对此进行详细描述。
如图所示,根据本公开的实施例,第二节点120确定(205)本地的应用是否发生故障。如上所述,第二节点120可以任意适当方式实现故障的确定。作为示例,当第二节点120处的第一应用实例125发生故障时,如上所述,可以通过第二节点120处的第一SFU 121中所封装的第一SFU代理123对第一应用实例125的监控来确定该故障。例如,第一应用实例125和第一SFU代理123都处于运行状态,二者可以彼此通信。如果第一SFU代理123从第一应用实例125接收到错误信息,或者在预定时间段内未接收到来自第一应用实例125的信息,则第一SFU代理123可以确定通信发生错误。此时,第一SFU代理123可以确定第一应用实例125发生了故障。
在确定(205)本地的应用发生故障后,可选地,第二节点120向作为集群100的主节点的第一节点110发送(210)用于故障应用的迁移的失效备援请求。为描述方便,以下将第一节点称为“主节点”。如上所述,第二节点120与主节点110之间的消息交互可以例如通过第二节点120中的第二集群管理单元128和主节点110中的第一集群管理单元118来实现。
主节点110在接收到该请求后,可以相应地确定第二节点120处的应用发生了故障。继而,可选地,主节点110确定(215)第三节点130是否可用作迁移的目的地节点。在确定目的地节点时,主节点110可以将任意适当因素考虑在内。在一个实施例中,主节点110可以基于集群100中各节点的负载情况来选择目的地节点。例如,负载低于预定阈值的节点可被选作迁移的目的地节点。在另一实施例中,主节点110可以根据预定义的备份规则来选择目的地节点。例如,主节点110可以选择集群100中预先设置的备用节点作为迁移的目的地节点。当存在多个备用节点时,主节点110可以任意适当规则来进行选择。例如,主节点110可以选择负载较小的备用节点作为目的地节点。
在确定(215)第三节点130将作为目的地节点之后,可选地,主节点110向第三节点130发送(220)指示第三节点130将作为迁移的目的地节点的消息。从主节点110向第三节点130的消息传送同样可以如上所述通过主节点110中的第一集群管理单元118和第三节点130中的第三集群管理单元138来实现。
在一个实施例中,如图1所示,第二节点120和第三节点130分别配备有封装应用的不同实例125和135的第一SFU 121和第二SFU131。在这种情况下,主节点110发送给(220)第三节点130的消息可以包括第一SFU 121的标识,以便第三节点130后续根据该标识启动相应的第二SFU 131,从而实现应用的迁移。除了SFU的标识之外,在某些实施例中,主节点110还可以向第三节点130发送以下至少一项:第二节点120的标识、应用的标识、以及与应用相关联的存储设备(例如存储设备202)的标识。利用这些信息,第三节点130在后续可以更高效地与第二节点120通信,以及执行应用的迁移,等等。这方面的实施例将在后文进一步详述。
响应于从主节点110接收到迁移指示,第三节点130可以确定与第二节点120处的应用相关联的数据和服务要迁移到本节点。在某些实施例中,该确定例如可以由第三节点130基于如上所述从主节点110接收的第二节点标识以及应用标识来实现。继而,可选地,第三节点130向第二节点120发送(225)指示发起失效备援过程的消息。
第二节点120响应于从第三节点130接收到该消息,发起与故障应用相关联的数据和服务向第三节点130的迁移。如图所示,可选地,第二节点120首先在本地执行迁移相关处理(230)。在一个实施例中,该处理可以包括第二节点120处的第二集群管理单元128停止第一SFU 123。如上所述,第二集群管理单元128对于第一SFU 121的管理可以通过第二集群管理单元128中的第一SFU模块129与第一SFU121中的第一SFU代理123的交互来实现。
第一SFU 123在接收到来自第二集群管理单元128的停止指示后,在某些实施例中,可以继而停止其内封装的第一应用实例125。另外,第一SFU 123还可以解附(detach)相关联的存储设备(例如存储设备202)。通过该附操作,第一SFU 123和存储设备的对应关系被解除,从而该存储设备不再由第一SFU 123中的第一应用实例125使用。如上所述,存储设备可以位于第二节点120内部,也可以位于外部的集群存储池内,这取决于具体实现。在此示例中,如图所示,已经为应用分配了相关联的外部存储设备202。相应地,第二节点120与外部存储设备202解附。
如上所述,存储设备202可以存储与应用相关联的数据和服务相关信息,服务相关信息例如包括与应用相关联的进程、库和配置信息等等。在一个实施例中,第二节点120可以定期将与第一应用实例125相关联的进程、库和配置信息等服务相关信息存储在存储设备202中。备选地或附加地,这些信息也可以按需(on-demand)发送。第二节点120还可以将与第一应用实例125相关联的数据备份于存储设备202中。这样,在失效备援中,作为迁移目的地的第三节点130可以从存储设备202获取相关信息,后文将对此详述。
在完成与迁移有关的本地处理之后,可选地,第二节点120向第三节点130发送(235)指示本地处理完成的消息。响应于该消息,作为示例,第三节点130从存储设备202获取(240)与应用相关联的数据以及诸如进程、库和配置信息等的服务相关信息。该获取可以例如由第三节点130利用如上所述从主节点110接收到的存储设备的标识来实现。应当理解,从外部存储设备202获取与应用相关联的服务相关信息仅仅是示例而非限制。作为备选,第三节点130还可以例如通过本地的第三集群管理单元138和第二节点120处的第二集群管理单元128,从第二节点120处直接获得相关数据和信息。
第三节点130在获取与应用相关联的数据和服务相关信息之后,可选地执行(245)与迁移相关的本地处理。例如,第三节点130可以利用如上所述从主节点110接收到的SFU的标识和应用标识来启动第二SFU 131,并且将第二SFU 131与存储设备202附接。继而,第三节点130可以利用所获取的数据和服务相关信息来启动第二应用实例135,从而实现应用的数据和服务的无缝迁移。可选地,第三节点130在完成迁移相关处理后,向主节点110发送(250)指示失效备援完成的消息。
以上结合图2,描述了在第一节点110作为集群100的主节点而第二节点120作为集群100的从节点的场景下,当第二节点120处的应用发生故障时,集群100中各设备的通信和处理过程。在某些实施例中,第二节点120可能是集群100的主节点,而第一节点110是集群100的从节点。例如,第二节点120可以响应于以下至少一个事件而在集群100中广播将自己选为集群100的主节点的选举请求:在预定时间段内未接收到来自集群100的当前主节点110的信息,以及从当前主节点110接收到指示重新选举主节点的消息。
在一个实施例中,在第二节点120发送了选举请求的同时,第二节点120还接收到来自集群100中的其他节点(例如第三节点130)的针对将其他节点选作主节点的选举请求。此时,第二节点120可以基于任意适当规则来确定是选择自身还是选择其他节点作为主节点。例如,第二节点120可以基于以下至少一个比较来确定该选择:第二节点120发送选举请求的时间与其他节点发送选举请求的时间的比较,第二节点120的启动时间和其他节点的启动时间的比较,以及第二节点120的网络地址(例如,网际协议地址,即,IP地址)和其他节点的网络地址的比较。
下面考虑一个这三个因素均被纳入考虑以完成主节点重选的示例。在此示例中,首先考虑选举请求的发出时间。如果不能确定选举结果,则再考虑发出选举请求的多个节点的启动时间。倘若还无法确定选举结果,则考虑节点的网络地址。
第二节点120可以在其发送选举请求的时间比其他节点发送选举请求的时间早第一预定时间间隔时,确定选择自身作为主节点,继而可以相应地递增与自身相关联的选举计数。选举请求的发送时间可以是绝对时间或者相对时间。例如,当第二节点120和其他节点的本地时间不同步时,可以基于节点发送选举请求的绝对时间与该节点的本地时间之间的时差来进行选举请求的发送时间的比较。
如果第二节点120发送选举请求的时间比其他节点发送选举请求的时间晚第二预定时间间隔,第二节点120确定选择其他节点作为主节点,继而向其他节点发送针对选举请求的肯定响应。如果这两个发送时间之间的时差小于第三预定时间间隔,第二节点120可以进一步基于其自身的启动时间和其他节点的启动时间的比较来确定选择哪个节点作为主节点。
例如,如果第二节点120的启动时间比其他节点的启动时间早第四预定时间间隔,第二节点120可以确定选择自身作为主节点,并且递增相关联的选举计数。如果第二节点120的启动时间比其他节点的启动时间晚第五预定时间间隔,第二节点120确定选择其他节点作为主节点,并且向其他节点发送肯定响应。如果二者的启动时间之间的时差小于第六预定时间间隔,第二节点120可以进一步基于两个节点的网络地址来选择主节点。例如,可以按照预定规则,选择网络地址较小或者较大的节点的作为主节点。
应当理解,上述用于选择主节点的第一至第六预定时间间隔可以根据实际需要灵活设置。还应当理解,上述为了选择主节点所进行的比较的顺序仅仅是示例而非限制。本发明的范围在此方面不受限制。在某些实施例中,可以先比较节点的启动时间,再比较选举请求的发送时间。也可以先比较网络地址大小,再比较选举请求的发送时间。
在没有接收到来自其他节点的选举请求的情况下,在一个实施例中,第二节点120响应于自身发送了选举请求,递增与自身相关联的选举计数。响应于从其他节点接收到针对该选举请求的肯定应答,第二节点120也递增该选举计数。
在一个实施例中,如果该选举计数超过阈值计数,第二节点120确定自身被选为集群100的主节点。继而,第二节点120在集群100中广播指示其自身已经被选为主节点的消息。其他节点响应于接收到该消息,可以确定第二节点120已经成为集群100的新的主节点。
在第二节点120作为集群100的主节点的场景下,如果第二节点120确定本地应用发生了故障,则第二节点120在集群100中广播重选新主节点的消息,从而发起新一轮的主节点选举。具体过程与上述的选举过程类似,在此不再赘述。响应于接收到指示集群100中的其他节点(例如第一节点110)已经被选为新的主节点的消息,第二节点120向新的主节点发送用于应用迁移的失效备援请求,以发起应用级失效备援过程。具体过程与上面针对第一节点110作为主节点的场景所描述的过程类似,在此不再赘述。
注意,上文描述的仅仅是节点选举的示例过程,无意限制本公开的范围。在其他实施例中,任何适当的其他因素均可被用来确定新的主节点。例如,可以考虑节点的计算能力、存储能力、网络状况,等等。
根据本发明的实施例,在主节点选举期间,集群中的节点可以在若干状态之间进行转移。举例而言,节点可以在接收到如前所述的来自当前主节点的重选新主节点的消息之后进入CLUSTER_PENDING(“集群未决”)状态。节点还可以响应于发生如下错误而进入CLUSTER_PENDING状态。例如,当节点无法将来自主节点的配置信息写入持久性数据库时,或者当节点在发起选举请求后在预定时间段内未接收到来自其他节点的响应时,节点可以首先进入RECOVERY(“恢复”)状态,继而转移到CLUSTER_PENDING状态。
节点在处于CLUSTER_PENDING状态时,可以响应于发送或者接收到选举请求,而转移到ELECTION(“选举”)状态。节点转移到ELECTION状态后,首先进入ELECTION_START(“选举开始”)子状态,以进行主节点选举。当成功选出了主节点之后,节点从ELECTION_START子状态转移到ELECTION_INTEGRATION(“选举整合”)子状态。在ELECTION_INTEGRATION子状态中,节点与其他节点交互集群状态信息和相关数据。继而,节点根据选举结果,相应地转移到MASTER(“主”)状态或SLAVE(“从”)状态。当发生错误时,节点可以从MASTER状态或SLAVE状态转移到RECOVERY状态。例如,如上所述,当从节点无法将来自主节点的配置信息写入持久性数据库时,可以进入RECOVERY状态。处于RECOVERY状态节点会再次进入CLUSTER_PENDING状态。
当节点处于MASTER状态时,还可以响应于来自当前主节点的重选新的主节点的消息而进入CLUSTER_PENDING状态。另外,当节点处于MASTER状态或SLAVE状态时,也可以响应于选举请求而再次进入ELECTION状态,以进行新一轮的主节点选举。
下面是相关API的示例:
1.获得当前的集群成员列表
uint32_t cluster_get_membership(cluster_lib_handle_t handle,
cluster_membership_t*membership);
2.获得集群主节点ID
uint32_t cluster_get_master(cluster_lib_handle_t handle,uint32_t*master);
3.获得当前节点ID
uint32_t cluster_get_nodeid(cluster_lib_handle_t handle,uint32_t*nodeid);
4.获得特定集群节点的信息
uint32_t cluster_get_node_info(cluster_lib_handle_t handle,uint32_tnodeid,cluster_node_info_t*info);
5.通知合适成员改变的事件
PS_CLUSTER_MEMBERSHIP_CHANGE
6.通知何时新主节点被选出的事件
PS_CLUSTER_MASTER_ELECTED
如上所述,除了应用级失效备援,还可以执行VM级的失效备援。例如,主节点110可以响应于确定集群100中的某个VM发生故障,选择集群100中的同类型的VM作为故障VM的失效备援节点。如图2所示,在此示例中,第三节点130被主节点110选作失效备援节点。主节点110向第三节点130发送(255)指示第三节点130将作为失效备援节点的消息。第三节点130在接收到该消息后,执行VM失效备援处理(260)。
在一个实施例中,主节点110发送到(255)第三节点130的消息可以指示第三节点130将作为活动的失效备援节点还是备用的失效备援节点。当该消息指示第三节点130将作为活动的失效备援节点时,第三节点130可以启动与故障VM处的应用相关联的SFU。除了SFU之外,第三节点130还可以启动相关联的应用实例、附接相关联的存储设备,等等。第三节点130的上述操作与上面针对应用级失效备援描述的操作类似,在此不再赘述。
以此方式,当VM发生故障时,可以在实现VM级失效备援的同时,实现相关联的应用的数据和服务的迁移,从而显著降低了服务中断时间。如果该消息指示第三节点130将作为备用的节点,第三节点130将执行常规操作,而无需执行与应用级失效备援有关的操作。可选地,第三节点130在完成相关处理后,向主节点110发送(265)指示失效备援完成的消息。
图3示出了根据本公开的某些实施例的在包括异质节点的集群中的节点处实施的示例方法300的流程图。可以理解,方法300可以例如在诸如图1和图2所示的集群100中的第一节点110或第二节点120处实施。为描述方便,以下结合图1和图2来进行说明。
如图所示,在步骤305,第一节点110或者第二节点120确定第二节点120处的应用是否发生故障。在步骤310,响应于确定应用发生故障,第一节点110或者第二节点120促使与应用相关联的数据和服务从第二节点120向集群100中的第三节点130的迁移,该迁移涉及集群100中与第二节点120异质的至少一个节点。
在一个实施例中,促使迁移可以包括:促使与应用相关联的进程、库和配置信息中的至少一项从第二节点120向第三节点130的迁移。
在一个实施例中,在第二节点120处,促使迁移可以包括:响应于确定应用发生故障,向作为集群100的主节点的第一节点110发送用于迁移的失效备援请求,第一节点110和第三节点130中的至少一个与第一节点110彼此异质;以及响应于从第三节点130接收到指示发起失效备援过程的消息而发起迁移。
在一个实施例中,在第二节点120处发起迁移可以包括:停止与应用相关联的服务失效备援单元,服务失效备援单元是封装有应用的实例和以下至少一项的容器:与应用相关联的进程、库和配置信息。在一个实施例中,在第二节点120处发起迁移可以进一步包括:解附与应用相关联的存储设备。
在一个实施例中,在第二节点120处,还可以将服务失效备援单元中的以下至少一项存储在存储设备中:与应用相关联的进程、库和配置信息。
在一个实施例中,第二节点110可以是集群100的当前主节点。在此示例中,在第二节点110处,促使迁移可以包括:响应于确定应用发生故障,在集群100中广播重选集群100的新主节点的消息;响应于接收到指示集群100中的第四节点(未示出)已经被选为新主节点的消息,向第四节点发送用于迁移的失效备援请求,第三节点130和第四节点中的至少一个与第一节点110彼此异质;以及响应于从第三节点130接收到指示发起失效备援过程的消息,发起迁移。
在方法300在作为集群100的从节点的第二节点120处实施的情况下,在一个实施例中,方法300还可以包括:响应于以下至少一项而在集群100中广播将第二节点120选为集群100的主节点的第一选举请求:在预定时间段内未接收到来自集群100的当前主节点的信息,以及从当前主节点接收到指示重新选举集群100的主节点的消息。
在这种情况下,在一个实施例中,方法300还可以包括:从集群100中的第五节点(未示出)接收将第五节点选作主节点的第二选举请求;以及基于以下至少一个比较来确定是选择第二节点120还是选择第五节点作为主节点:第二节点120发送第一选举请求的第一时间与第五节点发送第二选举请求的第二时间的比较,第二节点120的第一启动时间和第五节点的第二启动时间的比较,以及第二节点120的第一互联网协议(IP)地址和第五节点的第二IP地址的比较。
在一个实施例中,在第二节点120处,还可以:响应于确定选择第二节点120作为主节点,递增与第二节点120相关联的选举计数;以及响应于选举计数超过阈值计数,在集群100中广播指示第二节点120已经被选为主节点的消息。
在方法300在作为集群100的主节点的第一节点110处实施的情况下,在一个实施例中,在步骤305的确定可以包括:确定是否从第二节点120接收到用于迁移的失效备援请求,第一节点110和第三节点130中的至少一个与第二节点120彼此异质。
在这种情况下,在一个实施例中,在第一节点110处,促使迁移可以包括:响应于通过确定从第二节点120接收到失效备援请求而确定第二节点120处的应用发生故障,确定第三节点130是否可用作迁移的目的地节点;以及响应于第三节点130可用作目的地节点,向第三节点130发送指示第三节点130将作为目的地节点的消息。
在一个实施例中,在第一节点110处的发送可以包括:至少向第三节点130发送与应用相关联的服务失效备援单元的标识,服务失效备援单元是封装有应用的实例和以下至少一项的容器:与应用相关联的进程、库和配置信息。在一个实施例中,该发送还可以包括:向第三节点130发送以下至少一项:第二节点120的标识、应用的标识、以及与应用相关联的存储设备的标识。
在一个实施例中,在第一节点110处,方法300还可以包括:响应于确定集群100中作为虚拟机的第六节点(未示出)发生故障,选择集群100中与第六节点同质的节点(例如第三节点130)作为第六节点的失效备援节点;以及向所选择的节点发送指示该节点将作为活动的失效备援节点还是备用的失效备援节点的消息。
图4示出了根据本公开的某些其他实施例的在包括异质节点的集群中的节点处实施的示例方法400的流程图。可以理解,方法400可以例如在诸如图1和图2所示的集群100中的第三节点130处实施。为描述方便,以下结合图1和图2来进行说明。
如图所示,在步骤405,第三节点130确定与集群100中的第二节点120处的应用相关联的数据和服务是否要迁移到第三节点130,该迁移涉及集群100中与第二节点120异质的至少一个节点。在步骤410,第三节点130响应于确定迁移,获取与应用相关联的数据和服务。
在一个实施例中,方法400还可以包括:第三节点130响应于确定迁移,向第二节点120发送指示发起失效备援过程的消息。
在一个实施例中,在步骤410的获取可以包括:从存储设备获取与应用相关联的进程、库和配置信息中的至少一项。
在一个实施例中,方法400还可以包括:使用获取的与应用相关联的进程、库和配置信息中的至少一项来启动与应用相关联的服务失效备援单元,服务失效备援单元是封装有应用的实例以及与应用相关联的进程、库和配置信息中的至少一项的容器。
在一个实施例中,在步骤405的确定可以包括:确定是否从集群100的主节点(例如第一节点110)接收到指示第三节点130将作为迁移的目的地节点的消息,主节点和第三节点130中的至少一个与第二节点120彼此异质。
在一个实施例中,第三节点130可以是虚拟机。在此示例中,方法400还可以包括:从主节点(例如第一节点110)接收指示第三节点130将作为集群100中与第三节点130同质的第七节点(未示出)的活动的失效备援节点的消息;以及至少启动与第七节点处的应用相关联的服务失效备援单元,服务失效备援单元是封装有该应用的实例和以下至少一项的容器:与第七节点处的应用相关联的进程、库和配置信息。在一个实施例中,该启动还可以包括:附接与第七节点处的应用相关联的存储设备。
在一个实施例中,第三节点130可以是集群100的主节点。在此示例中,在步骤405的确定可以包括:确定是否从第二节点120接收到用于迁移的失效备援请求,第三节点130与第二节点120彼此异质。
应当理解,上文结合图1和2的示意图描述的第一节点110、第二节点120以及第三节点130所执行的操作和相关的特征同样适用于方法300和400,并且具有同样的效果,具体细节不再赘述。
图5示出了根据本公开的某些实施例的包括异质节点的集群中的装置500的框图。在某些实施例中,装置500可以实施在图1和图2所示的集群100中的第一节点110或第二节点120处。
如图所示,装置500包括:故障确定单元505,被配置为确定第二节点120处的应用是否发生故障;以及迁移单元510,被配置为响应于确定应用发生故障,促使与应用相关联的数据和服务从第二节点120向集群100中的第三节点130的迁移,该迁移涉及集群100中与第二节点120异质的至少一个节点。
在一个实施例中,迁移单元510可以进一步被配置为:促使与应用相关联的进程、库和配置信息中的至少一项从第二节点120向第三节点130的迁移。
在装置500实施在第二节点120处的情况下,在一个实施例中,迁移单元510可以包括:请求单元,被配置为响应于确定应用发生故障,向作为集群100的主节点的第一节点110发送用于迁移的失效备援请求,第一节点110和第三节点130中的至少一个与第一节点110彼此异质;以及迁移发起单元,被配置为响应于从第三节点130接收到指示发起失效备援过程的消息而发起迁移。
在一个实施例中,迁移发起单元可以包括:SFU停止单元,被配置为停止与应用相关联的服务失效备援单元,服务失效备援单元是封装有应用的实例和以下至少一项的容器:与应用相关联的进程、库和配置信息。在一个实施例中,迁移发起单元还可以包括:解附单元,被配置为解附与应用相关联的存储设备。
在装置500实施在第二节点120处的情况下,在一个实施例中,装置500还可以包括存储控制单元,被配置为将服务失效备援单元中的以下至少一项存储在存储设备中:与应用相关联的进程、库和配置信息。
在一个实施例中,第二节点110可以是集群100的当前主节点。在装置500实施在第二节点120处的情况下,迁移单元510可以包括:重选请求单元,被配置为响应于确定应用发生故障,在集群100中广播重选集群100的新主节点的消息;请求单元,被配置为响应于接收到指示集群100中的第四节点(未示出)已经被选为新主节点的消息,向第四节点发送用于迁移的失效备援请求,第三节点130和第四节点中的至少一个与第一节点110彼此异质;以及迁移发起单元,被配置为响应于从第三节点130接收到指示发起失效备援过程的消息,发起迁移。
在装置500实施在作为从节点的第二节点120处的情况下,在一个实施例中,装置500还可以包括:选举请求单元,被配置为响应于以下至少一项而在集群100中广播将第二节点120选为集群100的主节点的第一选举请求:在预定时间段内未接收到来自集群100的当前主节点的信息,以及从当前主节点接收到指示重新选举集群100的主节点的消息。
在这种情况下,在一个实施例中,装置500还可以包括:请求接收单元,被配置为从集群100中的第五节点(未示出)接收将第五节点选作主节点的第二选举请求;以及选举单元,被配置为基于以下至少一个比较来确定是选择第二节点120还是选择第五节点作为主节点:第二节点120发送第一选举请求的第一时间与第五节点发送第二选举请求的第二时间的比较,第二节点120的第一启动时间和第五节点的第二启动时间的比较,以及第二节点120的第一互联网协议(IP)地址和第五节点的第二IP地址的比较。
在一个实施例中,实施在第二节点120处的装置500还可以包括:计数单元,被配置为响应于确定选择第二节点120作为主节点,递增与第二节点120相关联的选举计数;以及结果发送单元,被配置为响应于选举计数超过阈值计数,在集群100中广播指示第二节点120已经被选为主节点的消息。
在装置500实施在第一节点110处的情况下,在一个实施例中,故障确定单元505可以被配置为:确定是否从第二节点120接收到用于迁移的失效备援请求,第一节点110和第三节点130中的至少一个与第二节点120彼此异质。
在这种情况下,在一个实施例中,迁移单元510可以包括:目的地确定单元,被配置为响应于通过确定从第二节点120接收到失效备援请求而确定第二节点120处的应用发生故障,确定第三节点130是否可用作迁移的目的地节点;以及目的地指示单元,被配置为响应于第三节点130可用作目的地节点,向第三节点130发送指示第三节点130将作为目的地节点的消息。
在一个实施例中,目的地指示单元可以进一步被配置为:至少向第三节点130发送与应用相关联的服务失效备援单元的标识,服务失效备援单元是封装有应用的实例和以下至少一项的容器:与应用相关联的进程、库和配置信息。在一个实施例中,目的地指示单元还可以进一步被配置为:向第三节点130发送以下至少一项:第二节点120的标识、应用的标识、以及与应用相关联的存储设备的标识。
在一个实施例中,实施在第一节点110处的装置500还可以包括:节点选择单元,被配置为响应于确定集群100中作为虚拟机的第六节点(未示出)发生故障,选择集群100中与第六节点同质的节点(例如第三节点130)作为第六节点的失效备援节点;以及节点指示单元,被配置为向所选择的节点发送指示该节点将作为活动的失效备援节点还是备用的失效备援节点的消息。
图6示出了根据本公开的某些其他实施例的包括异质节点的集群中的装置600的框图。在某些实施例中,装置600可以实施在图1和图2所示的集群100中的第三节点130处。
如图6所示,装置600包括:迁移确定单元605,被配置为确定与集群100中的第二节点120处的应用相关联的数据和服务是否要迁移到第三节点130,该迁移涉及集群100中与第二节点120异质的至少一个节点;以及获取单元610,被配置为响应于确定迁移,获取与应用相关联的数据和服务。
在一个实施例中,装置600还可以包括:失效备援指示单元,被配置为响应于确定迁移,向第二节点120发送指示发起失效备援过程的消息。
在一个实施例中,获取单元610可以进一步配置为:从存储设备获取与应用相关联的进程、库和配置信息中的至少一项。
在一个实施例中,装置600还可以包括:SFU启动单元,被配置为使用获取的与应用相关联的进程、库和配置信息中的至少一项来启动与应用相关联的服务失效备援单元,服务失效备援单元是封装有应用的实例以及与应用相关联的进程、库和配置信息中的至少一项的容器。
在一个实施例中,迁移确定单元605可以进一步被配置为:确定是否从集群100的主节点(例如第一节点110)接收到指示第三节点130将作为迁移的目的地节点的消息,主节点和第三节点130中的至少一个与第二节点120彼此异质。
在一个实施例中,装置600可以是虚拟机。在此示例中,装置600还可以包括:节点指示接收单元,被配置为从主节点(例如第一节点110)接收指示第三节点130将作为集群100中与第三节点130同质的第七节点(未示出)的活动的失效备援节点的消息;以及启动单元,被配置为至少启动与第七节点处的应用相关联的服务失效备援单元,服务失效备援单元是封装有该应用的实例和以下至少一项的容器:与第七节点处的应用相关联的进程、库和配置信息。在一个实施例中,启动单元可以进一步被配置为:附接与第七节点处的应用相关联的存储设备。
在一个实施例中,装置600实施于的第三节点130可以是集群100的主节点。在此示例中,迁移确定单元605可以进一步被配置为:确定是否从第二节点120接收到用于迁移的失效备援请求,第三节点130与第二节点120彼此异质。
应当理解,装置500和600中记载的每个单元分别与参考图1和图2描述的过程200以及参考图3和4描述的方法300和400中的每个步骤相对应。因此,上文结合图1至4描述的操作和特征同样适用于装置500和600及其中包含的单元,并且具有同样的效果,具体细节不再赘述。
此外,装置500和600中所包括的单元可以利用各种方式来实现,包括软件、硬件、固件或其任意组合。在一个实施例中,一个或多个单元可以使用软件和/或固件来实现,例如存储在存储介质上的机器可执行指令。除了机器可执行指令之外或者作为替代,装置500和600中的部分或者全部单元可以至少部分地由一个或多个硬件逻辑组件来实现。作为示例而非限制,可以使用的示范类型的硬件逻辑组件包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准品(ASSP)、片上系统(SOC)、复杂可编程逻辑器件(CPLD),等等。
图7示出了一个可以用来实施本公开的实施例的包括异质节点的集群中的节点700的示意性框图。如图7所示,节点700包括控制器或者称中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702和/或随机访问存储器(RAM)703的程序而执行各种适当的动作和处理。ROM 702和/或RAM 703可存储节点700操作所需的各种程序和数据。CPU 701、ROM 702和RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
节点700中的多个部件连接至I/O接口705,包括:输入单元706,例如键盘、鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许节点700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。特别地,在本公开的实施例中,通信单元709允许与集群中的其他节点通信。
在某些实施例中,CPU 701可被配置为执行上文所描述的各个过程和处理,例如过程200以及方法300或400。例如,在一些实施例中,过程200、方法300或400可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由ROM 702和/或通信单元709而被载入和/或安装到节点700上。当计算机程序被加载到RAM 703并由CPU 701执行时,可以执行上文描述的过程200、方法300或400的一个或多个步骤。备选地,在其他实施例中,CPU 701也可以以其他任何适当的方式被配置以实现上述过程/方法。
特别地,根据本公开的实施例,文参考图1至图4描述的过程可以被实现为计算机程序产品,其可以被有形地存储在非瞬态计算机可读存储介质上,并且包括机器可执行指令,该指令在被执行时使得机器实现根据本公开的各个方面。
计算机可读存储介质可以是可以存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的、非穷举的例子包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如Java、Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的设备、方法和计算机程序产品的框图和/或流程图描述了本公开的各个方面。应当理解,框图和/或流程图的每个方框以及框图和/或流程图中各方框的组合,都可以由计算机可读程序指令实现。
已经出于示例的目的描述了本公开的各个实施例,但是本公开并不意图限于所公开的这些实施例。在不脱离本公开实质的前提下,所有修改和变型均落入由权利要求所限定的本公开的保护范围之内。

Claims (27)

1.一种在集群中的第一节点处执行的方法,所述集群包括多个异质节点,所述方法包括:
确定所述集群中的第二节点处的应用是否发生故障;以及
响应于确定所述应用发生故障,促使与所述应用相关联的数据和服务从所述第二节点向所述集群中的第三节点的迁移,所述迁移涉及所述集群中与所述第二节点异质的至少一个节点。
2.根据权利要求1所述的方法,其中促使所述迁移包括:
促使与所述应用相关联的进程、库和配置信息中的至少一项从所述第二节点向所述第三节点的迁移。
3.根据权利要求1所述的方法,其中所述第一节点是所述集群的从节点并且所述第一节点与所述第二节点是同一节点,并且促使所述迁移包括:
响应于确定所述应用发生故障,向所述集群的主节点发送用于所述迁移的失效备援请求,所述主节点和所述第三节点中的至少一个与所述第一节点彼此异质;以及
响应于从所述第三节点接收到指示发起失效备援过程的消息而发起所述迁移。
4.根据权利要求3所述的方法,其中所述发起包括:
停止与所述应用相关联的服务失效备援单元,所述服务失效备援单元是封装有所述应用的实例和以下至少一项的容器:与所述应用相关联的进程、库和配置信息。
5.根据权利要求4所述的方法,其中所述发起包括:
解附与所述应用相关联的存储设备。
6.根据权利要求4所述的方法,还包括:
将所述服务失效备援单元中的以下至少一项存储在存储设备中:与所述应用相关联的进程、库和配置信息。
7.根据权利要求1所述的方法,其中所述第一节点是所述集群的主节点并且所述第一节点与所述第二节点是同一节点,并且促使所述迁移包括:
响应于确定所述应用发生故障,在所述集群中广播重选所述集群的新主节点的消息;
响应于接收到指示所述集群中的第四节点已经被选为所述新主节点的消息,向所述第四节点发送用于所述迁移的失效备援请求,所述第三节点和所述第四节点中的至少一个与所述第一节点彼此异质;以及
响应于从所述第三节点接收到指示发起失效备援过程的消息,发起所述迁移。
8.根据权利要求1所述的方法,其中所述第一节点是所述集群的从节点并且所述第一节点和所述第二节点是同一节点,所述方法还包括:
响应于以下至少一项而在所述集群中广播将所述第一节点选为所述集群的主节点的第一选举请求:
在预定时间段内未接收到来自所述集群的当前主节点的信息,以及
从所述当前主节点接收到指示重新选举所述集群的主节点的消息。
9.根据权利要求8所述的方法,还包括:
从所述集群中的第五节点接收将所述第五节点选作所述主节点的第二选举请求;以及
基于以下至少一个比较来确定是选择所述第一节点还是选择所述第五节点作为所述主节点:
所述第一节点发送所述第一选举请求的第一时间与所述第五节点发送所述第二选举请求的第二时间的比较,
所述第一节点的第一启动时间和所述第五节点的第二启动时间的比较,以及
所述第一节点的第一互联网协议(IP)地址和所述第五节点的第二IP地址的比较。
10.根据权利要求9所述的方法,还包括:
响应于确定选择所述第一节点作为所述主节点,递增与所述第一节点相关联的选举计数;以及
响应于所述选举计数超过阈值计数,在所述集群中广播指示所述第一节点已经被选为所述主节点的消息。
11.根据权利要求1所述的方法,其中所述第一节点是所述集群的主节点并且所述第二节点是所述集群的从节点,并且所述确定包括:
确定是否从所述第二节点接收到用于所述迁移的失效备援请求,所述第一节点和所述第三节点中的至少一个与所述第二节点彼此异质。
12.根据权利要求11所述的方法,其中促使所述迁移包括:
响应于通过确定从所述第二节点接收到所述失效备援请求而确定所述第二节点处的所述应用发生故障,确定所述第三节点是否可用作所述迁移的目的地节点;以及
响应于所述第三节点可用作所述目的地节点,向所述第三节点发送指示所述第三节点将作为所述目的地节点的消息。
13.根据权利要求12所述的方法,其中所述发送包括:
至少向所述第三节点发送与所述应用相关联的服务失效备援单元的标识,所述服务失效备援单元是封装有所述应用的实例和以下至少一项的容器:与所述应用相关联的进程、库和配置信息。
14.根据权利要求13所述的方法,其中所述发送还包括:
向所述第三节点发送以下至少一项:所述第二节点的标识、所述应用的标识、以及与所述应用相关联的存储设备的标识。
15.根据权利要求1所述的方法,其中所述第一节点是所述集群的主节点,所述方法还包括:
响应于确定所述集群中作为虚拟机的第六节点发生故障,选择所述集群中与所述第六节点同质的节点作为所述第六节点的失效备援节点;以及
向所选择的节点发送指示所选择的节点将作为活动的失效备援节点还是备用的失效备援节点的消息。
16.一种在集群中的第三节点处执行的方法,所述集群包括多个异质节点,所述方法包括:
确定与所述集群中的第二节点处的应用相关联的数据和服务是否要迁移到所述第三节点,所述迁移涉及所述集群中与所述第二节点异质的至少一个节点;以及
响应于确定所述迁移,获取与所述应用相关联的所述数据和所述服务。
17.根据权利要求16所述的方法,还包括:
响应于确定所述迁移,向所述第二节点发送指示发起失效备援过程的消息。
18.根据权利要求16所述的方法,其中所述获取包括:
从存储设备获取与所述应用相关联的进程、库和配置信息中的至少一项。
19.根据权利要求18所述的方法,还包括:
使用获取的与所述应用相关联的进程、库和配置信息中的所述至少一项来启动与所述应用相关联的服务失效备援单元,所述服务失效备援单元是封装有所述应用的实例以及与所述应用相关联的进程、库和配置信息中的所述至少一项的容器。
20.根据权利要求16所述的方法,其中所述第三节点是所述集群的从节点,并且所述确定包括:
确定是否从所述集群的主节点接收到指示所述第三节点将作为所述迁移的目的地节点的消息,所述主节点和所述第三节点中的至少一个与所述第二节点彼此异质。
21.根据权利要求20所述的方法,其中所述第三节点是虚拟机,所述方法还包括:
从所述主节点接收指示所述第三节点将作为所述集群中与所述第三节点同质的第七节点的活动的失效备援节点的消息;以及
至少启动与所述第七节点处的应用相关联的服务失效备援单元,所述服务失效备援单元是封装有所述应用的实例和以下至少一项的容器:与所述第七节点处的所述应用相关联的进程、库和配置信息。
22.根据权利要求21所述的方法,其中所述启动还包括:
附接与所述第七节点处的所述应用相关联的存储设备。
23.根据权利要求16所述的方法,其中所述第三节点是所述集群的主节点,并且所述确定包括:
确定是否从所述第二节点接收到用于所述迁移的失效备援请求,所述第三节点与所述第二节点彼此异质。
24.一种电子设备,包括:
处理器,以及
存储有指令的存储器,所述指令在被所述处理器运行时使得所述电子设备执行根据权利要求1至15中任一项所述的方法。
25.一种电子设备,包括:
处理器,以及
存储有指令的存储器,所述指令在被所述处理器运行时使得所述电子设备执行根据权利要求16至23中任一项所述的方法。
26.一种计算机程序产品,所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令在被执行时使机器执行根据权利要求1至15任一项所述的方法的步骤。
27.一种计算机程序产品,所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令在被执行时使机器执行根据权利要求16至23任一项所述的方法的步骤。
CN201610454922.9A 2016-06-21 2016-06-21 用于失效备援的方法和设备 Active CN107526659B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201610454922.9A CN107526659B (zh) 2016-06-21 2016-06-21 用于失效备援的方法和设备
US15/627,598 US10372565B2 (en) 2016-06-21 2017-06-20 Method and apparatus for failover processing
US16/450,079 US11003553B2 (en) 2016-06-21 2019-06-24 Method and apparatus for failover processing

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610454922.9A CN107526659B (zh) 2016-06-21 2016-06-21 用于失效备援的方法和设备

Publications (2)

Publication Number Publication Date
CN107526659A true CN107526659A (zh) 2017-12-29
CN107526659B CN107526659B (zh) 2021-02-12

Family

ID=60659576

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610454922.9A Active CN107526659B (zh) 2016-06-21 2016-06-21 用于失效备援的方法和设备

Country Status (2)

Country Link
US (2) US10372565B2 (zh)
CN (1) CN107526659B (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105991325B (zh) * 2015-02-10 2019-06-21 华为技术有限公司 处理至少一个分布式集群中的故障的方法、设备和系统
US10719417B2 (en) * 2018-01-30 2020-07-21 EMC IP Holding Company, LLC Data protection cluster system supporting multiple data tiers
WO2019164427A1 (en) * 2018-02-22 2019-08-29 Telefonaktiebolaget Lm Ericsson (Publ) Methods and nodes for cluster formation
US10963356B2 (en) 2018-04-18 2021-03-30 Nutanix, Inc. Dynamic allocation of compute resources at a recovery site
US11263098B2 (en) * 2018-07-02 2022-03-01 Pivotal Software, Inc. Database segment load balancer
US10922199B2 (en) * 2018-07-04 2021-02-16 Vmware, Inc. Role management of compute nodes in distributed clusters
US10846079B2 (en) 2018-11-14 2020-11-24 Nutanix, Inc. System and method for the dynamic expansion of a cluster with co nodes before upgrade
CN109669821B (zh) * 2018-11-16 2022-04-05 深圳证券交易所 消息中间件的集群部分故障恢复方法、服务器及存储介质
US10924538B2 (en) * 2018-12-20 2021-02-16 The Boeing Company Systems and methods of monitoring software application processes
CN111444008B (zh) * 2018-12-29 2024-04-16 北京奇虎科技有限公司 集群间服务迁移方法及装置
US10965752B1 (en) * 2019-09-13 2021-03-30 Google Llc Live migration of clusters in containerized environments
CN111708668B (zh) * 2020-05-29 2023-07-07 北京金山云网络技术有限公司 集群故障的处理方法、装置及电子设备
CN111858193A (zh) * 2020-07-27 2020-10-30 上海英方软件股份有限公司 一种实现服务器池服务的方法和系统
US11340967B2 (en) * 2020-09-10 2022-05-24 EMC IP Holding Company LLC High availability events in a layered architecture
US11770402B2 (en) * 2021-02-25 2023-09-26 Fortinet, Inc. Systems and methods for network device discovery and vulnerability assessment
US11886310B2 (en) 2021-08-03 2024-01-30 Bank Of America Corporation System for cloud infrastructure validation for suitability substantiation
CN114598711B (zh) * 2022-03-29 2024-04-16 百果园技术(新加坡)有限公司 一种数据迁移方法、装置、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7543174B1 (en) * 2003-09-24 2009-06-02 Symantec Operating Corporation Providing high availability for an application by rapidly provisioning a node and failing over to the node
US20130185408A1 (en) * 2012-01-18 2013-07-18 Dh2I Company Systems and Methods for Server Cluster Application Virtualization
CN104488291A (zh) * 2012-07-27 2015-04-01 诺基亚公司 用于促进云服务的利用的方法和装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7617292B2 (en) * 2001-06-05 2009-11-10 Silicon Graphics International Multi-class heterogeneous clients in a clustered filesystem
KR100930576B1 (ko) * 2006-12-04 2009-12-09 한국전자통신연구원 가상화 기반 고가용성 클러스터 시스템 및 고가용성클러스터 시스템에서 장애 관리 방법
US8135985B2 (en) * 2009-06-17 2012-03-13 International Business Machines Corporation High availability support for virtual machines
CN102055779B (zh) * 2009-10-30 2013-11-20 国际商业机器公司 生成高可用性组的方法、设备及系统
US9176833B2 (en) * 2013-07-11 2015-11-03 Globalfoundries U.S. 2 Llc Tolerating failures using concurrency in a cluster
US9430256B2 (en) * 2013-08-13 2016-08-30 Vmware, Inc. Method and apparatus for migrating virtual machines between cloud computing facilities using multiple extended local virtual networks and static network addresses

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7543174B1 (en) * 2003-09-24 2009-06-02 Symantec Operating Corporation Providing high availability for an application by rapidly provisioning a node and failing over to the node
US20130185408A1 (en) * 2012-01-18 2013-07-18 Dh2I Company Systems and Methods for Server Cluster Application Virtualization
CN104488291A (zh) * 2012-07-27 2015-04-01 诺基亚公司 用于促进云服务的利用的方法和装置

Also Published As

Publication number Publication date
US11003553B2 (en) 2021-05-11
US20190310924A1 (en) 2019-10-10
US10372565B2 (en) 2019-08-06
CN107526659B (zh) 2021-02-12
US20170364423A1 (en) 2017-12-21

Similar Documents

Publication Publication Date Title
CN107526659A (zh) 用于失效备援的方法和设备
Mambretti et al. Next generation clouds, the chameleon cloud testbed, and software defined networking (sdn)
CN104081371B (zh) 云计算戳记的自动化的扩建
US10484265B2 (en) Dynamic update of virtual network topology
CN104067257B (zh) 自动化事件管理系统,管理事件方法及事件管理系统
US10530667B2 (en) Mechanism for fault diagnosis and recovery of network service chains
CN104704775B (zh) 发现、确认和配置硬件清单组件
CN105409172B (zh) 逻辑交换机
US11405259B2 (en) Cloud service transaction capsulation
US10198284B2 (en) Ensuring operational integrity and performance of deployed converged infrastructure information handling systems
CN107534581A (zh) 重新配置相互连接的加速部件中间的加速部件
WO2017200853A1 (en) Distributed operational control in computing systems
CN106462450A (zh) 向vnf管理器的关于虚拟机实时迁移的通知
CN109768875A (zh) 网络切片的策略管理方法、装置、设备及系统
JP2018519736A (ja) Vnfフェイルオーバの方法及び装置
US10826812B2 (en) Multiple quorum witness
CN107688502A (zh) 进程间通信方法及装置
JP2015076888A (ja) 信頼性モデルを使用してプローブサーバ・ネットワークを構成するためのシステムおよび方法
CN113489691B (zh) 网络访问方法、装置、计算机可读介质及电子设备
US11941406B2 (en) Infrastructure (HCI) cluster using centralized workflows
CN104158707A (zh) 一种检测并处理集群脑裂的方法和装置
CN103106126A (zh) 一种基于虚拟化的高可用计算机系统
CN106716926A (zh) 硬件库存的自动化独立式引导电路
WO2023093354A1 (en) Avoidance of workload duplication among split-clusters
CN104657240B (zh) 多内核操作系统的失效控制方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20200410

Address after: Massachusetts, USA

Applicant after: EMC IP Holding Company LLC

Address before: Ma Sazhusaizhou

Applicant before: EMC Corp.

GR01 Patent grant
GR01 Patent grant