(计算机应用技术专业论文)linux高可用性双机系统的研究与实现.pdf_第1页
(计算机应用技术专业论文)linux高可用性双机系统的研究与实现.pdf_第2页
(计算机应用技术专业论文)linux高可用性双机系统的研究与实现.pdf_第3页
(计算机应用技术专业论文)linux高可用性双机系统的研究与实现.pdf_第4页
(计算机应用技术专业论文)linux高可用性双机系统的研究与实现.pdf_第5页
已阅读5页,还剩80页未读 继续免费阅读

(计算机应用技术专业论文)linux高可用性双机系统的研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西南科技大学硕士研究生学位论文第l 页 摘要 本文分析了目前常见的基于l i n u x 的高可用性双机系统的实现的特点、 技术手段和局限性,研究了心跳检测、成员籍管理、可靠通信和多播等关键 技术,设计了一个新的l i n u x 高可用性双机系统及其配置管理软件。 采用w e bs e r v i c e 的方法实现了虚拟的成员籍总线,使得双机系统容易 向多机( 集群) 扩展。 提出了对服务进行缓存的机制,使用缓存队列对服务的“静态”资源进 行缓存,设计了服务池( s e r v i c ep 0 0 1 ) ,在频繁增删服务的时候可提高系 统性能。 给出了支持b o n d i n g 新技术的方案,并通过b o n d i n g 技术、浮动i p 迁 移以及进程检测、网络检测、磁盘可用性检测等技术,提高了系统的可用性。 设计了一个基于j 2 e e 的s t r u t s 2 技术的b s 型客户端配置工具,提高 了双机系统的易用性。 本文使用l i n u x 系统调用和c c + + j a v a s h e l l ,实现了双机系统原型 和客户配置管理端原型,对双机系统的可靠性进行了理论分析,实验测试表 明,本系统能够适应网络故障、节点故障和服务故障。 池 关键字:高可用性l i n u x 双机b o n d i n g 技术心跳检测服务 西南科技大学硕士研究生学位论文第l l 页 a b s tr a c t t h ef e a t u r e s ,a p p r o a c h e sa n dl i m i t a t i o n so ft h ec o m m o nh i g ha v a i l a b i l i t y d u a l _ s y s t e mi m p l e m e n t a t i o n sb a s e do nl i n u xn o w a d a y sa r ea n a l y z e d i t sk e y m e c h a n i s m ss u c ha s h e a r t b e a t ,m e m b e r s h i p , r e l i a b l ec o m m u n i c a t i o na n d m u t i c a s ta r es t u d i e d an e wh i g ha v a i l a b i l i t ys y s t e ma n di t sc o n s o l ea r e i m p l e m e n t e d ap s e u d o - m e m b e r s h i pb u si sp r o p o s e d ,m a k i n gt h ed u a l - s y s t e ms c a l a b l et o m u t i n o d es y s t e m ( c l u s t e r ) e a s i e r s e r v i c e sc a c h ei sp r o p o s e d c a c h eq u e u ew a su s e dt os t o r et h e“s t a t i c r e s o u r c eo fs e r v i c e s as e r v i c ep o o l i sd e v e l o p e d ,g a i n i n gi m p r o v e dp e r f o m a n c e w h e ns e r v i c e sa d da n dd e l e t ef r e q u e n t l y a b o n d i n g - s u p p o r ta p p r o a c hi sp r e s e n t e d s y s t e ma v a i l a b i l i t yi si n l p r o v e d t h r o u g hb o n d i n g ,i pf l o a t i n g ,p r o c e s sc h e c k ,n e t w o r kc h e c k ,h a r dd i s kc h e c ka n d e t c a p r o t o t y p eo ft h ed u a l 一s y s t e ma n dc o n s o l ei sd e v e l o p e dw i t ht h ea b o u n d a n t l i n u xs y s t e mc a l l s ,l a n g u a g ec ,c + + ,j a v aa n ds h e l l t h e o r e t i c a l l ya n a l y s e sf b r i t sr e l i a b i l i t ya r ec a r r i e do u t t h ep r a c t i c a lt e s t ss h o wt h a ti tc a na f f 0 r dn e t w o r l ( f a i l u r e n o d ef a i l u r ea n ds e r v i c ef - a i l u r e k e yw o r d s : h i g ha v a i l a b i l i t y ; l i n u xd u a l s y s t e m ; b o n d i n g ; h e a r t b e a t ; s e r v i c ep o o l 独创性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的 研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包 含其他人已经发表或撰写过的研究成果,也不包含为获得西南科技大学或其 它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所 做的任何贡献均已在论文中作了明确的说明并表示了谢意。 签名:破廖 日期:硼占、,7 关于论文使用和授权的说明 本人完全了解西南科技大学有关保留、使用学位论文的规定,即:学校 有权保留学位论文的复印件,允许该论文被查阅和借阅;学校可以公布该论 文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文。 ( 保密的学位论文在解密后应遵守此规定) 签名: 荻兽 导师签名:日期: 砧易。| 7 。 西南科技大学硕士研究生学位论文第1 页 1绪论 随着网络和信息技术的不断发展,人们要求随时随地获取信息。在一些 关键型的领域,如所有的w e b 服务器、工业控制器、自动柜员机、远程通讯 中继器、医学与军事监测仪以及股票处理等,都要7 木2 4 小时不问断服务, 否则会出现严重的后果。美国著名的互联网安全中心( c e r t ) 提供的统计信息 表明:从1 9 9 8 年以来,由于各种原因导致系统无法j 下常运行的异常事件出 现的次数增长得非常快,而每一次系统故障所造成的经济损失更是惊人。美 国计算机安全研究所c s i 和联邦计算机犯罪与安全测量调查局报告表明: 2 0 0 0 年,2 4 9 起事件造成的损失是2 6 5 5 8 9 ,9 4 0 美元,而2 0 0 0 年前3 0 年1 8 7 起事件造成的损失才达到3 7 7 ,8 2 8 ,7 0 0 美元。因此,必须采取适当措施确保 计算机系统能提供不问断的服务以维护系统的可用性。 1 1 可用性 计算机系统的可用性用“平均无故障时间 来衡量,概念上讲为系统保 持正常运行时间的百分比,物理意义即计算机系统平均能够正常运行多长时 间才发生一次故障,平均无故障时问与系统的可靠性成正比。系统的运行时 间还包括维护时问,系统的维护性能用“平均维修时间”来衡量,即系统发 生故障并维修使之重新恢复正常而需平均花费的时间。系统的可维护性与平 均维修时间成反比。计算机系统的可用性计算公式为:平均无故障时间( 平 均无故障时间+ 平均维修时间) 半1 0 0 妇m ,。通常用如表卜1 所示的“9 ”的 个数来划分计算机系统可用性的类型。 目前常用的提高系统可用性的手段大致分为2 种:硬件冗余和软件方 法。硬件冗余主要是通过在系统中维护多个冗余部件如硬盘、网线等来保证 工作部件失效时可以继续使用冗余部件来提供服务;而软件的方法是通过软 件对系统中的多台机器的运行状态进行监测,在某台机器失效时启动备用机 器接管失效机器的工作来继续提供服务。 1 2高可用性系统的分类及基本实现途径 高可用性婶1 系统的主要任务是提高系统的可用性,其发展大致经历了3 类型的蜕变。 西南科技大学硕士研究生学位论文第2 页 表卜1可用性分类表h 1 t a b i e l 1a v a ii a b ii t yc a t e g o r ie st a b l e 4 1 第一种高可用性系统称为双机备份系统,是主机级的备份。系统通常有 2 台服务器( 或称主机) ,互为备份,当一台服务器发生故障而不能提供服务 时,由另一台服务器接管其所承担的所有工作。这种类型出现的时间最早, 实现技术简单,主要问题是没有充分利用服务器资源,系统进行迁移时,时 间开销大。 第二种类型的高可用性系统最主要的特点是服务级的管理粒度,它始于 9 0 年代后期,仍采用双服务器结构,但系统以服务为单位进行监控、迁移。 同时对系统软、硬件资源进行实时监控和故障恢复,并使2 台服务器上的负 载相对平衡。服务器可以同时肩负着运行服务器和备份服务器的双重功能。 每个服务器都可以同时完成3 类工作: ( 1 ) 作为运行服务器,提供多个服务。 ( 2 ) 作为备份服务器,监视对等运行服务器上的所有服务的运行状态, 当出现故障时,接管相应的服务。 ( 3 ) 作为一个普通的服务器,执行其他应用程序。 第三类高可用性系统又称之为集群m m ,系统,由一组互连的整机构成的 并行或分布系统,使用多台服务器组成服务器集合。每台服务器都分担着一 部分计算任务,同时,还承担一些容错任务,当其中一台服务器出现故障时, 系统会在软件的支持下将这台服务器从系统中隔离出去,通过各服务器之间 的负载转嫁机制完成新的负载分担。而且,在某个应用软件的峰值处理期间 内,使用简单的操作命令就可以把同一节点的应用转移到其他节点以减轻 该节点的工作负荷。广义上说,相互独立的一些系统构成了一个组就是集群。 西南科技大学硕士研究生学位论文第3 页 一个客户与集群相互作用时,集群的行为像是一个独立的系统一样。从狭义 上讲,集群是一些相互独立的计算机,这些计算机作为一个整体对外提供服 务。对于客户来说,这些计算机的行为就好像一个计算机一样,但是其处理 能力、可靠性、i o 能力都得到了大幅的提升,。采用集群技术的目的主要 是为了提高性能、降低成本、提高规模扩展性和增强可靠性。集群系统,主 要分为三种一一高性能科学计算群集、负载均衡群集和高可用性群集,。 集群系统通过功能整合和故障过渡实现了系统的高可用性和可靠性。集群系 统主要有3 个优势: ( 1 ) 可以充分利用现有计算资源,由负载平衡调度软件将任务相对均衡 地分配到各个节点( 主机) 上。 ( 2 ) 并行处理2 1 应用。传统的大规模并行多处理机m p p 系统价格昂贵,而 对称多处理机s m p 系统有时又难以满足某种计算需求,集群系统能以较低 价格的计算机集成来满足高性能的计算需求。 ( 3 ) 从经济和易扩充性方面考虑,集群系统的每个节点都是一个独立的 计算节点,因而也提供了高度冗余,使系统具有更好的可靠性,是集群系 统最有市场潜力的优势之一。 理论上双机系统是一种简单的集群,又可以称之为双机热备份系统或者 是双机容错系统。从广义上讲,双机热备( 双机容错) 就是对于重要的服务, 使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时, 其承担的任务自动转移到另外一台服务器,从而在不需要人工干预的情况 下,自动保证系统能持续提供服务。双机热备一般情况下需要有共享的存储 设备。但某些情况下也可以使用两台独立的服务器( 无共享数据) 。从狭义 上讲,双机热备特指基于a c t i v e s t a n d b y 工作方式的服务器热备。服务器 数据包括数据库数据同时往两台或多台服务器写,或者使用一个共享的存储 设备。在同一时问内只有一台服务器能够访问共享设备。当其中运行着的一 台服务器出现故障无法启动时,另一台备份服务器会通过双机软件的诊测 ( 一般是通过心跳诊断) 将s t a n d b y 机器激活,保证应用在短时间内完全恢 复正常使用。典型的双机系统见图卜1 。 1 3 国内外高可用性系统的历史与发展 早期的集群系统有美国d e c ( d i g i t a le q u i p m e n tc o r p o r a t i o n ) 公司 基于v a x 系列和a l p h a 系列服务器平台的v m s c l u s t e r ,基于u n i x 平台的t 西南科技大学硕士研究生学位论文第4 页 图卜1典型的双机系统 f ;g u r e l 1t y p i c a id u a i s y s t e m r u c l u s t e r ,m i c r o s o f t 公司的基于w i n d o w s n t 的w o l f p a c k 。 九十年代末期,l i n u x 操作系统n 引不断走向成熟,它的健壮性不断增强, 并且提供了g n u 软件和标准化的p v m 、m p i 库,最重要的是l i n u x 在普通p c 机上提供了对高性能网络的支持,这样就大大推动了基于l i n u x 的集群系统 的发展。 在国外( 主要是美国) ,众多厂家如m i c r o s o f t 、n o v e l l 、c o m 2 、p a q 、 h p 、i b m 、s u n 、q u a li x 均已推出或j 下在研究类似于第二类和第三类( 见 1 2 ) 的高可用性系统产品。 本文主要研究基于l i n u x 的h a 系统,目前国内外常见的基于l i n u x 的高可用性双机系统主要有以下几种。 1 3 1 t ur b o h a t u r b o l i n u x 川公司推出的一款高可用性双机系统t u r b o h a ,自2 0 0 1 年以来前后经历了两个版本6 o 和6 5 ,新版本增加了“磁盘镜像”等功能, 使得系统支持基于节点各自磁盘而不需要共享磁盘阵列的应用,支持通过串 口和s o c k e t 的心跳检测,支持磁盘阵列,多种主动一备动、主动一主动备 份模式,基于j a v a “技术、c s 模式的g u i ,支持g u i 和命令行配置模式, 西南科技大学硕士研究生学位论文第5 页 支持常见的各种接入、数据库、存储和自定义服务,支持多种操作系统。但 是,该产品目前只支持2 个节点,不能多机互为备份,不支持基于w e b 的配 置方式。 1 3 2r o s e h a r o s e h a 1 是美国r o s ed a t a s y s t e m s 公司的一款高可用性双机系统产品, 整个系统架构见图卜2 。 图卜2r o s e h a 系统架构图1 fig u r e l 2 r o s e h af r a m e w o r k 2 0 1 c l u s t e rs e r v i c e 进程是守护进程,是h a 的主要进程之一,负责维护 整个系统的配置信息,并且负责与另外一台机器通信,维护双机系统配置信 息的全局一致性。双机之间的c 1 u s t e rs e r v i c e 进程之问的通信是通过 h e a r t b e a t 来进行的。此外,c 1 u s t e rs e r v i c e 进程还负责与服务的代理进 程进行通信,实时接收来自服务代理进程反馈的服务的最新状态,并将此状 态写入h e a r t b e a t 发往另外的机器。 c l u s t e r m o n i t o rs e r v i c e 进程也是一个守护进程,是为了避免c 1 u s t e r s e r v i c e 进程为单点故障( s p o f ,s i n g l ep o i n to ff a i l u r e ) ,而增加的一 个后备进程,与c l u s t e rs e r v i c e 进程互为备份,负责监视c l u s t e rs e r v i c e 进程的状态,一旦c l u s t e rs e r v i c e 进程意外被杀死,c l u s t e rm o n i t o r s e r v i c e 进程接替则c l u s t e rs e r v i c e 的工作。 代理( a g e n t ) 进程与“资源 进程是1 :l 的关系,负责在资源进程与 c 1 u s t e rs e r v i c e 进程之间的信息的上传下达,上传是指向c l u s t e rs e r v i c e 进程报告资源的状态,下达是指负责向资源进程传达c 1 u s t e rs e r v i c e 进程 西南科技大学硕士研究生学位论文第6 页 发过来的“指令 ( 如切出、停止、切入等) 。 系统支持心跳模式有串口和s o c k e t ,支持多种服务( 包括常见的接入、 数据库、存储、自定义等) ,支持磁盘阵列,有基于j a v ag u i 的图形化控制 台和命令行模式的配置,也支持多种操作系统,但是只支持2 个节点,不支 持基于w e b 的配置方式,此外,r o s e h a 不支持“纯软件( 不带磁盘阵列的) 的有共享业务数据的应用,即不支持磁盘镜像技术。 1 3 3 lif e k e e p e r 美国s t e e l e y e 公司的l i f e k e e p e r ,是一种支持多种软硬件平台的高性 能容错软件,该软件源于美国n c r 公司及著名的a t & t 贝尔实验室。 l i f e k e e p e r 的工作方式与上述2 款h a 软件大致相同,此外它还具有独特的 优势: ( 1 ) 支持基于共享磁盘的心跳方式。 ( 2 ) 支持特有的磁盘镜像技术一一扩展镜像( e x t e n d e dm i r r o r i n g ) 技 术。扩展镜像软件在局域网的服务器之间提供完全基于软件的镜像。一个服 务器被指定为主服务,另一个为从服务器。客户只能对主服务器上的镜像卷 进行读或写,从服务器上相应的卷被锁定以防对数据的存取,除非在主服务 器上检测到故障状态,以此来维护数据的一致性。 ( 3 ) 最多支持1 6 个节点( 少数支持多于2 个节点的双机系统) 。 1 3 4h e ar t b e a t 项目 l i n u xh a 川项目,是一个为l i n u x 提供高可用性解决方案的开源项目, 提出高可用性的基础支撑框架,主要实现了成员籍管理、通信服务、集群管 理、资源隔离、资源监测、共享存储器和存储复制功能心“。架构见图卜3 。 h e a r t b e a t ( 此h e a r t b e a t 为项目名称,而非前面所述的“心跳 ) 由命 令处理进程、消息处理进程、读消息进程和写消息进程四种类型的进程组成。 写消息进程是控制中心,它向其他节点发送心跳信号,并监测其他节点发来 的心跳信号,负责检测失效节点,实现可靠的多播协议,对所发送的数据包签 名以保证系统消息的可信赖性,管理h a 集群资源。读消息进程负责从消息 通道和管道中读取目的地为本地的消息,验证消息的合法性。命令处理进程 实现了集群系统客户端的a p i ,负责执行集群系统的内部指令,如切回、切 出、停止服务等等。消息处理进程负责处理接收来的消息,它根据消息的性 质发往不同的进程,进行适当的处理。管道保证了消息和命令是严格按照到 西南科技大学硕士研究生学位论文第7 页 达的先后顺序被读取的。消息通道支持多个进程的并发访问,支持较大量的 消息吞吐。 图卜3h e a r t b e a t 架构图1 fig u r e l 3 h e a r t b e a tf r a m e w o r k 2 3 1 该系统由于是开源系统,已随多个l i n u x 发行版发布,目前版本2 1 3 , 支持最多1 6 个节点,提供命令行配置方式( 基于g u i 的配置方式不完善) , 支持共享磁盘、磁盘复制,支持串口和s o c k e t 心跳,缺点是不支持磁盘阵 列,对所管理服务的监测手段不完善,配置稍显复杂,没有界面友好的g u i 的支持,与商业化的产品性能还有差距。 除了上述的双机系统之外,还有诸如r h c s ( r e dh a tc l u s t e rs u it ) 、 f a i l s a f e 等,其实现与上述系统类似。 1 3 5 目前常见高可用性双机系统的不足 从以上分析可以看出,目前常见的高可用性集群系统的实现中,有如下 不足: ( 1 ) 绝大部分是商业软件,不仅软件价格昂贵,而且支撑的硬件环境也 代价不菲。开源软件功能有限,缺乏必要的文档和及时的技术支持。 ( 2 ) 大部分在软件设计上不支持扩展至多个节点。 ( 3 ) 没有基于b s 结构的客户配置管理端,配置管理不便。 1 4 本文所做的主要工作 本文主要对基于l i n u x 的高可用性双机系统的架构m 州和实现技术进行 西南科技大学硕士研究生学位论文第8 页 了研究,并以此为基础,提出了一个高可用双机系统的解决方案。 本文的工作主要有如下几个方面: ( 1 ) 对目前常见的基于l i n u x 高可用性双机系统的架构、技术进行了分 析比较,对其易用性和可扩展性提出了改进意见。 ( 2 ) 对基于l i n u x 的高可用性双机系统的关键技术和理论进行了总结和 提炼,在成员籍管理方面提出了在成员籍改变的时候采用触发式更新的方 式,减少了集群节点间由成员籍管理造成的通信流量,提出了成员籍总线的 思想,以统一的方式看待成员间通信,简化了成员籍管理,并使得双机系统 很容易扩展节点。 ( 3 ) 提出了一个新的高可用性双机系统的架构,提出了对服务进行缓存 的s e r v i c ep 0 0 1 的方案。采用双服务队列,主队列供双机系统当前使用, 缓存队列对服务的“静态资源 做冗余存储,在服务频繁的增删时可提高系 统的性能。 ( 4 ) 实现了该系统服务器端的原型。采用s h e l l l i n u x 系统调用 陋7 儿”1 c 1 2 引c + + n 们j a v a 等技术为工具,分析了系统的总体架构、常用设计模式、 系统的多进程多线程结构、具体进程线程的功能和实现手段,归纳对比了 l i n u x 下对磁盘、i p 地址、网卡、进程检测的多种手段,给出了让双机系统 支持b o n d i n g 技术的实现方案,使得系统的可扩展性和适用性进一步增强。 ( 5 ) 针对传统高可用性双机系统客户端普遍采用c s 结构、使用不便的 弊端,提出了基于j 2 e e 的s t r u t s 2 n ”技术的b s 型客户端的实现方案,客户 端不需要安装额外软件,使得系统配置管理方式更加简单和多样化,易用性 进一步增强。 1 5 论文组织 第一章是系统的绪论,主要介绍了高可用性双机系统的研究历史和现 状。 第二章是系统的关键技术,主要介绍了系统的需求和系统设计中常用的 设计模式和技巧。 第三章是系统的总体设计,主要介绍了系统的架构、系统功能模块划分 和各模块的实现策略。 第四章是系统的具体实现,详细介绍了系统的各个数据结构和类、接口, 分析了重要细节的具体实现方法,主要部分给出了流程图和源代码。 西南科技大学硕士研究生学位论文第9 页 第五章是系统b s 型配置管理工具的实现方案。 第六章是系统的理论和实验检验,该章给出了系统的状态机和基于马尔 科夫过程的系统可靠性模型,对系统进行了功能和实际应用测试。 最后是本文的结论。 西南科技大学硕士研究生学位论文第1 0 页 2 高可用性系统的关键技术 2 1关键技术 针对以上比较和分析,本文提出了一种新的高可用性系统,下面分析实 现该系统的关键性技术。 2 1 1高效的成员籍管理 如果抛开应用程序的数据,仅仅从集群的管理数据出发,可以简单地认 为一个节点是否拥有一个集群的成员籍等同于集群中的其他节点是否能收 到它发过来的表明自己还“活着”的消息,( 当然这个观点需要节点间严格 的数据验证机制来保证,否则一个恶意的节点可以伪装成集群节点从而取得 所有节点的r 0 0 t 权限,这是具有风险的! 这也正是本文需要改进的地方之 一) 。由于在一个稳定的( 没有服务切换发生时) 集群系统中,绝大部分消 息都是这种消息,所以在大型的集群系统中一般采用广播或者多播的方式避 免任意2 个节点之间互发h e a r t b e a t 消息而带来的o ( n 2 ) 数量级的通信开销。 当然在应用型集群系统中,h e a r t b e a t 信息中除了要表明自己还“活着 之 外,还得包含各个成员对整个集群成员籍和服务的协商信息。为了进一步减 少成员籍视图变化( 有节点宕机,或者是节点上的服务出错) 时为节点带来 的对集群系统整个成员籍视图的重新计算,本文采用“触发式更新”的办法: 成员籍管理的消息并不以固定的频率向所有节点发送,而是当自己通过检测 h e a r t b e a t 消息发现发生成员籍变化事件的时候才向除该h e a r t b e a t 的消息 的发送者之外的其他节点发送“更新成员视图”的消息,其他节点以一种事 件处理机制来参与该事件,最后保证系统能以较小的计算量来完成对整个成 员籍视图的重新“收敛”。 2 1 2 可靠的通信 一般在一个集群系统中,检测一个节点失效的时间只有几秒钟,如微软 的w 0 1 f p a c k 系统的检测时间是5 秒,。实际应用中往往采用路由协议,而路 由协议有严格的包长度限制,所以一般难以满足该时间的限制要求。如果借 用传统的t c p ip 1 3 引协议,必然会造成节点的失效检测时问增长,但是t c p i p 在保证包的正确传输上的做法却是可以借鉴的。有实现中采用s c t p ( s t r e a m c o n t r 0 1 t r a n s m i s s i o np r o t o c 0 1 ) 协议,本系统采用了一种“类t c p i p ” 西南科技大学硕士研究生学位论文第”页 协议,在发送h e a r t b e a t 的时候采用置特殊标志位,在发送过程中首先检查 该标志,如果置了该标志位,就立即组装数据包,该数据包将会被赋予一个 较高的发送优先级,保证h e a r t b e a t 的发送延迟时间最小化,而在保证包到 达的机制上,仍然借用t c p i p 的“失效重传”机制,另外在采用s o c k e t 通 信的系统中,仍然是基于t c p i p 协议。 2 1 3 支持多个节点 为了支持多节点,本系统采用了环形的布局,节点的物理位置可以采用 环形的网络,也可以采用总线型的e t h e r n e t ,甚至可以采用串口( 但是规模 受串口网络规模的限制) ,节点的逻辑通信采用总线型的设计,在节点的成员 籍管理上采用了简化的观点一一在通信总线中活跃的节点认为其具有集群的 成员籍,这给成员的动态的引入和删除提供了便利,保证了较好的可扩展性。 节点的加入时,系统产生节点进入事件,临近的节点接收到新节点发送来的 h e a r t b e a t 消息,发现该节点从未见过,则认为整个系统的拓扑结构发生变化, 于是整个集群进入到一个重新计算成员籍的处理过程中,该计算收敛后集群 就新加入了一个节点,节点退出事件的处理过程与此类似,使节点变成可“插 拔 的。 2 1 4支持通过s o c k e t 串口共享卷进行心跳 多种心跳副方式决定了系统的适应能力。s o c k e t 应用是大部分集群系统 都支持的心跳方式,本系统沿用了该实现方式。由于串口比基于e t h e r n e t 网络的有独特的优势,所以本系统保证了对串口的支持,提供对串口通信的 单独的封装,保证原始b i t 流的正常传输和解析。系统提供对“逻辑卷 ( v o l u m e ) ”的支持,主服务器上的一个卷与从服务器上的相关磁盘通过 l a n 同步,保证系统可通过共享卷进行心跳。 2 1 5 可靠的多播 系统支持多播,保证包到达但不保证包到达的顺序,没有流量和拥塞控 制机制。之所以没有保证包到达的顺序、没有流量控制和拥塞控制是由集群 系统的工作方式所决定的,集群系统有严格的请求响应的管理模式,不会 没有请求而产生大量的数据传输幢“。 西南科技大学硕士研究生学位论文第12 页 2 1 6b s 型的客户端 为了简化客户端的工作,系统需要提供b s 型的客户控制端,该客户端 应满足如下需求: ( 1 ) 能通过给定u r l 来连接到指定的集群系统,并完成登陆验证工作, 系统的用户和密码信息采用轻量级数据库m y s q l 来存储。 ( 2 ) 系统能通过页面的按钮、超连接,执行相应的管理和配置任务,如控 制一个节点切出某个服务等,整个请求会翻译成一个集群系统内部的“命令”, 最终由系统的命令处理程序执行。 ( 3 ) 能将整个集群的状态,包括节点的状态、节点下服务的状态、链路 的状态以固定的时间间隔反映在页面上,方便远程监控。 本系统拟采用目前流行的基于j 2 e e 的s t r u t s 2 框架技术开发了一套 b s 结构的客户端。s t r u t s 2 优秀的设计模式为基于b s 的客户端开发提供 良好的底层支持,它能将客户端请求参数封装成服务器端的j a v a 对象,并 完成自动类型转换和校验功能,它有丰富的页面g u i 组件,只需简单的使用 标签就能组装出页面元素丰富的界面。采用q u a r t z m ,定时器组件,以l i n u x c r o n 程序的形式生成计划任务,周期性的将集群状态数据从集群系统取回, 客户浏览器端采用j a v a s c r i p t 7 ,技术定期刷新页面。 2 2 系统设计 2 2 1系统中重要的设计模式 2 2 1 1 事件驱动模式 高可用性系统中所有的信息传递都是通过发送事件进行的。事件的来源 多样化,可能是来自系统的,也可能是用户产生( 通过客户控制端的操作发 起) 的,也可能是对方节点发送到本节点的。事件牵涉的节点和资源数量可 能不同,如对方发送过来的事件对方节点已经处理了,此时该事件只需要本 节点进行处理;再如对网络故障或更严重的节点宕机等事件则所有服务都要 参与事件的处理。系统维护一个全局事件队列和多个服务事件队列,一个服 务对应一个局部事件队列。事件全部发送到系统全局的事件队列中,并且按 插入队列的次序,顺序处理。全局队列可按事件性质的不同发送决定事件是 作为全局事件还是发送到局部队列中。为了使事件能够得到及时处理,采用多 线程技术。每个服务有一个线程来处理自己的局部事件。 西南科技大学硕士研究生学位论文第13 页 2 2 1 2 观察者模式( 0 b s e r v e r ) 观察者模式实际上一种当事件发生时通知和处理机制。u m l 示意图见图 2 1 。 s u b j e c t ,所有被观察者的基类,该类可定义为抽象的,或干脆提升为 接口。a t t a c h 方法是附加一个观察者,d e t a c h 方法是移除一个观察者n o t i f y 方法将自动通告所有观察者,在图2 1 中就是f o r e a c hoi no b s e r v e r s o u p d a t e ( ) 。 e 蛰巨鸷 图2 1观察者模式u m l 图 fig u r e 2 10 b s e r v e rp a t t e r nu m ldia g r a m o b s e r v e r ,所有观察者的基类,该类可定义为抽象,或定义为接口。 c o n c r e t e s u b j e c t 具体的被观察者。 c o n c r e t e o b s e r v e r 具体的观察者。 在本系统中,观察者模式被大量用到。比如在有新节点加入的时候,将 会产生“新节点加入事件,节点退出时产生“节点退出事件”,新增服务 时产生“新增服务事件”,切换服务时产生“服务切换事件 等,每个事件 都有对应的“观察者 对该事件“感兴趣”,并在事件发生的时候参与对该 事件的处理,如原有节点在接收到“新节点加入事件”的时候,负责更新本 地的集群成员籍配置,将新加入的节点信息加入进来;对“新增服务事件” 感兴趣的节点在接收到该消息后,更新本地关于服务的配置信息,并启动该 服务对应的监听线程,负责监听该服务的状态变化,随时准备在对方节点上 该服务发生错误时接管过来。 “观察者模式”和“事件驱动模式 经常结合起来,实现观察者和事件 西南科技大学硕士研究生学位论文第14 页 的分离,观察者模块和被观察者模块之间以一种“松耦合”的方式进行通信, 扩展起来更方便。 2 2 1 3 代理模式( p r o x y ) 当我们需要使用的对象很复杂或者需要很长时间去构造,这时就可以使 用代理模式( p r o x y ) 。例如:如果构建一个对象很耗费时间和计算机资源, 代理模式允许我们控制这种情况,直到我们需要使用实际的对象。一个代理 通常包含和将要使用的对象同样的方法,一旦开始使用这个对象,这些方法 将通过代理传递给实际的对象。在双机系统中,用的最多的是服务的代理, 由于创建或者查询服务本身很费时间,所以我们为每个服务创建一个代理, 代理封装它所代理的服务的细节,能查询、更改服务的状态,能向服务发送 来自主控进程的指令,也能从服务向主控进程报告服务的状态。典型的代理 的u m l 图见图2 2 。 图2 2代理模式的u m l 图 fig u r e 2 2 p r o x yp a t t e r nu m ldia g r a m 代理模式对实际对象( r e a l s u b j e c t ) 的创建要延迟到c 1 i e n t 请求的工 作p r o x y 自己不能完成之后,此时代理才创建真实对象并调用其对应客户端 请求的方法,返回请求经实际对象处理后的结果。这种模式的应用能提高系 统的性能和效率,避免在不必要的情况之下创建真实对象。 2 2 2多进程多线程结构 系统采用了多进程、多线程的结构,支持并发处理。本系统包含主控进 西南科技大学硕士研究生学位论文第15 页 程、网络监测进程、资源监测进程、服务管理进程和一组服务监控进程。其 中每个服务对应一个服务监控进程,当服务在对等服务器上运行时,本地 服务器要创建一个服务监控进程对服务在对等服务器上的运行状态进行监 控。主控进程是一个多线程的进程。除主线程外,还创建了握手线程和信号 处理线程。服务管理进程也是一个多线程进程,包括主线程、诊听服务线程、 网络接收服务线程、监控服务线程、信号等待线程、一组服务事件处理线程 和一组n i c 状态检查线程。 双机系统需要建立守护进程来伺服对方节点和客户端。守护进程 ( d a e m o n ) 最重要的特性是后台运行b ”,它必须与其运行前的环境隔离开来。 这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录以 及文件创建掩码等。这些环境通常是守护进程从执行它的父进程( 特别是 s h e l1 ) 中继承下来的。守护进程的启动方式有其特殊之处。它可以在l in u x 系统启动时从启动脚本e t c r c d 中启动,可以由作业规划进程c r o n d 启动, 还可以由用户终端( 通常是s h e l l ) 执行。l in u x 下守护进程可以按照文献 【3 引编写。 西南科技大学硕士研究生学位论文 第16 页 3lin u x 高可用性系统的总体设计 3 1系统的模块图 系统大致分成如图3 1 的3 个模块,分别是成员籍管理、服务管理和 客户端工具。3 个模块之中,各个模块均依赖于内层模块,层次之间形成单 向依赖关系,外层依赖与内层,而内层的实现不需要依赖于外层,这样便于 软件模块之间形成松散耦合的关系,便于软件的扩展和维护。 图3 1系统模块图 f i g u r e 3 1s y s t e mm o d e ld j a g r a m 3 2 成员籍管理 良好的成员籍管理心2 1 设计可以很轻易的扩展到多个节点,实现真正规模 化的集群。本系统的成员籍管理采用线程实现的虚拟“成员籍总线”的方式, 并认为,所有在该总线上“活跃”的节点,都是该集群的成员。系统的成员 籍逻辑图如图3 2 。 3 2 1成员籍与w e bs e rvic e w e b 服务是一个软件系统,用于在网络上实现机器与机器的互操作,其 核心技术包括w s d l 、s o a p 、u d d i 、x m l 。 西南科技大学硕士研究生学位论文第17 页 图3 2 成员籍总线示意图 f ig u r e 3 2 m e m b e r s h i pb u sd ia g r a m x m l :( e x t e n s i b l em a r k u pl a n g u a g e ) 扩展型可标记语言,是网络上机 器之间的信息交换基础。 s o a p :( s i m p l eo b j e c ta c c e s sp r o t o c 0 1 ) 简单对象存取协议。是w e b s e r v i c e 的通信协议。当用户通过u d d i 找到你的w s d l 描述文档后,他通过 可以s o a p 调用你建立的w e b 服务中的一个或多个操作。s 0 a p 是x m l 文档形 式的调用方法的规范,它可以支持不同的底层接口,像h t t p ( s ) 或者s m t p 。 w s d l :( w e bs e r v i c e sd e s c r i p t i o nl a n g u a g e ) w s d l 文件是一个x m l 文 档,用于说明一组s o a p 消息以及如何交换这些消息。大多数情况下由软件 自动生成和使用。 u d d i( u n i v e r s a ld e s c r i p t i o n , d i s c o v e r y ,a n di n t e g r a t i o n )是w e b 服务供应商发布服务和使用者发现服务的规范。在用户能够调用w e b 服务之 前,必须确定这个服务内包含哪些业务方法,找到被调用的接口定义,还要 在服务端来编制软件,u d d i 是一种根据描述文档来引导系统查找相应服务 的机制。u d d i 利用s o a p 消息机制( 标准的x m l h t t p ) 来发布,编辑,浏览 以及查找注册信息。它采用x m l 格式来封装各种不同类型的数据,并且发送 到注册中心或者由注册中心来返回需要的数据。 由于本系统采用的是分布式的结构,将查询当前节点的成员籍配置信息 作为一个w e bs e r v i c e 的话,可以将成员籍的管理与其他服务的管理以统一 的标准进行。 西南科技大学硕士研究生学位论文第18 页 3 2 2 成员籍总线的实现 本文采用a x i s 这个w e bs e r v i c e 框架。使用a x i s 进行成员籍总线的开 发,需要在每个节点上进行如下工作: ( 1 ) 下载安装t o m c a t 。 ( 2 ) 到h t t p :w s a p a c h e o r g a x i s 网站下载a x i s 安装包,并部署在 t o m c a t 的w e b a p p s 目录下。 ( 3 ) 增加集群节点的配置信息的查询方法a r r a y l is tg e t m e m b e r s h i p ( s t r i n gn o d e i d ) ,读取本节点的集群配置文件中关于成员籍这一段的信息,并 返回本节点的成员籍数组,数组中存储成员的i d 。由于这部分工作大部分 为字符串解析工作,这里不再赘述。 ( 4 ) 本文采用s t u b s 方式来部署服务,编写w s d d 文件m e m b e r s h i p w s d d : ( 5 ) 发布服务 j a v ao r g a p a c h e a x i s c l i e n t a d m i n c l i e n tm e m b e r s h i p w s d d ( 6 ) 执行如下命令生成m e m b e r s h i p w s d l : j a v ao r g a p a c h e a x is w s d l j a v a 2 w s d l o m e m b e r s h i p w s d l 一l h t t p : 1 9 2 1 6 8 o 1 :8 0 8 0 a x i s s e r v i c e s m e m b e r s h i p n g e t m e m b e r s h i ps e r v e r g e t m e m b e r s h i p ( 7 ) 生成c l i e n ts t u b 文件 j a v ao r g a p a c h e a x i s w s d l w s d l 2 j a v am e m b e r s h i p w s d lp c li e n t 西南科技大学硕士研究生学位论文第19 页 3 2 3 成员籍总线的优点 与目前常见的高可用性双机系统相比,该实现具有如下优点: ( 1 ) 成员籍概念清晰,容易理解。 ( 2 ) 节点新增和退出更简单。对系统来讲,节点的退出和进入只是向总 线报告了“节点进入 和“节点退出 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论