通过heartbeat,可以将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务,一般称之为高可用服务。在实际生产中mkeepalived有很多相同之处。在生产实际的业务应用也是有区别的。
2.工作原理
通过修改heartbeat软件的配置文件,可以指定那一台heartbeat服务器作为主服务器,则另一台将自动称为热备服务器,然后在热备服务器上配置heartbeat守护进程来监听来自祝福我的心跳信息,如果热备服务器在指定实践内未监听到来自住服务器的心跳,就会启动故障转移程序,并取得住服务器上的相关资源服务的所有权,接替住服务继续不间断的提供服务,从而达到资源及服务高可用性的目的。这是heartbeat主备的模式。
还可以支持主主模式,这时它们之间会相互发送报文给对方主机监听程序是否正常。
在heartbeat进行主备切换的时候,是需要时间的,首先是判断主宕机,然后从接替vip,启动从服务上面的程序(备机上面的程序本来是没有开启的)。
另外:和keepalived服务一样,heartbeat高可用是服务器级别的,不是服务器级别的,如果主上面的apache,mysqld服务出现问题,是不会切换的,只有服务器宕机,heartbeat服务本身故障或者heartbeat主备之间的连接线路出现问题才会发生切换。
所以要做处理,如果服务宕机了,就把heartbeat停掉。
心跳连接介绍:
实现高可用,这两台主机之间是如何做到互相通信和互相监测的?
1.串行电缆,所谓的串口(首先,缺点是距离不能太远)
2.一根以太网线两网卡直连(推荐)
3.以太网电缆,通过交换机等网络设备是连接(次选)增加来交换机故障点,容易受其他数据传输的影响,导致心跳报文发送失败。
脑裂:
由于两台高可用服务器对之间在指定时间内,无法检测到对方心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务器对都还或者并在正常运行,这样就会导致同一个IP或服务在两端同时启动而发生冲突的严重问题,最严重的是两台主机占用同一个vip地址,当用户写入数据可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或数据丢失,这样情况就被称为脑裂,也有的人成气味分区集群或大脑垂直分割。
防止脑裂:
(推荐)同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳信息。
(企业级别)*检测到脑裂时强行关闭一个心跳节点。(这个功能许特殊设备支持,如stonith,fence),相当于程序上备节点发现心跳线路故障,发送关机命令到主节点。
做好对脑裂的监控报警(如邮件及手机短信等),在问题发生时认为第一时间介入仲裁,降低损失
增加仲裁机制:
当心跳线完全断开的时候,两个节点分别ping网关,那个ping不通就自己放弃。
关于fence设备
fence是HA集群环境下的术语,在硬件领域,fence设备其实就是一个智能电源管理设备(IPMI),不管是内部还是外部fence,这些外部fence,这些设备都是带有以太网口的,用来在HA切换触发时通过网络重启提供资源服务的服务器。
heartbeat消息类型
heartbeat高可用软件在工作过程中,一般来说,有三种消息类型,具体为:
心跳消息
集群转换消息
重传请求
1.心跳消息
心跳消息为约150字节的数据包,可能为单播,广播或多播的方式,控制心跳频率及出现故障要等待多久进行故障转移。
2.集群转换消息
ip-request和ip-request-resp
当主服务器恢复在线状态时,通过ip-request消息要求备机释放主服务器失败时备服务器取得的资源,然后备份服务器关闭释放主服务器失败时取得的资源及服务。
备服务器释放主服务器失败时取得的资源及服务后,通过ip-request-resp消息通知主服务器它不在拥有该资源及服务,主服务器收到备节点的ip-request-resp消息通知后,启动失败时释放的资源及服务,并开始提供正常的访问服务。
3.重传请求
rexmit-request控制重传心跳请求,次消息不太重要。
提示:以上心跳控制消息都使用UDP协议发送到/etc/ha.d/ha.cf文件指定的任意端口,或指定的多播地址。
heartbeat IP地址接管和故障转移
heartbeat是通过IP地址接管和ARP广播进行故障转移的。
ARP广播:在主服务器故障时,备用节点接管资源后,会立即强制更新所有客户端本地的ARP表(即清除客户端本地缓存的失败服务器的Vip地址和mac地址的解析记录)。确保客户端和新的主服务器对话。
这个所说的客户端是指的是在这个局域网内做ARP广播,告诉局域网此时VIP对应的MAC地址。
VIP:
绑定在网卡别名上的ip。
手工配置VIP的方法:
ifconfig eth0:1 10.0.0.4 netmask 255.255.255.224 up/down (ip别名)
ip addr add/del 10.0.0.5/24 broadcast 10.0.0.255 dev eth1 辅助IP
提示:heartbeat3不在使用ip别名,而是使用辅助IP
原文地址:http://blog.51cto.com/11726212/2073626