Hearbeat 学习 上


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



    Hearbeat 简介

 Hearbaet 一款开源高可用(Highly-Available)服务的软件,通过hearbeat,  可以将资源(ip及程序服务等资源)从一台已故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。在实际成产应用场景中,heartbeat的功能和另一个高可用开源软件keeplived有很多相同之处,但在生产中,对应实际的业务应用也是有区别的,例如:keeplived主要是控制ip的漂移,配置、应用简单,而hearbeat则不但可以控制ip的漂移,更擅长对资源服务的控制(mysql的重启),配置,应用比较复杂。






Heatbeat工作原理

keeplived和hearbeat高可用是操作系统级别的,不是(软件级别的),可以通过简单的脚本,实现软件级别的高可用。

       hearbeat的主备模式 ,通过修改heatbeat软件的配置文件,可以指定那一台hearbeat服务器为主服务器,则另一台将自动成为热备服务器。然后再热备服务器上配置Hearbeat守护程序来监听自服务器的心跳信息。如果热备服务器在指定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器的相关资源服务的权限,接替主服务器继续不间断的提供服务,从而达到资源及服务高可用性的目的。
       hearbeat还支持主主模式(可以针对不同的业务),及两台服务器互为主备,这时他们之间会相互发送报文来告诉对方自己的当前的状态,如果在指定的时间内未收到对方发送的心跳报文,那么一方就会认为对方实效或者宕机,这时美个运行正常的主机就会启动自身的资源接管模块来接管运行在对方主机上的资源或者服务,继续为用户提供服务。一般情况下,可以较好的实现一台主机故障后,企业服务仍能够不间断的持续运行。注意,所谓的业务不间断,在故障转移期间也是需要切换时间的(例如:停止数据库及存储服务等),hearbeat的主备高可用的切换时间一般是在5-20秒左右(服务器的宕机比人工切换服务快)。

                      


      高可用服务器切换

          常见条件场景


1)、服务器物理宕机(硬件损坏,操作系统故障)。

此为主要解决目标!

2)、hearbeat服务软件本身故障。

3)、两台主备服务器之间心跳连接故障。

服务故障不会导致切换。可以通过服务宕机把hearbeat服务宕掉。











Hearbeat心跳链接方法(至少需要两台主机来完成


1、利用串行电缆,即所谓的串口线连接两台服务器(可选)|常用


串口线信号不会和以太网网络交集,也不需要单独配置ip地址等信息,因此传输稳定不容易出问题,使用串口的缺点时两个服务器之间距离不能太远。

串口线对应服务端的设备为/dev/ttyS0

 2、一根以太网电缆两网卡直连(可选)|常用 使用以太网网线(无需特殊的交叉线)直连网卡的方式,配置也比较简单,只需对这两块直连网线的网卡配置好独立的ip段地址能够互相通信即可,普通的网线就可以。
3、以太网电缆,通过交换机等网络设备连接(次选) 使用联网以太网线和网卡作为心跳线时次选方案,因为这个链路里增加了交换机设备这样的故障点,且这个线路不是专用心跳线路,容易受以太网其他数据传输的影响,导致心跳报文发送延迟活着无法送达问题。

             

         心跳选择方案

提示:以上连接可同时使用,来加大保险系数防止裂脑问题发生。

1、和数据相关的业务,要求较高,可以串口和网线直连的方式并用。
2、web、http业务,可以网线直连的方式或者局域网通信方式也可以。



       Hearbeat 裂脑

(无法接收主备节点心跳,导致节点各自启动资源和服务)

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

裂脑发生原因总结:

1、高可用服务器之间心跳链路故障,导致无法正常通信。(包括线路故障、网卡驱动损坏,ip配置冲突、冲裁机制等)|常见
2、高可用服务器开启iptables防火墙阻止心跳消息传输;|常见
3、高可用服务器上心跳网卡地址信息配置不正确,导致发送心跳失败。|常见
4、其他服务配置不当等原因,如心跳方式不同,心跳广播冲突、软件bug等;








   防止裂脑

   方式总结

1、同时使用串行电缆和以太网电缆,同时使用两条心跳线。  常用

2、当检测到裂脑时强行关闭心跳节点。

相当于程序上备节点发现心跳线故障,发送关机命令到主节点

(场景使用较少,银行使用较多,需要特殊设备支持,如stonith 杀死其它节点、fence)


3、监控报警 (依赖报警)

方式1:探测备节点是否有vip,然后探测主服务是否有异常)

( 人工介入冲裁,对网站常规业务,例如百度报警监控上下行)

或者在报警在服务器接管之前,给人员处理留足够的时间。


4、启用磁盘锁。(使用较少)

即:正在服务的一方只在发现心跳全部断开时才启用磁盘锁,平时不上锁,此功能适用于共享场景;比如oracle


5、增加仲裁机制

(仲裁一般是网关,不可能挂)

当心跳全部断开时,两个节点各自ping参考ip,不通主动放弃竞争或自我重启,让通的一端接管服务。
通过第三方软件仲裁获得资源

名词解释:fence


1、fence是集群环境下的术语;

2、fence设备在硬件领域是智能电源管理设备;

(俗称:智能电源管理设备或远程管理卡,带有以太网口,用来在ha切换触发时通过网络重启提供资源服务,在不知道就百度)


名词解释:仲裁


在RHCS下有仲裁机制是有一个叫仲裁盘的东西,通过额外的存储实现,比如SAN , 通过mkqdisk 命令来制作的一个特殊块设备。默认情况在双节点的ha架构,主从服务器的投票数都是1,双方时平等的,当心跳有问题的时候就会发生裂脑。这个仲裁在RHCS可以设置投票数,节点双方使用ping网关的方式将自己的存活状态写入仲裁盘内,一旦节点心跳发生问题,并且仲裁盘没有收到节点存活信息,则启动fence关闭或重启故障节点 。

注意:

前提都是主备无法通信(心跳)的时候发生;

例如ping网关、主备和仲裁设备连接、由仲裁设备控制主备服务器电源


名词解释:stonith


它是hearbeat软件包的一个组件,它允许使用一个远程或“智能的”连接到健康服务器的电源设备自动重启实效服务器的电源,sthonith设备可以关闭电源并响应软件命令,运行hearbeat的服务器可以通过串口线或网线向stonith设备发送命令,它控制高可用服务器对中其他服务器的电力供应。(理论上对服务器数量没有限制,但最好是两台)

心跳参考博文:http://blog.chinaunix.net/uid-7921481-id-1617030.html


Hearbeat消息类型:

心跳消息 心跳消息为约150字节数据包,可能为串口,单播、广播或多播的方式,控制心跳频率及出现故障等待多久进行故障转移。
集群转换消息
ip_request和ip_request_resp

当主服务器恢复在线状态时,通过ip_requset

消息要求备机释放主服务器失败时报备服务器取得资源,;备服务器释放主服务器失败时取得的资源及服务后,通过ip_request——resp消息通知主服务器它不再拥有该资源及服务。

重传请求 rexmit-request控制重传心跳请求(不重要)

Heatbeat IP地址接管和故障转移:

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

arp广播:在主服务器故障时,备用节点接管资源后,会立即强制更新所有客户端本地的arp表

(清除客户端本地缓存的失败服务器的vip地址和mac地址的解析纪录,确保客户端和新的主服务器对话)

vip / ip 别名/辅助别名ip

真实ip 为物理网卡配置的实际ip,称为管理ip
虚拟ip /vip 临时绑定在物理网卡上的ip 

配置vip的常见方法

别名ip  alias IP 
ifconfig eth0:1 10.0.0.10 netmask 255.255.255.254 up

删除:ifconfig eth0:1 down

永久生效: 写成配置文件 ,这个别名ip 以后遗弃了,用辅助

辅助ip  secondary ip address   注意!
添加:ip addr add 10.0.0.2/24 dev eth0

查看:ip a

删除: ip add del 10.0.0.2/24 dev eth0

注意:hearbeat 2.1.4 以前使用的是别名ip,hearbeat 2.1.4使用辅助ip,提供vip服务,但keeplived一直都是辅助ip提供服务。

时间: 2025-01-01 16:55:47

Hearbeat 学习 上的相关文章

李笑来老师在《把时间当作朋友》曾说过:“所有学习上的成功,都只靠两件事:策略和坚持,而坚持本身就应该是最重要的策略之一

高效编程=工具+方法+体系+专注 前面根据个人的经验,分享了一些提高编程效率的个人心得.每个人的经历经验不尽相同,相信其实每个人心中都有一份自己的清单.但最最重要的是坚持投入,不断地练习.练习.练习.练习.练习…… 这里引用最近看到的名言自我勉励一下,来自Bruce Lee李小龙: “I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,00

学习上的思考与心得

由于这段时间在c语言的学习中,表现的很努力并且完成作业态度认真,所以得到了老师奖励的小黄衫. 以下是我对于c语言的学习感受与心得. 学习感受与心得 我选择计算机的这个专业,是因为我对计算机的学习很有兴趣.c语言是我以前从来没有接触过.也没有了解过的,所以当我知道要学习c语言的时候,我是有一些紧张的.当我看到书上的一堆代码,我害怕学不会,学不懂.但当我上完第一次课时,我发现c语言其实并没有想象中的那么遥远,那么不可接近,通过几次简单的实验练习,就可以记住它的大致结构.在运用c-free时,它也会提

学习上的感悟

软件工程,顾名思义,是一门用工程化的思想去开发软件的学科.它实际上是一个工程,并不是大多数人所以为的,软件工程就是开发软件这么简单,写写语言代码这么幼稚. 数学和算法以及基础课,在计算机领域中极其的重要,是我们最需要学好的!前段时间,曾经看到有篇文章,大致讲的是,现在的开发都是基于新技术.基于框架.基于封装进行开发,花时间去学数学呀,算法呀,基础课的话,真的没什么必要,因为,开发的时候,根本就用不到!说实话,从完成软件产品的角度来说的话,还真是,因为我大二做了一年的项目,所以做项目的流程也非常清

ASP.NET MVC Model验证学习—上

蒋大师的MVC框架解析确实是越学越有趣,即使是跟着学写些示例代码也是收获良多,尤其是关于类型.反射和委托等方面,平时在应用开发中确实很少会有机会写这样的代码.今天学习的ASP.NET MVC中的Model的验证,刚开时会以为这一章会比较简单,因为之前已经学习过了Model元数据的解析.Model绑定,Model的验证可能就只是DataAnnotation相关类的介绍.但实际学习的过程中,尤其是自定义用于修饰Action的验证特性让我到现在仍然感觉是比较萌萌哒,毕竟这一块对于框架的扩展基本上涉及到

SpringMVC 学习-上传文件分解器 CommonsMultipartResolver 类

Spring 组件 CommonsMultipartResolver 类的主要作用是配置文件上传的一些属性,也可以控制上传文件的大小. 在 springmvc-servlet.xml 配置文件中: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="d

MemberCached 学习上【转】

缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法. Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度. Memcache 是什么 Memcache 是 danga.com 的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的

oc学习上自己遇到的问题

遇到问题:p只是一个指针,怎么能代表整个对象 , 操作上这样的语句[p 方法]让我理解不了? Car *p = [Car new]; 返回的是Car类型的地址,所以用指向Car类型的指针接收 理解方式一: 定义了一个Car类型的指针变量 指针变量指向新申请的内存空间 理解方式二: 用Car类实例化了一个实例对象,对象的名称是p 比较奇怪的是这二种说法竟然能统一起来,p是指针,也竟然是对象名,代表了创建的对象,难度只能硬记. 遇到问题02: 字符串后面跟的是0还是\0 多态实质要深入内存考虑,但仍

5月学习月~比拼学习 上浮力

5月学习月活动 一.活动对象 所有微职位学员 二.活动时间 2018年5月7日-2018年5月27日 (合计三周,21天) 三.活动目标 提升大家的学习能力,形成被动学习变成主动学习的好习惯.通过学习排行榜的学习时长数据排名 能激发大家学习的积极性和主动性,能更好的促进大家进行深度学习. 四.活动规则 (1)班级学习时长排行榜每周一(14.21.28日)发布:班级学习时长前10名同学 (2)学院学习时长排行总榜 (29日)发布:计算(5月7日-5月27日)每个班学员的学习时长数据,计算微职位的排

Python学习—面向对象学习上

面向对象简介 OOP编程是利用"类"和"对象"来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容. 面向对象的三大特性 Encapsulation 封装把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.注意的是.这里说的属性并不仅仅是基本数据