heartbeat理论介绍


1、heartbeat作用

 通过heartbeat,可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另外一台正常运转的机器上继续提供服务,一般称之为高可用服务,在实际生产应用场景中,heartbeat的功能和另外一个高可用开源软件keepalived有很多相同之处,在我们生成实际的业务应用也是区别的

 官方网站:http://linux-ha.org/wiki/Main_Page

 

#########################################################

2、heartbeat工作原理 

 通过修改heatbeat软件的配置文件,可以指定哪一台heartbeat服务器作为主服务,则另外一台将自动成为热备服务器,然后在热备服务器上配置heartbeat守护进程来监听来自主服务器的心跳消息,如果热备服务器在指定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源服务的所有权,接替主服务器继续不间断的提供服务,从而达到资源及服务的高可用性的目的

 

 以上描述的就heartbeat主备的模式,heartbeat还支持主主模式,即两台服务器互为主备,这时它们之间会相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的心跳报文,那么,一方就会认为对方失效或者宕机了,这时每个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务,一般情况下,可以较好的实现一台主机故障后,企业业务仍能够不间断的持续提供服务。

 注意:所谓的业务不间断,在故障转移期间也是需要切换时间的,heartbeat的切换时间一般是在5-20秒左右

 另外:和keepalived服务一样,heartbeat高可用是服务器级别的,不是服务级别。

 切换的常见条件

 a、服务器宕机

 b、heartbeat服务本身故障

 c、心跳连接故障

 服务故障不会导致切换,但是可以通过服务宕机了,把heartbeat服务停掉


######################################################### 

3、heartbeat心跳连接

 经过前面的叙述,读者应该很清楚,要部署heartbeat服务,至少需要两台主机来完成,那么,要实现高可用服务,这两台主机之间是如何 相互通信和相互检测?

 下面是两台heartbeat主机直接通信的一些常用可行的办法:

 

 a.串行电缆。(缺点距离不能太远)

 b.一根以太网电缆两网卡直接连线。(推荐方法)

 c.以太网电缆,通过交换机等网络设备连接(次选:原因,增加交换机的故障点)

   次选的原因,增加了交换机的故障点,同时。线路不是专业心跳线,容易受其他数据传输的影响,导致心跳报文发送问题

   

   提示:高可用服务对上的heartbeat软件会利用这条心跳线来检查对端的机器是否存活,进而决定是否做故障转移,资源切换,来保证业务的连续性

   如果条件允许,以上的连续可同时使用,来加大保险系数来防止脑裂问题的发生,在生产环境中,常使用前两者之一或者结合来使用。


######################################################### 

4、heartbaet裂脑

  a、什么是裂脑

  由于高可用服务器直接在指定的时间内,无法相互检测到对方心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务器对都还活着,并正常运行,这样就会导致同一个IP资源或者服务在两端同时启动而发生冲突的严重问题,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据丢失,这种情况被称为裂脑,也有的人称其为分区集群或者大脑垂直分割

 

  b、裂脑的发生原因


1.高可用服务器对之间心跳链路故障,无法导致正常通行。(如心跳线坏了,断了,老化了,网卡坏了,网卡驱动坏了,以太网IP配置冲突了,冲裁的机器出现问题)

2.高可用服务器对开启了防火墙,阻挡了心跳消息传输

3.高可用服务器对上下心跳网卡地址等信息配置不正确,导致发送心跳失败

4.仲裁的机器出现问题

5.其他服务配置不宕等原因,如心跳方式不同,心跳广播冲突、软件bug等

  c、防止裂脑发生的8种秘籍

    发生裂脑时,对业务的影响是极其严重的,有时甚至是致命的,如:两台高可用服务队之间发生裂脑,导致相互争用同一个IP资源,就如同我们在局域网内衣常见的IP地址冲突一样。两个机器就会有一个或者两个都不正常,影响用户正常访问服务器,如果是应用在你数据库或者存储服务这种极其重要的高可用上,那就可能导致用户发布的数据间断的写在两台不同的服务器上的恶果,最终数据恢复极其困难或者难于恢复。(当然,有NAS等公共存储的硬件也许会好一些)

 

  实际生产环境中,我们可以从以下几个方面来防止裂脑问题的发生

1.同时使用串行电缆和以太网电缆连接,同时用两条心跳路线,这样其中一条出现坏了,另外一条还是好的,依然能够传送心跳消息。

2.检测到裂脑是强行关闭一个心跳节点。(这个功能需要特殊设备支持,如stoninth、fence)。相当于程序上备用节点发现心跳 线路故障,发生关机命令到主节点。

3.做好对裂脑的监控报警,(如邮件已经手机短信等。),在问题发生时候人为第一时间介入仲裁,降低损失,当然,在实施高可用方案时,要根据业务实际需求确定是否能够容忍这样的损失,对于一般的网站业务,这个损失是可控的。

4.启动磁盘锁。正在服务一方锁住共享的磁盘,当裂脑发生时,让对方完全抢不到共享的磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘一方不主动解锁,另外一方就永远得不到共享磁盘的使用权限。在现实中可能会存在服务节点突然死机或者崩溃,就不可能执行解锁命令。这样后背节点也就接管不了共享资源和应用服务了。或者开发智能锁。  

        5.报警包在服务器接管之前,给人员处理留足够的时间

 如:一分钟报警了,但是服务此时没有接管,而是5分钟后接管,接管时间较长,但是数据不会丢失,导致用户无法写数据

6.报警后,不直接自动服务接管,而是由人为人员控制接管

7.增加冲裁机制,确定谁该获得资源。

 

fence只是HA集群环境中的一个术语,在硬件领域,fence设备其实就是一个智能电源管理设备,有内部fence,也有外部fence。


######################################################### 

  5、heartbeat消息类型

a.心跳消息

b.集群转换消息(ip-request、ip-request-resp)

c.重传请求

  

   心跳消息:心跳消息为约150字节,可能我单播,广播或多播。控制心跳频率已经出现故障时候要等待多久进行故障切换

   

集群转换消息:(ip-request和ip-request-resp)

在主节点故障修复好之后,通过ip-request消息要求备机释放主服务失败时备服务器取得的资源,然后备份服务器关闭释放主服务器失败时取得的资源及服务。

备服务器释放主服务器失败时取得的资源及服务后,就会通过ip-request-resp消息通知主服务器它不在拥有该资源以及服务,主服务器收到备节点的ip-request-resp消失通知后,启动失败时释放的资源及服务,并开启提供正常的访问

重传请求:

rexmit-request控制重传心跳请求,这消息不是很重要,


#########################################################

 6、heartbeat IP地址接管和故障转移(注意点)

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

  ARP广播:在主服务器故障时,备用节点接管资源后,会立即强制更新所有客户端本地的ARP表(即清除客户端本地缓存的失败服务器的VIP地址和MAC地址的解析记录)。确保客户端和新的主服务器正常连接

  用arp -a 可以参考windows本地的arp缓存

 

#########################################################

 7、VIP/IP 别名/辅助IP

   真实IP,有称为管理IP,一般指配置在物理网卡上的实际IP,这可以看做你本人的姓名。在负载均衡及高可用环境中,管理IP一般是不对外提供用户访问的服务。而仅仅是管理服务器用的,如SSH可以通过这个管理IP连接服务器

   VIP是虚拟IP,这仅仅是一个概念而已,可能会误导你,实际上就是heartbeat临时绑定在物理网卡上的别名IP(heartbeat3以上才有了辅助IP),如eth0:X X为0-255中的任意数字,你可以在一个网卡中绑定多个别名IP。在实际生产环境中,需要在DNS配置中把网站域名地址解析到这个VIP地址,有这个VIP对用户提供服务

   这样的好处就是当提供服务的服务器宕机后,在接管的服务器上回直接自动配置上同样的VIP提供服务,如果是使用管理IP的话,来回迁移就难以做到,而且,管理IP迁移走了,我们就只能到机房连接服务器了,VIP的实质就是确保两台服务器各有一个管理IP不懂,就是随时可以连接上机器,然后增加绑定其他的IP,这样就算VIP转移了,也不至于服务器本身连接不上,应为还有管理IP。


  手工配置VIP的方法

  别名IP的配置方法:

  ifconfig eth0:10 10.0.0.1/24 up(别名IP配置)

ifconfig eth0:10 down(别名IP删除) 

  辅佐ip用ip add 查看。配置方法:

ip addr add 10.0.15.1/24 broadcast 10.0.15.255 dev eth0 (辅佐IP配置)

ip addr del 10.0.15.1/24 broadcast 10.0.15.255 dev eth0 (辅佐IP删除)

 

 其中用ip add 可以查看到辅助IP和别名IP,但是ifconfig却无法查看辅助IP


heartbeat和keepalived在启动时就分别利用上面的命令配置VIP,在停止是也用上面来的命令来删除VIP。以上两种配置和删除VIP,在高可用环境中的作用是一样的,没有什么区别,只是由于当时系统环境等历史原因,选择的配置命令不一样

 

 heartbeat 在heartbeat3之前使用的是别名IP,heartbeat3以后和keepalived一样,使用辅助IP.

 

#########################################################

 9、heartbeat脚本默认目录

 

 启动脚本:/etc/init.d/

 资源目录:/etc/ha.d/resource.d/

 /etc/ha.d/resource.d/这是heartbeat的重要资源目录,如果以后自己开发程序,就放在这个地方,然后直接在haresource文件里面直接调用

 

#########################################################

 10.heartbaet配置文件

 heartbeat的默认配置文件目录为/etc/ha.d。

heartbeat常用的配置文件有三个,分别是ha.cf 、authkey、haresource。如果你细看,就发现名字信息就如其实际的功能,具体功能如下

 

 配置名称   作为 备注

 ha.cf heartbeat参数配置文件 在这里配置heartbeat的一些基本参数

 authkey heartbeat的认证文件 高可用服务对之间根据对端的authkey,对对端进行认证

 haresource heartbeat资源配置文件 如配置IP资源及脚本程序等

 

 重要资源目录:/etc/ha.d/resource.d/,如果以后自己开发开发程序,就放在这个地方,然后haresource文件里直接调用即可

 

 

 部署heartbeat高可用需求

 一般前端的web不用heartbeat。而是使用keepalived、lvs、nginx、haproxy

 一般在后端的存储、数据库等资源同步的使用heartbeat更加好。

 

来源:老男孩架构师视频