高可用软件 -- Heartbeat

Heartbeat 介绍

什么是 Heartbeat?

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。Heartbeat 是一个开源的高可用性软件,心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

工作原理

Heartbeat 最核心的两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

工作过程

1. 心跳检测和tcp端口检测。当主节点出现故障时,Heartbeat 能够迅速发现并将请求转移到备用节点。

2. VIP管理。Heartbeat 通过 VIP (Virtual IP)的方式实现集群的负载均衡,当主节点出现故障时,VIP会自动切换到备用节点。

3. 数据同步。将主节点上的数据同步到备用节点上,以保证备用节点的数据与主节点保持一致。

4. 自动故障转移。当主节点出现故障时,Heartbeat 能够自动将请求转移到备用节点,以保证业务的连续性。

Heartbeat 的组成

heartbeat                     节点间通信校验模块

CRM                            集群资源管理模块

CCM                            维护集群成员的一致性

LRM                            本地资源管理模块

StonithDaemon           提供节点重启服务

logd                             非阻塞的日志记录

apphbd                        提供应用程序级的看门狗计时器

Recovery Manager     应用故障恢复

底层结构                     包括插件接口、进程间通信等

CTS                            集群测试系统,集群压力测试

术语

1、节点(node):运行Heartbeat进程的一个独立主机。节点有主次之分,分别称为主节点和备用节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源(例如,磁盘、文件系统等)
主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。

2、资源(resource):是一个节点可以控制的实体,当节点发生故障时,这些资源能够被其它节点接管。heartbeat中,可以当做资源的实体有
-  磁盘分区、文件系统
-  IP地址
-  应用程序服务
-  NFS文件系统

3、事件(event):集群中可能发生的事情,例如节点系统故障、网络连通故障等。这些事件都会导致节点的资源发生转移。

4、动作(action):事件发生时HA的响应方式,动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动,进而接管故障节点的资源。

消息类型

Heartbeat 有三种消息类型
1、心跳消息:心跳消息为约150字节的数据包,可能为单播,广播或多播的方式,控制心跳频率及出现故障要等待多久进行故障转移。

2、集群转换消息:ip-request和ip-request-resp
当主服务器恢复在线状态时,通过ip-request消息要求备机释放主服务器失败时备服务器取得的资源,然后备份服务器关闭释放主服务器失败时取得的资源及服务。
备服务器释放主服务器失败时取得的资源及服务后,通过ip-request-resp消息通知主服务器它不在拥有该资源及服务,主服务器收到备节点的ip-request-resp消息通知后,启动失败时释放的资源及服务,并开始提供正常的访问服务。

3、重传请求:rexmit-request控制重传心跳请求,次消息不太重要。

可靠消息通信

Heartbeat通过插件技术实现了集群间的串口、多播、广播和组播通信,在配置的时候可以根据通信媒介选择采用的通信协议,heartbeat启动的时候检查这些媒介是否存在,如果存在则加载相应的通信模块。

对于高可用集群系统,如果集群间的通信不可靠,那么很明显集群本身也不可靠。Heartbeat采用UDP协议和串口进行通信,它们本身是不可靠的,可靠性必须由上层应用来提供。

怎样保证消息传递的可靠性呢?

Heartbeat通过冗余通信通道和消息重传机制来保证通信的可靠性。Heartbeat检测主通信链路工作状态的同时也检测备用通信链路状态,并把这一状态报告给系统管理员,这样可以大大减少因为多重失效引起的集群故障不能恢复。例如,某个工作人员不小心拨下了一个备份通信链路,一两个月以后主通信链路也失效了,系统就不能再进行通信了。通过报告备份通信链路的工作状态和主通信链路的状态,可以完全避免这种情况。因为这样在主通信链路失效以前,就可以检测到备份工作链路失效,从而在主通信链路失效前修复备份通信链路。

Heartbeat通过实现不同的通信子系统,从而避免了某一通信子系统失效而引起的通信失效。最典型的就是采用以太网和串口相结合的通信方式。

选择采用串口通信的原因

    1、IP通信子系统的失效不太可能影响到串口子系统。

    2、串口不需要复杂的外部设备和电源。

    3、串口设备简单,在实践中非常可靠。

    4、串口可以非常容易地专用于集群通信。

    5、串口的直连线因为偶然性掉线事件很少。   

不管是采用串口还是以太网IP协议进行通信,heartbeat都实现了一套消息重传协议,保证消息包的可靠传递。实现消息包重传有两种协议,一种是发送者发起,另一种是接收者发起。

对于发送者发起协议,一般情况下接收者会发送一个消息包的确认。发送者维护一个计时器,并在计时器到时的时候重传那些还没有收到确认的消息包。这种方法容易引起发送者溢出,因为每一台机器的每一个消息包都需要确认,使得要发送的消息包成倍增长。这种现像被称为发送者(或者ACK)内爆(implosion)。

对于接收者发起协议,采用这种协议通信双方的接收者通过序列号负责进行错误检测。当检测到消息包丢失时,接收者请求发送者重传消息包。采用这种方法,如果消息包没有被送达任何一个接收者,那么发送者容易因NACK溢出,因为每个接收者都会向发送者发送一个重传请求,这会引起发送者的负载过高。这种现像被称为NACK内爆(implosion)。

Heartbeat实现的是接收者发起协议的一个变种,它采用计时器来限制过多的重传,在计时器时间内限制接收者请求重传消息包的次数,这样发送者重传消息包的次数也被相应的限制了,从而严格的限制了NACK内爆。

心跳连接

两台服务器安装heartbeat,两台 heartbeat 主机之间通信的一些常用的方法

    1、串行电缆。
    2、一根以太网电缆两网卡。
    3、以太网电缆,通过交换机等网络设备连接。

缺点:增加了交换机故障点,线路不是专用心跳线,容易受其他数据传输的影响。

Heartbeat 的缺点

1. 单点故障
虽然heartbeat方案可以将请求转移到备用节点,但是它本身也存在单点故障的问题,如果heartbeat节点出现故障,将会影响整个集群的高可用性。

2. 数据同步延迟
由于数据同步需要一定的时间,备用节点的数据可能会存在一定的延迟,当主节点出现故障时,可能会丢失一部分数据。

3. 配置复杂
heartbeat方案的配置比较复杂,需要对系统和网络有一定的了解。

Hearbeat和Keepalived区别

1、协议不同:Keepalived使用的VRRP协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP),Heartbeat是基于主机或网络的服务的高可用方式

2、目的不同:Keepalived的目的是模拟路由器的双机,Heartbeat的目的是用户Service的双机

3、使用程度:Keepalived使用更简单,从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat要简单

4、功能不同:Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒换,基本没有管理功能

脑裂现象

脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。

脑裂的原因

       1、心跳链路故障,导致无法正常通信
       2、开启了防火墙阻挡了心跳信息传输
       3、心跳网卡地址等配置不正确
       4、心跳方式,心跳广播冲突,软件bug

防止脑裂的措施

      1、 同时使用串行电缆和以太网电缆连接,同时使用两条心跳线
      2、 检测到裂脑时,强制关闭一个节点
      3、 做好监控预警
      4、 仲裁机制

故障转移

Heartbeat 是通过IP地址接管和ARP广播进行故障转移的

Heartbeat的版本

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux-HA heartbeat源码包是一种用于实现高可用性(High Availability)集群的开源软件。作为一个底层系统工具,它在集群中的节点之间提供了一种心跳机制,用于检测节点的状态和通信。 heartbeat源码包的主要功能是监控集群中的节点,并在发生故障时自动切换到备用节点,以保证系统的连续可用性。它通过不断发送心跳信号来检测节点的状态,一旦检测到节点宕机或出现问题,就会触发自动故障切换。此外,heartbeat还提供了灵活的配置选项,用户可以根据自己的需求进行配置,如定义故障检测算法、设置故障切换策略等。 heartbeat源码包采用C语言编写,具有良好的可移植性和跨平台性,可以在各种Linux发行版和其他Unix操作系统上运行。它基于分布式的架构,支持多种网络通信协议(如UDP、TCP等),能够在不同网络层面上进行心跳通信,确保可靠性和性能。 对于开发者而言,心态源码包提供了丰富的API接口和文档,方便二次开发和定制化。开发者可以通过编写自定义的资源代理来扩展heartbeat的功能,比如添加新的监控指标或自定义故障检测算法等。 总结而言,Linux-HA heartbeat源码包是一个功能强大的高可用性集群软件,提供了可靠的心跳机制和故障切换功能。它通过自动监测节点状态和通信来确保系统的连续可用性,并提供了灵活的配置和扩展选项,可以满足不同用户的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩未零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值