服务高可用决策研究与Agent实现
2013-06-22张仲敏
张仲敏,宋 凭
(1 第二炮兵工程大学 陕西 西安 710025)
(2 西安通信学院 陕西 西安 710106)
1 引言
集群系统在信息处理方面的应用越来越广泛。然而集群系统存在单点失效的问题,即随着系统规模的扩大,系统节点可能出现故障而停止服务。在很多应用场合,单点失效会引发不可弥补的损失。针对此类问题,高可用(HA)通过失效检测、系统重构等方法将任务由失效节点转至其他节点,实现系统级容错,保障集群系统服务的高可靠性[1,2]。
HA 系统级的应用会带来下列问题:为每个服务部署HA系统导致部署的复杂性和工作量成倍增加;管理员需要对每个HA 服务系统进行单独管理,造成系统管理复杂度和成本的几何级增长;不同的HA 系统间无法实现资源共享导致资源利用率低下。提出一种基于Agent 的集群系统服务高可用改进方案。基本思想是借助部署于集群系统各节点上的HA-agent,使得系统在正常条件下运行本地服务,同时后台以同步方式与HA 设备冗余服务;单点失效时则切换到HA 设备继续提供服务。
2 数据一致性
数据一致性,即可恢复性,是衡量HA 系统的指标性因素。只有当同步前后的服务数据保持一致的条件下,失效节点的服务才能够被恢复。这里给出一种形式化定义。
为了保证数据的完整性和可恢复性,HA 系统中必须保持数据一致性。若PC 发生某种故障导致服务不可用,需要利用BC 数据进行恢复或直接让BC 接管服务,主从相位差对在此期间的数据损失予以评估。宏观上,数据只有满足一致性要求,其系统服务或应用程序才可以由备份数据启动;微观上,数据必须含有截止某时刻的所有更新,且此后不存在新的更新,数据一致性才能得到保障[3]。
系统缓存机制在提升系统性能的同时也带来不利影响,即可能存在I/O 操作中的部分写操作并没有实时写回,只是将结果暂存于缓存内。因此,当且仅当系统暂停提交写请求且缓存为空时,PC 与BC 应用级数据一致性才能得以保障。
3 HA基本架构
高可用通常基于节点冗余,方法为给每个节点配备HA 节点以构成服务冗余,原节点为主节点,负责对外提供服务,增加的节点为从节点,负责提供服务冗余,主从节点共同构成该节点的HA 系统;正常流程模式下由主节点进行服务,如发生故障,将任务切换至从节点,由其接管服务[4]。基于节点的HA模式条件下必须配备双服务节点;导致大规模的集群系统必然会产生额外增配大量资源的需求,且管理和维护开销也大幅增加;此外,大部分时间里只有主节点提供服务,系统资源利用率不高,造成资源的浪费。为此本文提出基于存储设备冗余来设计高可用方案,其基本架构如图1 所示。
图1 存储设备冗余HA
方案为每个节点成对配备存储器,本地物理磁盘Disk 与ND(冗余磁盘,这里考虑实现采用网络存储机制,为网络磁盘),通过HA-agent 将二者绑定协作。其HA 机制设定为:正常工作时,Disk 与ND 分别为主、从设备的角色,节点运行于Disk 端,同时以既定策略同步数据到远端ND,Disk 失效时将节点与远端ND 进行绑定,由其接管工作并继续提供服务环境。
与基于节点冗余的HA 相比,方案设计的HA 冗余的是节点上的存储设备,在原型系统实现时采用经过虚拟化处理后的网络存储设备池,对原系统而言只需配备一个集中式的网络存储设备,系统投资较小。此外,增加的存储设备可实现后台统一管理,具备较高的数据安全性和便捷的操作性等特点,同时不会大幅度地增加系统复杂度和维管开销。
4 基于同步IRP的实现机制
数据的备份有文件级(file)和数据块级(block)2 种基本类型。文件级备份时,一个I/O 操作对文件造成的任何变化,都必须将文件进行整体备份,备件开销相对较大,不适用于有频繁I/O 操作的大文件的情况;在数据块级模式下,仅需备份被I/O 操作改变的那些数据块,而不需备份文件的所有数据区域[5]。文章拟在基于存储设备冗余的HA 架构基础上,研究基于数据块粒度的HA-agent 实现机制以达成服务高可用,相比文件级备份可以极大降低系统的开销。根据I/O 请求的完成时机,基于IRP 数据复制可以划分为同步与异步2 种。考虑数据一致性要求,文章采用同步I/O 高可用(Sync I/O HA)模式。
同步I/O 复制是指将服务数据同步到后台服务器时采用原子性成对处理的方式,每个本地I/O 请求完成后必须等待远端ND 亦完成该请求并返回确认信息后,才最终向上层返回该请求的完成信息,同时释放其占用的系统资源。Sync I/O HA 系统工作流程如图2 所示。该模式下设备层包括本地Disk与远端ND,通过HA-agent 共同向上层呈现一个统一的逻辑设备Virtual Disk(VD),上层用户不能直接访问底层设备,而只能通过VD 进行交互。其交互机制设计为:上层用户发往本地Disk 的I/O 写请求由逻辑层Virtual Disk 同时发送到远端ND,只有当两端都处理完该I/O 请求并都返回完成信息后,逻辑层VD 才向上层用户返回完成确认信息。这样的设计保证了所有I/O 写请求都是原子性成对处理的,确保了设备两端的数据一致性。该机制核心思想为:对于任意I/O 写请求,只有当两端设备都成功完成时才向上层返回完成确认信息;否则如果有任一端处理失败,直接向上层返回失败信息,而无视另一端的处理结果。
图2 Sync I/O HA 工作流程
图2 中Sync 与Recover 为2 个底层设备间的同步过程,具体呈现为2 个内核态的同步线程,分别负责HA 系统的初始构建和灾后恢复。
HA 初始构建是形成高可用的基础,由内核态同步线程Sync 进行控制。在没有建立HA 系统前,节点只能运行本地服务,增加网络设备ND 后系统进入HA 初始构建阶段,即将本地服务数据同步到远端ND 的过程。因为此时节点必须停止对外提供的一切服务,故构建过程应尽量短以尽快恢复正常服务功能。
HA 构建完成后,节点继续提供正常服务功能,其Disk 与ND 形成基于设备的高可用。上层用户产生I/O 请求时,由HA-agent 进行复制并分别发送给底层设备Disk 与ND 处理,只有当HA-agent 接收到两端都返回的完成信息之后,才向上层返回该IRP 已处理完成的确认信息。如果任一端返回失败信息,HA-agent 就向上层返回该IRP 已处理失败的信息。I/O请求处理策略的原子性设计保证了两端设备上服务数据的一致性。
出现单点失效时,将失效节点与其高可用设备远端ND相绑定,由ND 启动系统服务备份以恢复其正常功能。服务空闲时启动内核态线程Recover 进行ND 端向Disk 端的数据迁移。与高可用构建阶段相同,在此期间应暂停正常服务功能,迁移速度应保证系统能尽快完成迁移以继续提供正常的服务。结束后由本地设备启动服务即可进入HA 系统的正常运行流程。
以上高可用方案实现相对简单,其特点在于由IRP 处理策略的原子设计所决定的数据一致性保护,保证了服务数据的无损恢复。与此同时,其劣势也相对明显,如果网络传输速率不高,远端ND 通过网络收发数据(这里主要指IRP)的通信开销相对较高,因此本地设备的时间开销中只有少部分用于处理I/O 请求,而大部分都用于等待远端设备返回信息,导致系统性能降低,甚至极端情况下系统假死。故本方案在网络传输速率较高且带宽高于写速率峰值的环境中应用情况较好。Sync I/O HA 以牺牲系统性能为代价换取HA 的高可用性。
5 结束语
提出并分析的基于内核态同步I/O 请求处理的设备冗余高可用方案,实现了同步高可用原型系统,获取了较高的HA可用性。下一步研究针对Sync I/O HA 导致系统性能下降的不足,将考虑基于异步I/O 的HA 模式,在保证数据一致性的前提下尽量提高系统整体性能。
[1]Jim Gray,Daniel P.Siewiorek.High Availability Computer Systems[J].IEEE Computer,1991,24(9):39-48.
[2]J S Glider,C F Fuente,W J Scales.The software architecture of a SAN storage control system[J].IBM System Journal,2003,42(2):232-249.
[3]张仲敏,宋凭,许鲁.服务在线迁移系统研究与实现[J].计算机科学,2007(12):111-114.
[4]Hertong Song,Chikchai“box”Learngsuksun,Raja Nassar,etc.Availability Proceedings of the First International Conference on Availability[C].Reliability and Security,2006:251-254.
[5]Dina Bitton,Jim Gray,Disk Shadowing.InVery Large Database Conference XIV[C].1988:331-338.
[6]Richard Hou,Steve Feibus,Patty Young.Data Replication and Recovery with Dell/EMC SnapView 2.0 and MirrorView[R].Dell,2003.