一、什么是HA?

   HA(High Availability,简称HA),就是高可用性集群通过一组计算机系统提供透明的冗余处理能力,从而实现提供不间断的响应服务。其中每一台提供服务的计算机称为节点(Node)。当一个节点不可用或者不能处理客户的请求时,响应该请求的服务会及时转移到另外的可用节点来处理,而这些对于客户端是透明的,客户也不会去关心使用的资源具体是怎么提供的,集群系统会自动完成。


二、衡量标准

   计算机系统的可用性(availability)是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:MTTF/(MTTF+MTTR)*100%

99% 一年宕机时间不超过90h

99.9% 一年宕机时间不超过10h

99.99% 一年宕机时间不超过1h

99.999% 一年宕机时间不超过6min

其实在一般企业应用中能达到99.9%或99%基本能满足公司业务的开展,而且2个9或3个9在实现中需要的成本及其难度相对5个9要小很多很多,在一般的企业级应用中能做到3个9基本就够了,当然能做到5个9那是最好,但是有些时候在追求极致的同时也会产生过犹不及情况(当然不是人人都是乔布斯,个人谬论不当之处请别较真~~)。


三、HA的架构层次

174222695.jpg

   在上图中我们将HA大致分为3个层次,心跳传递层、资源管理、资源服务代理,那么它们是怎么工作的呢?我是这样来理解的:

   从上图中我们可以清晰的看到左右两个节点(node),左节点与右节点的不同之处在于左节点多了一个策略引擎(Policy Engine,简称PE),所以可以看出左节点是主节点(A节点),右节点是备节点(P节点),A、P节点将底层的心跳信息相互传递并汇报给各自的CRM(集群资源管理器),CRM通过心跳信息来判断彼此节点的存活状态并相互通告。

   1、PE是怎么启动本节点的资源的呢?

       PE通过最终决策将需要启动的资源告知给 CRM,CRM通过本节点的LRM来执行资源代理,从而达到启动本节点的资源。在A、P节点中的LRM是不能彼此通讯的。

   2、如果当A节点故障了,服务怎么转移到P节点?

       从上图中我们可以很明显看出DC(Designated Coordinator)位于左节点,如果A节点故障了或服务关闭了(节点心跳信息传递服务),PE会回收在当前节点上运行的集群资源,P节点就会提升为主节点并启动本节点的PE模块,再启用定义的集群资源,同时自己由P节点转变为A节点并获得DC的权力。


四、常用的HA开源软件

   1、heartbeat

   2、corosync(openais)

   3、RHCS(Red Hat Cluster Suite): cman

   4、keepalived


五、相关概念

   1、CRM(Cluster Resource Manager)集群资源管理,

       1.1、资源管理器:    

           heartbeat v1: haresources

           heartbeat v2: crm

           heartbeat v3: pacemaker

           corosync: pacemaker

           cman: rgmanager

           RHEL 6.4:cman, corosync


       1.2、资源类型:  

           primitive(native):基本资源,原始资源

           group:资源组

           clone:克隆资源(可同时运行在多个节点上),要先定义为primitive后才能进行clone

           master/slave:主从资源,如drdb


       1.3、资源约束:

           location:资源对节点的偏好

           colocation:资源运行在同一个节点上的可能性

           order: 资源采取动作的次序

           资源粘性表示资源是否倾向于留在当前节点,如果为正整数,表示倾向,负数则会离开,-inf表示正无穷,inf表示正无穷


   2、RA(Resource Agent)资源代理:

       Lsb:linux表中库,一般位于/etc/rc.d/init.d/目录下的支持start|stop|status等参数的服务脚本都是lsb

       ocf:Open cluster Framework,开放集群架构

       heartbeat:heartbaet V1版本

       stonith:专为配置stonith设备而用