集群
- 1 集群介绍
- 2 集群分类
- 1. 高可用性集群(High Availability Cluster)HA
- 2. 负载均衡集群(Load Balance Cluster)LB
- 3. 高性能集群(High Performance Computing Cluster)HPC
- 3 HA集群逻辑架构
- 1. 信息层/基础架构层(Messaging/Infrastructure)
- 2. 成员关系层(Membership)
- 3. 资源分配层(Resource Allocation layers)
- 4. 资源层(Resource Layer)/资源代理层(Resource Agents)
- 4 HA集群软件
- 1. Messaging and Membership Layer(信息与关系层)
- 2. Cluster Resource Manager Layer(资源管理层,CRM)
- 3. 常用组合
- 5 HA集群的衡量标准
- 6 HA集群术语
1 集群介绍
计算机集群简称集群(Cluster)是一种计算机系统, 它通过一组松散集成的计算机软件/硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多。
而所谓高可用集群(High Availability Cluster,简称HA Cluster),即当前服务器出现故障时,可以将该服务器中的服务、资源、IP等转移到另外一台服务器上,从而满足业务的持续性;这两台或多台服务器构成了服务器高可用集群。
2 集群分类
1. 高可用性集群(High Availability Cluster)HA
运行于两个或多个节点上,目的是在系统出现某些故障的情况下,最大限度地减少服务中断时间,保障应用程序持续提供服务的能力。这类集群中比较著名的有keepalived、TurbolinuxTurboHA、Heartbeat、Kimberlite 等。对于此类集群还有很多通俗的名称,如“双机热备”, “双机互备”等。
高可用集群是服务的可用性比较高,当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器宕机就不会对其在做转发,衡量标准:可用性=在线时间/(在线时间+故障处理时间),就是通常我们说的可用性99%、99.9%、99.99%等等,在业内常见开源解决方案有heartbeat、keepalived等等;
2. 负载均衡集群(Load Balance Cluster)LB
提供和节点个数成正比的负载能力,这种集群适合需要提供大负载访问量的服务,如Web。这类集群中比较著名的有Turbolinux Cluster Server、Linux Virtual Server。此类集群把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。
负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部所定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求,从而解决高并发的问题。在扩展中可非常容易的使用scale out扩展,从而实现集群的伸缩性,在业内常见开源解决方案有lvs、haproxy、nginx、ats;
3. 高性能集群(High Performance Computing Cluster)HPC
利用计算集群软件将多个节点的计算机联结在一起,完成通常只有超级计算机才能完的计算任务。
HP:高性能的集群是当某一个任务量非常大的时候,我们做一个集群共同来完成这一个任务。这种处理方式我们称为并行处理集群,并行处理集群是将大任务划分为小任务,分别进行处理的机制,常常用于大数据分析,海量资源整合,目前比较出名的就是Hadoop。
总之,在实际生产环境中我们都可以根据实际情况来挑选合适的集群解决方案,3种集群的侧重各有不同,LB集群着重在于提供服务并发处理能力,HA集群以提升服务在线的能力实现服务不间断,HP集群着重用于处理一个海量任务
3 HA集群逻辑架构
可以看出一个高可用集群分为四层架构(Architecture Layers) :
- 信息层/基础架构层(Messaging/Infrastructure)
- 成员关系层(Membership)
- 资源分配层(Resource Allocation layers)
- 资源层(Resource Layer)
1. 信息层/基础架构层(Messaging/Infrastructure)
传递心跳信息,集群事务信息,是一个高可用集群最基本最底层非常重要的子层,靠一个单独的服务组件来实现。 类似于TCP/IP协议的物理层,真正的通讯是靠该层实现。
主要的作用是传递当前节点的心跳信息,并告知给对方,这样对方就知道其他节点是否在线。如果不在线,则可以实现资源转移,这样另一台节点就可以充当主节点,并正常提供服务。传递心跳信息一般使用一根心跳线连接,该线接口可以使用串行接口也可以是以太网接口来连接。每一个节点上都包含信息层。
可以提供该组件的软件有:
- heartbeat
- corosync(openAIS的子项目)
- keepalive
- cman
Heartbeat 是比较常用的软件,Keepalived配置相对比较简单,而ultramonkey好像不怎么常用,Corosync比heartbeat功能还要强大,功能更加丰富。
heartbeat有三个版本即heartbeat v1、heartbeat v2和heartbeat v3,heartbeat v1是比较老的版本,heartbeat v2是目前稳定的版本,在做实验的时候使用该版本。
2. 成员关系层(Membership)
法定票数的计算与统计,重新收敛生成状态信息的层次,为上层进行资源分配提供依据的基础
这层最重要的作用是通过CCM(Cluster Consensus Menbership Service)服务由Messaging层提供的信息,来产生一个完整的成员关系。
组件有:
- CCM
核心工具CCM(Cluster Consensus Membership)服务的作用:承上启下,监听底层接受的心跳信息,当监听不到心跳信息的时候就重新计算整个集群的票数和收敛状态信息,并将结果转递给上层,让上层做出决定采取怎样的措施,CCM还能够生成一个各节点状态的拓扑结构概览图,以本节点做为视角,保证该节点在特殊情况下能够采取对应的动作
3. 资源分配层(Resource Allocation layers)
这层主要是实现资源管理,包含组件有:
- CRM(集群资源管理器,Cluster Resource Manager)
- CIB(集群信息基库,Cluster Information Base)
- LRM(本地资源管理器,Local Resource Manager)
- PE(策略引擎,Policy Engine)
- TE(实施引擎,Transition Engine)
组件详细介绍:
- CRM(集群资源管理器,Cluster Resource Manager)
用来实现资源的分配,资源分配的每个动作都要通过CRM来实现,是核心组件,每个节点上的CRM都维护一个CIB(集群信息基库 ,Cluster Information Base)。定义资源特定的属性,哪些资源定义在同一个节点上- 每一个动作都要通过CRM来实现,很多资源的定义都可以通过CRM定义
- 在每一个节点上每一个节点都维护着一个CIB,只有工作在DC(Designated Coordinator指定协调员,主节点挂掉会选出新的DC)上的才可以修改
- CIB(集群信息基库,Cluster Information Base)XML格式的主配置文件,在内存中的一个XML格式的集群级别的配置文件,只是保存在文件中,工作的时候常驻内存并且需要通知给其它节点,只有DC上的CIB才能进行修改,其他节点上的CIB都是拷贝DC上
- LRM(本地资源管理器,Local Resource Manager),获取本地某个资源的状态,并且实现本地资源的管理,如当检测到对方没有心跳信息时,来启动本地的服务进程等
- PE(策略引擎,Policy Engine),来定义资源转移的一整套转移方式,但只是做策略者,并不亲自来参加资源转移的过程,而是让TE来执行自己的策略,只能在DC上运行
- TE(Transition Engine): 将决策结果传递给其他被选中的节点来进行资源的转移或者动作,只能在DC上运行
资源:在集群中构成一个完整服务的每一部分都叫资源,都需要配置和管理。以web应用为例:vip是资源,web服务器是资源,存储也是资源。不同的服务的资源也不尽相同,其中存储资源的选择、配置、管理是高可用集群中的难点问题。
第三层的主要作用就是实现资源管理,真正提供资源的要靠资源本身 如:IP地址,httpd ,共享存储
4. 资源层(Resource Layer)/资源代理层(Resource Agents)
集群资源代理,能够管理本节点上的属于集群资源的某一资源的启动,停止和状态信息的脚本,只有对资源应用以后进行管理后才算是提供了高可用服务。资源代理分为:LSB(/etc/init.d/*),OCF(比LSB更专业,更加通用)。
任何资源代理都要使用同一种风格,接收四个参数:{start|stop|restart|status}
,每个种资源的代理都要完成这四个参数据的输出。
核心工具有以下几种
- LSB(Linux Standard Base),这是一种我们常见的如/etc/init.d/下的标准linux脚本风格
- OCF(开放式集群框架,Open Clustering Framework) OCF脚本是比LSB更强大的一种脚本,支持更多的参数
- heartbeart 早期提供的资源管理机制
- 特定集群服务开发人员自定义的资源代理 如:DRBD
工作机制:PE根据CIB获取资源的配置信息(集群上的所有信息都会收集到DC的CIB,同步到其它节点),而后做出决策,一旦做得决策就会进行资源的管理。PE借助于本地的CCM通知给其它节点CIB来实现对某些资源管理信息的传递,比如说通告其它CRM要启动某一资源了,收到信息后CRM并不负责启动,转由LRM(Local Resource Manager本地资源管理)启动,而并发资源又借助于RA(Resource Agent资源代理)实现资源管理。
4 HA集群软件
1. Messaging and Membership Layer(信息与关系层)
① heartbeat (v1,v2,v3)
② corosync
③ cman
④ keepalived
⑤ ultramokey
2. Cluster Resource Manager Layer(资源管理层,CRM)
① haresource,crm (heartbeat v1/v2)
② pacemaker (heartbeat v3/corosync)
③ rgmanager (cman)
3. 常用组合
① heartbeat v2+haresource(或crm) (一般常用于CentOS 5.X)
② heartbeat v3+pacemaker (一般常用于CentOS 6.X)
③ corosync+pacemaker (现在最常用的组合)
④ cman + rgmanager (红帽集群套件中的组件,还包括gfs2,clvm)
⑤ keepalived+lvs (常用于lvs的高可用)
5 HA集群的衡量标准
高可用性群集(High Available), 是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。
通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。
故:HA=MTTF/(MTTF+MTTR)*100%
具体HA衡量标准:
- 99% 一年宕机时间不超过4天
- 99.9% 一年宕机时间不超过10小时
- 99.99% 一年宕机时间不超过1小时
- 99.999% 一年宕机时间不超过6分钟
6 HA集群术语
- 集群节点
集群存在所有主机都称为节点,每个HA集群最低要求需有2个节点;正常来说,节点数最好为奇数。在生产环境中,HA集群的节点数至少为3个,可以降低发生脑裂的概率。 - 集群服务与资源
集群服务通常包括多个资源,多个资源组成某种集群服务。如mysql高可用服务,其资源包括vip、mysqld、共享存储等。资源是启动一个服务需要的子项目。例如启动一个httpd服务,需要ip,也需要服务脚本,还需要文件系统(用来存储数据的),这些我们都可以统称为资源。对于集群服务的管理,实际上就是对资源的管理。 - 脑裂
脑裂是指因某种特殊原因造成集群分裂成两个小集群,而这两个小集群互相不能正常通信,此时,就会发生脑裂(Brain Split)现象。 - 共享存储
高可用集群多节点都需要访问数据,如果各节点访问同一个数据文件都是在同一个存储空间内的,就是说数据共享的就一份,而这个存储空间就共享存储。如Web或Mysql高可用集群,他们的数据一般需要放在共享存储中,主节点能访问,从节点也能访问。 - STONITH(Shoot The Other Node in the Head,“爆头”)组件
这种机制直接操作电源开关,控制故障节点的电源开关,通过暂时断电又上电的方式,使故障节点重启,这种方式需要硬件支持。
主节点在某一段时间由于某种原因,没时间传递心跳信息,这个时候集群会选取新的DC,重新分配资源提供服务,如果主节点服务器还没有宕掉,这样就会导致服务器分隔、资源争用,这种情况被称为脑裂(brain-split)。此时,用户能访问,一旦有写的操作,就会导致文件系统崩溃,损失惨重。为避免这种情况,新的DC一旦产生,第一时间对主节点执行stonith,这种操作叫做资源隔离。 - 资源隔离
节点级别:这种就叫STONITH,直接把对方的电源给切断,一般这种主机都是连接到电源交换机上的。
资源级别:同样需要依赖一些硬件设备来完成。比如节点通过光纤交换机连接到共享存储,通过把需要踢除出去的节点的光纤接口屏蔽来实现资源隔离。 - 仲裁设备
ping node:两个节点的模式下,一旦其中一个节点发生故障,发生集群分隔以后,无法判定哪个节点不正常,但工作正常的节点一定是可以连到互联网,故正常的节点是可以跟前端路由通信,所以可以把前端路由当成第三个节点,如果可以ping通,那就说明自己是正常的,可以将对方隔离掉。
qdisk: RHCS(红帽官方提供的集群套件)不是使用ping节点来判断,而是使用一个共享存储的设备,节点按照心跳信息频率每隔一个信息频率时间就往磁盘里写一个数据位,如果设备每隔一个心跳时间间隔就更新一次数据位,就说明这个设备处于活动状态的,可以将对方隔离掉。
下一篇 CHAPTER 2 Web HA集群部署 - Heartbeat