在日常的集群系统架构中,一般用到Heartbeat的主要就2种:
1)高可用(High Availability)HA集群, 使用Heartbeat实现,也称为”双机热备”, “双机互备”, “双机”;
2)负载均衡群集(Load Balance Cluster),使用Linux Virtual Server(LVS)实现;
Heartbeat 的介绍
Heartbeat是Linux-HA项目中的一个组件,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat项目里,由heartbeat模块实现了这两个功能。Heartbeat是目前开源HA项目中十分成功的一个例子,它提供了所有 HA 软件所需要的基本功能,比如心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享 IP 地址的所有者等,自1999年开始到现在,Heartbeat在行业内得到了广泛的应用。heartbeat最核心的功能包括两个部分,心跳监测和资源接管。心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。
Hearbeat和Keepalived区别
1) Keepalived使用的VRRP协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP);
2) Heartbeat是基于主机或网络的服务的高可用方式;
3) Keepalived的目的是模拟路由器的双机;
4) Heartbeat的目的是用户Service的双机;
5) LVS的高可用建议用Keepavlived;
6) 业务的高可用用Heartbeat;
Keepalived 主要控制IP飘移,配置应用简单,而且分层,layer3,4,5,各自配置极为简单
Heartbeat 不但可以控制IP飘移,更擅长对资源服务的控制,配置,应用比较复杂;
HA集群中的相关术语
.节点(node)
运行heartbeat进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和heartbeat软件服务,在heartbeat集群中,节点有主次之分,分别称为主节点和备用/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。
.资源(resource)
资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管,heartbeat中,可以当做资源的实体有:
- 磁盘分区、文件系统
- IP地址
- 应用程序服务
- NFS文件系统
.事件(event)
集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。
.动作(action)
事件发生时HA的响应方式,动作是由shell脚步控制的,例如当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务关闭或启动, 进而接管故障节点的资源。
HeartBeat 的组成
Heartbeat提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等等,目前的最新版本是Heartbeat2.x,下面讲述也是以Heartbeat2.x为主,主要介绍Heartbeat2.0的内部组成,主要分为以下几大部分:
.heartbeat: 节点间通信检测模块
.ha-logd: 集群事件日志服务
.CCM(Consensus Cluster Membership):集群成员一致性管理模块
.LRM (Local Resource Manager):本地资源管理模块
.Stonith Daemon: 使出现问题的节点从集群环境中脱离
.CRM(Cluster resource management):集群资源管理模块
.Cluster policy engine: 集群策略引擎
.Cluster transition engine:集群转移引擎
下图显示的是Heartbeat2.0内部结构组成
Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序,要监控资源和应用程序是否运行正常,必须使用第三方的插件,例如ipfail、Mon、Ldirector等。Heartbeat自身包含了几个插件,分别是ipfail、Stonith和Ldirectord,介绍如下: