Linux HA Cluster的使用背景

高可用集群,英文原文为High Availability Cluster,简称HACluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。

  高可用集群的出现是为了使集群的整体服务尽可能可用,从而减少由计算机硬件和软件易错性所带来的损失。如果某个节点失效,它的备援节点将在几秒钟的时间内接管它的职责。因此,对于用户而言,集群永远不会停机。

  高可用集群软件的主要作用就是实现故障检查和业务切换的自动化。只有两个节点的高可用集群又称为双机热备,即使用两台服务器互相备份。当一台服务器出现故障时,可由另一台服务器承担服务任务,从而在不需要人工干预的 情况下,自动保证系统能持续对外提供服务。双机热备只是高可用集群的一种,高可用集群系统更可以支持两个以上的节点,提供比双机热备更多、更高级的功能,更能满足用户不断出现的需求变化。

Linux HA Cluster的系统组成,HA Cluster的工作模型

Heartbeat有三个版本分别为Heartbeat v1.x,Heartbeat v2.x,Heartbeat v3.x。

Heartbeat v1.x和Heartbeat v2.x版本的组成结构十分简单,所有模块都集中在heartbeat中,到了v3版本后,整个heartbeat项目进行了拆分,分为不同的项目来分别进行开发。

1.Heartbeat v1.x与v2.x的组件

heartbeat:节点间通信检测模块

ha-logd:集群事件日志服务

CCM(Consensus Cluster Membership):集群成员一致性管理模块

LRM (Local Resource Manager):本地资源管理模块

Stonith Daemon: 使出现问题的节点从集群环境中脱离或重启

CRM(Cluster resource management):集群资源管理模块,高可用集群中任何资源都不应该自行启动,而是由CRM管理启动启动的;

Cluster policy engine: 集群策略引擎

Cluster transition engine:集群转移引擎(也叫策略执行引擎)

ha_aware:如果一个应用程序自己能够利用底层心跳信息传递层的功能完成集群事物决策的过程的软件就叫ha_aware。

DC:Designated Coordinator选定的协调员,当DC所在的主机挂了就会先选出一个DC,再由DC做出事物的决策。注意:在高可用集群中最核心的、最底层的管理的单位叫资源,把资源组合在一起来组合成一个服务。

Heartbeat v1.x与 v2.x区别


在Heartbeat v2.x中增加了一个新的集群资源管理器crm,在Heartbeat v1.x中的集群资源管理器是haresource,Heartbeat v2.x中为了兼容v1.x保留了haresource,但同时又新增了一个功能更强大的crm资源管理器。crm管理方式有,一种是基于命令行crmsh,一种是基于图形界面的hb_gui。

heartbeat v2第二版的时候,heartbeat被做了很大的改进,自己可以做为一个独立进程来运行,并而可以通过它接收用户请求,它就叫crm,在运行时它需要在各节点上运行一个叫crmd的进程,这个进程通常要监听在一个套接字上,端口就是5560,所以服务器端叫crmd,而客户端叫crm(可以称为crm shell),是个命令行接口,通过这个命令行接口就可以跟服务器端的crm通信了,heartbeat也有它的图形化界面工具,就叫heartbeat-GUI工具,通过这个界面就可以配置进行。

Heartbeat v3.x的组件

第三版heartbeat v3,被独立成三个项目heartbeat、pacemaker(心脏起博器)、cluster-glue(集群的贴合器),架构分离开来了,可以结合其它的组件工作了。

Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及它们之前通信。

Cluster Glue:相当于一个中间层,它用来将heartbeat和pacemaker关联起来,主要包含2个部分,即为LRM和STONITH。

Resource Agent:用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。

Pacemaker:也就是Cluster Resource Manager(集群资源管理器,简称CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。

RA:resource agent资源代理,其实就是能够接收CRM的调度用于实现在节点上对某一个资源完成管理的工具,这个管理的工具通常是脚本,所以我们通常称为资源代理。任何资源代理都要使用同一种风格,接收四个参数:{start|stop|restart|status},包括配置IP地址的也是。每个种资源的代理都要完成这四个参数据的输出。

当某一个节点出现故障时,其上面的资源被自动转移到其它正常的备用节点上并启动的这个过程叫故障转移,也称为失效转移(failover)。

如果出现故障的节点又回来的,那我们就要把这个节点添加回来,那这个添加回来的过程我们就叫失效转回,也称故障转回(failback)。

Heartbeat的各版本区别

与v1.x风格相比,Heartbeat v2.x版本之后功能变化如下:

1.保留原有所有功能

2.自动监控资源

默认情况下每2分钟检测资源运行情况,如果发现资源不在,则尝试启动资源, 如果60s后还未启动成功,则资源切换向另节点。时间可以修改。

3.可以对各资源组实现独立监控

比如apache运行在node1上,mysql运行在node2上,Heartbeat可同时实现两台主机的服务监控

4.同时监控系统负载

可以自动将资源切换到负载低的node上

5.新增crm资源管理器

crm管理器可以让heartbeat基于图形界面管理,即hb_gui

与v2.x风格相比,Heartbeat 3最主要变化是功能拆分,Heartbeat官方最后一个STABLE release 2.x 版本是2.1.4,Heartbeat 3官方正式发布的首个版本是3.0.2,Heartbeat 3与Heartbeat2.x的最大差别在于,Heartbeat3.x按模块把的原来Heartbeat2.x拆分为多个子项目,但是HA实现原理与Heartbeat2.x基本相同,配置也基本一致。