1.heartbeat的做用
mysql
经过heartbeat,能够将资源(IP及程序服务等资源)从一台已经故障的计算机快速转移到另外一台正常运转的机器上继续提供服务,通常称之为高可用服务。在实际生产中mkeepalived有不少相同之处。在生产实际的业务应用也是有区别的。sql
2.工做原理apache
经过修改heartbeat软件的配置文件,能够指定那一台heartbeat服务器做为主服务器,则另外一台将自动称为热备服务器,而后在热备服务器上配置heartbeat守护进程来监听来自祝福个人心跳信息,若是热备服务器在指定实践内未监听到来自住服务器的心跳,就会启动故障转移程序,并取得住服务器上的相关资源服务的全部权,接替住服务继续不间断的提供服务,从而达到资源及服务高可用性的目的。这是heartbeat主备的模式。缓存
还能够支持主主模式,这时它们之间会相互发送报文给对方主机监听程序是否正常。服务器
在heartbeat进行主备切换的时候,是须要时间的,首先是判断主宕机,而后从接替vip,启动从服务上面的程序(备机上面的程序原本是没有开启的)。网络
另外:和keepalived服务同样,heartbeat高可用是服务器级别的,不是服务器级别的,若是主上面的apache,mysqld服务出现问题,是不会切换的,只有服务器宕机,heartbeat服务自己故障或者heartbeat主备之间的链接线路出现问题才会发生切换。ide
因此要作处理,若是服务宕机了,就把heartbeat停掉。blog
心跳链接介绍:
进程
实现高可用,这两台主机之间是如何作到互相通讯和互相监测的?ip
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