李杨
联合石化亚洲有限责任公司 中国 香港 999077
高可用集群方案,是指是双机热备的主备机模式,通过相关策略,利用双机,在生产机机发生故障时自动启动备份机,让备份机接管生产机任务,从而减少服务中断时间,减少或消除系统中断对用户的影响。采用高可用集群的技术方案的一个前提是,系统的应用数据存放于在主备机之外的存储设备上。
实际应用中,高可用机制多通过采用Keepalive包或Heartbeat的方式来实现。其应用思想为,通过Keepalive包或Heartbeat实时监测网络中各节点的工作状态,当有生产节点失灵时,备份节点根据预设策略自动执行IP接管、故障切换等技术方案,从而接替失灵节点进行生产,保障失灵生产节点上正在运行生产程序、进程和各种资源正常运行,确保集群对外的应用服务不间断。
在一个高可用(High Availability,HA)集群中,通常存在一个或多个资源群组。资源群组是由关键应用程序、可用IP地址、MAC地址、应用程序及其所使用的外部存储、NFS文件系统,以及应用所需的其他资源所组成的逻辑上的实体。在实际应用中,集群中一个有效节点通常只能在单位时间内使用一个资源群组。
网络故障切换策略(Network Failover Strategies)是指在Heartbeat程序确定集群中的某个节点失灵后,集群冗余网络中的节点立刻接管该失灵节点拥有的所有资源群组提供服务,以及失灵节点恢复后重新加入集群时所使用的策略。网络故障切换策略是HA集群的必须具备的基本特性。当一个节点发生故障时,集群系统自动执行故障切换策略,将故障节点拥有的资源群组“切换”到集群中一个或多个其他节点上。当故障节点恢复运行后,以增加组件的方式将其放回到集群中,再将其功能从其他服务器转回。集群中的所有节点,必须运行集群系统策略来提供相应服务。同时,集群系统也必须掌握每一节点的实时状态,并实时与各节点通信,确保集群中的每个节点都了解其他节点的实时状态。集群系统通常使用一条与局域网路径相分离的通信路径来实现以上功能,并通过专用网卡来确保各节点间的通信。该路径通常只用来更新各个节点的“心跳”信息,以便当一个节点因故障而无法发送心跳时,就立刻会有其他节点根据故障切换策略进行切换。
常见的故障切换策略有如下几种:
闲置备份策略,主要一个或多个活跃的闲置备份节点实时替换出现故障的生产节点来实现。正常状态下,生产节点拥有资源群,闲置备份节点则实时监督生产节点。当生产节点失灵时,闲置备份节点根据事先设置的次序,替代生产节点接管资源群。当有多个闲置备份节点时,各闲置备份节点根据优先级的高低依次替换生产节点。在实际应用中,生产节点与闲置备份节点往往使用多对多的对应关系,即多个闲置备份节点形成集群,对多个生产节点进行闲置备份。闲置备份节点对各生产节点的接管优先级可能不同[1]。
使用闲置备份策略应特别注意限制备份节点的优先级设置。通常,当集群中加入一个优先级较高的节点时,往往会导致系统资源重新配置,容易造成系统故障。因此对于闲置备份节点的优先级通常不应设置过高。
轮流备份策略中,生产节点和备份节点的备份切换策略和限制备份策略相似,不同的是,生产和备份不做区分。即先进入集群的节点作为生产节点拥有资源群组,后进入的节点则作为备份节点。
使用轮流备份策略能够避免长时间使用单一节点造成生产节点消耗过度,能够很好地平衡多个节点的工作能力,提升系统可靠性,并在一定程度上延长硬件使用寿命。由于生产节点和备份节点的属性几乎完全相同,在实际应用中容易再多次轮替后产生混淆。
简单切换策略将所有的应用服务分为主要应用服务和辅助性应用服务。正常状态下,生产节点负责主要应用服务,拥有资源群组;而备份节点负责辅助性应用服务。当生产节点失灵时,为了保证主要应用服务不中断,备份节点立刻接管资源群组,提供主要应用服务。此时,如果系统资源无法支撑备份节点同时提供主要应用服务和辅助性应用服务,备份节点将停止辅助性应用服务。当生产节点恢复时,生产节点重新接管资源群,提供主要应用服务,备份节点则重新运行辅助性应用服务。
简单切换策略是以牺牲部分辅助性应用服务的可靠性来支撑系统主要应用服务的策略。实际应用中应特别注意对于主要应用服务和辅助性应用的划分,以保障系统在故障情况下,依然能够提供可以接受的应用服务。
同步存取策略,要求所有的节点操作同一个资源群组,并能够同时访问外部存储器。
由于包括IP地址在内的系统资源全部被共享,故障切换策略的有效性只取决于客户机的灵活性和是影响。故障对系统的影响大大降低,但技术条件较高。
在以上几种故障切换策略中,同步存取策略对硬件资源和技术水平有较高的要求,简单切换策略则牺牲了部分系统功能的可靠性,因此闲置备份策略和轮流备份策略最为常用[2]。
在一个高可用集群中,通常存在两台或多台集群服务器,每台服务器均配置两个或多个网络适配器。系统启动时,为了避免地址冲突,每台服务器均需设置一个主地址,主地址通常即是服务地址。因此,在故障切换时,备份节点需首先对生产节点主地址进行接管。主地址的接管方式通常有如下两种:IP地址接管、MAC地址接管[3]。
IP地址接管(IP Address Takeover, IPAT)是指,由于应用请求通常都面向固定的IP地址,因此备份节点在接管生产及提供服务之前,必须首先接管生产节点的IP地址。IPAT的基本原理为:集群系统中的每个节点有至少具有两个IP地址接口,即备份地址和网络服务地址。当优先权较高的节点获得资源群组时,应用服务会自动由切换为网络服务地址。当备份节点接管了生产节点的网络服务IP地址时,备份节点也同时获得生产节点IP地址的所有资源。
IP地址接管主要有两种方式,即:基于IP替换的IP地址接管(IPATviareplacement)和基于IP别名的IP地址接管(IPATviaalias)。
基于IP替换的IP地址接管(也称为“传统IPAT”),是使用服务IP地址替换网络接口上的现有(启动/基本)IP地址。使用此方法,在同一网络接口上,每次仅需配置有一个IP地址/标签。需要注意的是,在此配置中,服务IP地址必须与一个节点的通信接口启动地址在同一个子网上,而备用通信接口的IP地址必须在一个不同的子网上。虽然此方法可以节省子网,但是需要额外的硬件支持。当生产IP地址的通信接口发生故障时,基于IP替换的IP地址接管,将把服务IP地址转移到在同一个节点并在同一网络上的另一个可用接口。在此情况下,关联的资源组不受影响。如果同一个节点上没有可用的接口,则将资源组连同服务IP一起转移到另一个具有可用通信接口的节点上。在使用基于IP替换的IP地址接管时,还可以配置硬件地址接管(HWAT)。HWAT的实现方式是,使用本地管理地址(LAA)来屏蔽通信接口的本机MAC地址,从而确保客户端上ARP缓存中的映射保持不变。
基于IP别名的IP地址接管,是将服务IP地址或标签用作某个现有通信接口的别名,而不更改或替换该接口的基本地址。需要注意的是,在此配置中,节点上定义的所有基本IP地址或标签必须配置在不同的子网上,并且还要与服务IP地址或标签不同。虽然此方法可以节省硬件,但是需要额外的子网。通过基于IP别名的IP地址切换,可以在某些类型的网络上使用无故ARP功能。基于IP别名的IP地址接管,使单个网络适配器可以支持多个服务IP地址或标签。因此,同一个节点可以同时承载多个资源组,而不会将资源组的数量限制为可用的通信接口的数量[4]。
相对于基于IP替换的IP地址接管,基于IP别名的IP地址接管提供了以下优点:基于IP别名比基于IP替换的IP地址接管速度更快,因为在同一个接口上添加一个IP别名使用的时间更短;基于IP别名的IP地址接管,允许多个服务标签在同一个网络接口上共存,因此可以减少集群中使用物理网络接口卡的数量。
IPAT技术相对容易,实际应用中通常优先使用这种接管方式。需要注意的是,当备份节点完成对生产节点的接管时,备份节点会同时拥有两个IP地址。此时,如果原生产机IP地址用来面向客户机服务,则需要同步更新系统服务路由表。
当生产节点和备份节点共用一个IP地址时,可备用节点可使用MAC地址接管策略。当生产节点正常工作时,会向局域网发送广播ARP请求报文,请求其IP地址的MAC地址,得到主用服务器响应后,将IP地址和生产节点的MAC地址放入ARP缓存中,以建立通信。当生产节点发生故障时,备用服务器立刻接管其IP地址进行服务,此时需要对ARP缓存中的MAC地址进行接管。
MAC地址接管主要有两种方式。第一种是同步广播,即备份节点接管IP地址的同时,对外广播一个变更MAC地址的ARP报文给所有主机,这样让所有的广播网络上的所有主机接收该报文,并更新ARP缓存表。第二种是虚拟MAC地址,即生产及在使用IP地址时,使用一个不依赖于任何一个节点的虚拟MAC地址,备份节点接管生产节点时,同步接管此虚拟的MAC地址即可。
由于虚拟MAC地址不需要客户机做任何更改动作,ARP缓存表不变,使用较广。但此方法对系统资源有一定要求。
以上两种技术都有固定的切换速度。IP地址接管与MAC地址接管相比速度稍慢,且可靠性较差,但相对容易实现;MAC地址接管速度快,但涉及复杂的物理地址,容易造成混乱[5]。
本文分析了高可用集群系统常见的故障切换策略及其对应的常见故障,同时对故障切换关键技术及其特点进行了分析。高可用集群可通过硬件和软件的冗余实现,设计高可用集群时要有合适的冗余度,尽量缩短服务中断时间,降低故障切换时的损耗。